diff options
-rw-r--r-- | shared/os-compatibility.c | 22 | ||||
-rw-r--r-- | shared/os-compatibility.h | 3 | ||||
-rw-r--r-- | src/log.c | 7 |
3 files changed, 23 insertions, 9 deletions
diff --git a/shared/os-compatibility.c b/shared/os-compatibility.c index b903347f..05999745 100644 --- a/shared/os-compatibility.c +++ b/shared/os-compatibility.c @@ -36,8 +36,8 @@ #include "os-compatibility.h" -static int -set_cloexec_or_close(int fd) +int +os_fd_set_cloexec(int fd) { long flags; @@ -46,16 +46,22 @@ set_cloexec_or_close(int fd) flags = fcntl(fd, F_GETFD); if (flags == -1) - goto err; + return -1; if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) - goto err; + return -1; - return fd; + return 0; +} -err: - close(fd); - return -1; +static int +set_cloexec_or_close(int fd) +{ + if (os_fd_set_cloexec(fd) != 0) { + close(fd); + return -1; + } + return fd; } int diff --git a/shared/os-compatibility.h b/shared/os-compatibility.h index a12ac0bd..06d25748 100644 --- a/shared/os-compatibility.h +++ b/shared/os-compatibility.h @@ -41,6 +41,9 @@ backtrace(void **buffer, int size) #endif int +os_fd_set_cloexec(int fd); + +int os_socketpair_cloexec(int domain, int type, int protocol, int *sv); int @@ -36,6 +36,8 @@ #include "compositor.h" +#include "os-compatibility.h" + static FILE *weston_logfile = NULL; static int cached_tm_mday = -1; @@ -77,8 +79,11 @@ weston_log_file_open(const char *filename) { wl_log_set_handler_server(custom_handler); - if (filename != NULL) + if (filename != NULL) { weston_logfile = fopen(filename, "a"); + if (weston_logfile) + os_fd_set_cloexec(fileno(weston_logfile)); + } if (weston_logfile == NULL) weston_logfile = stderr; |