We have a couple of callers of ftruncate and posix_fallocate around, with
ifdef protecting the posix_fallocate calls.  Combine all this into a
single wl_os_resize_file().

Signed-off-by: Derek Foreman <der...@osg.samsung.com>
---
 cursor/wayland-cursor.c | 10 +---------
 src/wayland-os.c        | 37 +++++++++++++++++++++++--------------
 src/wayland-os.h        |  3 +++
 3 files changed, 27 insertions(+), 23 deletions(-)

diff --git a/cursor/wayland-cursor.c b/cursor/wayland-cursor.c
index 7319812..691310d 100644
--- a/cursor/wayland-cursor.c
+++ b/cursor/wayland-cursor.c
@@ -33,8 +33,6 @@
 #include <string.h>
 #include <unistd.h>
 #include <sys/mman.h>
-#include <fcntl.h>
-#include <errno.h>
 
 #define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
 
@@ -81,15 +79,9 @@ err_free:
 static int
 shm_pool_resize(struct shm_pool *pool, int size)
 {
-       if (ftruncate(pool->fd, size) < 0)
+       if (wl_os_resize_file(pool->fd, size) < 0)
                return 0;
 
-#ifdef HAVE_POSIX_FALLOCATE
-       errno = posix_fallocate(pool->fd, 0, size);
-       if (errno != 0)
-               return 0;
-#endif
-
        wl_shm_pool_resize(pool->pool, size);
 
        munmap(pool->data, pool->size);
diff --git a/src/wayland-os.c b/src/wayland-os.c
index 40e63d7..2cd6bf3 100644
--- a/src/wayland-os.c
+++ b/src/wayland-os.c
@@ -188,6 +188,28 @@ create_tmpfile_cloexec(char *tmpname)
        return fd;
 }
 
+int wl_os_resize_file(int fd, off_t size)
+{
+       int ret;
+
+#ifdef HAVE_POSIX_FALLOCATE
+       ret = posix_fallocate(fd, 0, size);
+       if (ret != 0) {
+               close(fd);
+               errno = ret;
+               return -1;
+       }
+#endif
+       /* If we were shrinking the file we'll still need ftruncate */
+       ret = ftruncate(fd, size);
+       if (ret < 0) {
+               close(fd);
+               return -1;
+       }
+
+       return 0;
+}
+
 /*
  * Create a new, unique, anonymous file of the given size, and
  * return the file descriptor for it. The file descriptor is set
@@ -216,7 +238,6 @@ wl_os_create_anonymous_file(off_t size)
        const char *path;
        char *name;
        int fd;
-       int ret;
 
        path = getenv("XDG_RUNTIME_DIR");
        if (!path) {
@@ -241,20 +262,8 @@ wl_os_create_anonymous_file(off_t size)
        if (!size)
                return fd;
 
-#ifdef HAVE_POSIX_FALLOCATE
-       ret = posix_fallocate(fd, 0, size);
-       if (ret != 0) {
-               close(fd);
-               errno = ret;
+       if (wl_os_resize_file(fd, size) < 0)
                return -1;
-       }
-#else
-       ret = ftruncate(fd, size);
-       if (ret < 0) {
-               close(fd);
-               return -1;
-       }
-#endif
 
        return fd;
 }
diff --git a/src/wayland-os.h b/src/wayland-os.h
index 465a638..300a343 100644
--- a/src/wayland-os.h
+++ b/src/wayland-os.h
@@ -47,6 +47,9 @@ int
 wl_os_accept_cloexec(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
 
 int
+wl_os_resize_file(int fd, off_t size);
+
+int
 wl_os_create_anonymous_file(off_t size);
 
 /*
-- 
2.7.0

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to