From: Josef 'Jeff' Sipek Date: Fri, 22 Sep 2017 07:33:51 +0000 (+0300) Subject: lib: introduce i_close_fd_path() X-Git-Tag: 2.3.0.rc1~944 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c25d75b24ae0dcc0ab9081c389bbfc733d53ba63;p=thirdparty%2Fdovecot%2Fcore.git lib: introduce i_close_fd_path() It is like i_close_fd() but takes an argument with the name of the file that's being closed. The name is only used when printing the error message due to a failed close() syscall. --- diff --git a/src/lib/lib.c b/src/lib/lib.c index 413474fcc1..0ce51bec74 100644 --- a/src/lib/lib.c +++ b/src/lib/lib.c @@ -29,8 +29,8 @@ struct atexit_callback { static ARRAY(struct atexit_callback) atexit_callbacks = ARRAY_INIT; -void i_close_fd_real(int *fd, const char *arg, const char *func, - const char *file, int line) +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; @@ -41,8 +41,11 @@ void i_close_fd_real(int *fd, const char *arg, const char *func, saved_errno = errno; if (unlikely(close(*fd) < 0)) - i_error("%s: close(%s) @ %s:%d failed (fd=%d): %m", - func, arg, file, line, *fd); + 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/macros.h b/src/lib/macros.h index cf845eee10..dc73441242 100644 --- a/src/lib/macros.h +++ b/src/lib/macros.h @@ -212,8 +212,10 @@ /* 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_real(int *fd, const char *arg, const char *func, const char *file, int line); -#define i_close_fd(fd) i_close_fd_real((fd), #fd, __func__, __FILE__, __LINE__) +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() \