From: Josef 'Jeff' Sipek Date: Wed, 4 Oct 2017 12:58:36 +0000 (-0400) Subject: lib: move i_fd_close*() to fd-util.[ch] X-Git-Tag: 2.3.0.rc1~881 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=713e3ec4daebf5e0a4057f925ed1aeb5766debd8;p=thirdparty%2Fdovecot%2Fcore.git lib: move i_fd_close*() to fd-util.[ch] --- diff --git a/src/lib/fd-util.c b/src/lib/fd-util.c index 16cbe81b4b..e1febae312 100644 --- a/src/lib/fd-util.c +++ b/src/lib/fd-util.c @@ -130,3 +130,25 @@ void fd_close_maybe_stdio(int *fd_in, int *fd_out) i_fatal("dup2(/dev/null, %d) failed: %m", *fdp[i]); } } + +void i_close_fd_path_real(int *fd, const char *path, const char *arg, + const char *func, const char *file, int line) +{ + int saved_errno; + + if (*fd == -1) + return; + + i_assert(*fd > 0); + + saved_errno = errno; + if (unlikely(close(*fd) < 0)) + i_error("%s: close(%s%s%s) @ %s:%d failed (fd=%d): %m", + func, arg, + (path == NULL) ? "" : " = ", + (path == NULL) ? "" : path, + file, line, *fd); + errno = saved_errno; + + *fd = -1; +} diff --git a/src/lib/fd-util.h b/src/lib/fd-util.h index 0043eb9953..698536cd98 100644 --- a/src/lib/fd-util.h +++ b/src/lib/fd-util.h @@ -15,4 +15,12 @@ void fd_set_nonblock(int fd, bool nonblock); or stdout, they're replaced with /dev/null. */ void fd_close_maybe_stdio(int *fd_in, int *fd_out); +/* Close the fd and set it to -1. This assert-crashes if fd == 0, and is a + no-op if fd == -1. Normally fd == 0 would happen only if an uninitialized + fd is attempted to be closed, which is a bug. */ +void i_close_fd_path_real(int *fd, const char *path, const char *arg, + const char *func, const char *file, int line); +#define i_close_fd(fd) i_close_fd_path_real((fd), NULL, #fd, __func__, __FILE__, __LINE__) +#define i_close_fd_path(fd, path) i_close_fd_path_real((fd), (path), #fd, __func__, __FILE__, __LINE__) + #endif diff --git a/src/lib/lib.c b/src/lib/lib.c index 3225a17c11..ccbce97801 100644 --- a/src/lib/lib.c +++ b/src/lib/lib.c @@ -28,28 +28,6 @@ struct atexit_callback { static ARRAY(struct atexit_callback) atexit_callbacks = ARRAY_INIT; -void i_close_fd_path_real(int *fd, const char *path, const char *arg, - const char *func, const char *file, int line) -{ - int saved_errno; - - if (*fd == -1) - return; - - i_assert(*fd > 0); - - saved_errno = errno; - if (unlikely(close(*fd) < 0)) - i_error("%s: close(%s%s%s) @ %s:%d failed (fd=%d): %m", - func, arg, - (path == NULL) ? "" : " = ", - (path == NULL) ? "" : path, - file, line, *fd); - errno = saved_errno; - - *fd = -1; -} - #undef i_unlink int i_unlink(const char *path, const char *source_fname, unsigned int source_linenum) diff --git a/src/lib/macros.h b/src/lib/macros.h index dc73441242..eec7cd2f02 100644 --- a/src/lib/macros.h +++ b/src/lib/macros.h @@ -209,14 +209,6 @@ #endif -/* Close the fd and set it to -1. This assert-crashes if fd == 0, and is a - no-op if fd == -1. Normally fd == 0 would happen only if an uninitialized - fd is attempted to be closed, which is a bug. */ -void i_close_fd_path_real(int *fd, const char *path, const char *arg, - const char *func, const char *file, int line); -#define i_close_fd(fd) i_close_fd_path_real((fd), NULL, #fd, __func__, __FILE__, __LINE__) -#define i_close_fd_path(fd, path) i_close_fd_path_real((fd), (path), #fd, __func__, __FILE__, __LINE__) - #ifndef STATIC_CHECKER # define i_unreached() \ i_panic("file %s: line %d: unreached", __FILE__, __LINE__)