From e02c486b604ea54f8b268a1f73d38f4ddb3078a4 Mon Sep 17 00:00:00 2001 From: emersion Date: Sat, 21 Jul 2018 11:55:54 +0100 Subject: Use posix_fallocate when available --- util/os-compatibility.c | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) (limited to 'util') diff --git a/util/os-compatibility.c b/util/os-compatibility.c index 38333605..70539eef 100644 --- a/util/os-compatibility.c +++ b/util/os-compatibility.c @@ -23,7 +23,7 @@ * SOFTWARE. */ -#define _XOPEN_SOURCE 700 +#define _POSIX_C_SOURCE 200809L #include #include #include @@ -35,17 +35,18 @@ #include "util/os-compatibility.h" int os_fd_set_cloexec(int fd) { - long flags; - - if (fd == -1) + if (fd == -1) { return -1; + } - flags = fcntl(fd, F_GETFD); - if (flags == -1) + long flags = fcntl(fd, F_GETFD); + if (flags == -1) { return -1; + } - if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) + if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) { return -1; + } return 0; } @@ -58,15 +59,14 @@ int set_cloexec_or_close(int fd) { return fd; } -int create_tmpfile_cloexec(char *tmpname) -{ +int create_tmpfile_cloexec(char *tmpname) { int fd; - mode_t prev_umask = umask(0066); #ifdef HAVE_MKOSTEMP fd = mkostemp(tmpname, O_CLOEXEC); - if (fd >= 0) + if (fd >= 0) { unlink(tmpname); + } #else fd = mkstemp(tmpname); if (fd >= 0) { @@ -102,32 +102,29 @@ int create_tmpfile_cloexec(char *tmpname) */ int os_create_anonymous_file(off_t size) { static const char template[] = "/wlroots-shared-XXXXXX"; - const char *path; - char *name; - int fd; - int ret; - path = getenv("XDG_RUNTIME_DIR"); + const char *path = getenv("XDG_RUNTIME_DIR"); if (!path) { errno = ENOENT; return -1; } - name = malloc(strlen(path) + sizeof(template)); - if (!name) + char *name = malloc(strlen(path) + sizeof(template)); + if (!name) { return -1; + } strcpy(name, path); strcat(name, template); - fd = create_tmpfile_cloexec(name); - + int fd = create_tmpfile_cloexec(name); free(name); - - if (fd < 0) + if (fd < 0) { return -1; + } -#ifdef HAVE_POSIX_FALLOCATE +#ifdef WLR_HAS_POSIX_FALLOCATE + int ret; do { ret = posix_fallocate(fd, 0, size); } while (ret == EINTR); @@ -137,6 +134,7 @@ int os_create_anonymous_file(off_t size) { return -1; } #else + int ret; do { ret = ftruncate(fd, size); } while (ret < 0 && errno == EINTR); -- cgit v1.2.3