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;
+}
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
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)
#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__)