diff options
-rw-r--r-- | ccache.c | 1 | ||||
-rw-r--r-- | ccache.h | 1 | ||||
-rw-r--r-- | util.c | 18 |
3 files changed, 16 insertions, 4 deletions
@@ -3137,6 +3137,7 @@ static void setup_uncached_err(void) { int uncached_fd = dup(2); + set_cloexec_flag(uncached_fd); if (uncached_fd == -1) { cc_log("dup(2) failed: %s", strerror(errno)); failed(); @@ -184,6 +184,7 @@ char *x_readlink(const char *path); bool read_file(const char *path, size_t size_hint, char **data, size_t *size); char *read_text_file(const char *path, size_t size_hint); char *subst_env_in_string(const char *str, char **errmsg); +void set_cloexec_flag (int fd); // ---------------------------------------------------------------------------- // stats.c @@ -51,10 +51,7 @@ init_log(void) if (logfile) { #ifndef _WIN32 int fd = fileno(logfile); - int flags = fcntl(fd, F_GETFD, 0); - if (flags >= 0) { - fcntl(fd, F_SETFD, flags | FD_CLOEXEC); - } + set_cloexec_flag(fd); #endif return true; } else { @@ -1187,6 +1184,7 @@ create_tmp_fd(char **fname) fatal("Failed to create temporary file for %s: %s", *fname, strerror(errno)); } + set_cloexec_flag(fd); #ifndef _WIN32 fchmod(fd, 0666 & ~get_umask()); @@ -1662,3 +1660,15 @@ subst_env_in_string(const char *str, char **errmsg) reformat(&result, "%s%.*s", result, (int)(q - p), p); return result; } + +void +set_cloexec_flag (int fd) +{ +#ifndef _WIN32 + int flags = fcntl(fd, F_GETFD, 0); + if (flags >= 0) { + fcntl(fd, F_SETFD, flags | FD_CLOEXEC); + } +#endif +} + |