From 04a2637f23a9d2b1aee83e364450a02377b44cbc Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Fri, 1 Jan 2016 08:39:41 +0100 Subject: small improvements and cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/daemon.h | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'src/daemon.h') diff --git a/src/daemon.h b/src/daemon.h index 5aaa1c6..d860d1f 100644 --- a/src/daemon.h +++ b/src/daemon.h @@ -1,5 +1,5 @@ /** - * Copyright © 2015 Mattias Andrée + * Copyright © 2015, 2016 Mattias Andrée * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -89,17 +89,28 @@ * * @param ... The statement. */ -# ifdef DEBUG +# ifndef DEBUG +# define t(...) do { if (__VA_ARGS__) goto fail; } while (0) +# else # define t(...) do { if ((__VA_ARGS__) ? (failed__ = #__VA_ARGS__) : 0) { (perror)(failed__); goto fail; } } while (0) static const char *failed__ = NULL; # define perror(_) ((void)(_)) -# else -# define t(...) do { if (__VA_ARGS__) goto fail; } while (0) # endif #endif +/** + * `dup2(OLD, NEW)` and, on success, `close(OLD)`. + * + * @param OLD:int The file descriptor to duplicate and close. + * @param NEW:int The new file descriptor. + * @return 0 on success, -1 on error. + */ +#define DUP2_AND_CLOSE(OLD, NEW) (dup2(OLD, NEW) == -1 ? -1 : (close(OLD), 0)) + + + /** * Macro to put directly after the variable definitions in `main`. */ @@ -194,8 +205,6 @@ ssize_t pwriten(int fildes, const void *buf, size_t nbyte, size_t offset); /** * Wrapper for `read` that reads all available data. * - * Sets `errno` to `EBADMSG` on success. - * * @param fd The file descriptor from which to to read. * @param buf Output parameter for the data. * @param n Output parameter for the number of read bytes. -- cgit v1.2.3-70-g09d2