Skip to content

Commit

Permalink
lib: introduce i_close_fd_path()
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Josef 'Jeff' Sipek authored and Timo Sirainen committed Oct 3, 2017
1 parent e4ac564 commit c25d75b
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 6 deletions.
11 changes: 7 additions & 4 deletions src/lib/lib.c
Expand Up @@ -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;

Expand All @@ -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;
Expand Down
6 changes: 4 additions & 2 deletions src/lib/macros.h
Expand Up @@ -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() \
Expand Down

0 comments on commit c25d75b

Please sign in to comment.