cursor/os-compatibility: move resizing into a separate function
authorJan Beich <jbeich@FreeBSD.org>
Sun, 16 Feb 2020 05:54:33 +0000 (05:54 +0000)
committerJan Beich <jbeich@FreeBSD.org>
Sun, 23 Feb 2020 20:42:54 +0000 (20:42 +0000)
Signed-off-by: Jan Beich <jbeich@FreeBSD.org>
cursor/os-compatibility.c
cursor/os-compatibility.h
cursor/wayland-cursor.c

index 002bb5c..9eac229 100644 (file)
@@ -119,7 +119,6 @@ os_create_anonymous_file(off_t size)
        const char *path;
        char *name;
        int fd;
-       int ret;
 
 #ifdef HAVE_MEMFD_CREATE
        fd = memfd_create("wayland-cursor", MFD_CLOEXEC | MFD_ALLOW_SEALING);
@@ -155,25 +154,30 @@ os_create_anonymous_file(off_t size)
                        return -1;
        }
 
+       if (os_resize_anonymous_file(fd, size) < 0) {
+               close(fd);
+               return -1;
+       }
+
+       return fd;
+}
+
+int
+os_resize_anonymous_file(int fd, off_t size)
+{
 #ifdef HAVE_POSIX_FALLOCATE
        /* 
         * Filesystems that do support fallocate will return EINVAL or
         * EOPNOTSUPP. In this case we need to fall back to ftruncate
         */
-       ret = posix_fallocate(fd, 0, size);
-       if (ret == 0) {
-               return fd;
-       } else if (ret != EINVAL && ret != EOPNOTSUPP) {
-               close(fd);
-               errno = ret;
+       errno = posix_fallocate(fd, 0, size);
+       if (errno == 0)
+               return 0;
+       else if (errno != EINVAL && errno != EOPNOTSUPP)
                return -1;
-       }
 #endif
-       ret = ftruncate(fd, size);
-       if (ret < 0) {
-               close(fd);
+       if (ftruncate(fd, size) < 0)
                return -1;
-       }
 
-       return fd;
+       return 0;
 }
index d0e69ac..fdfeb78 100644 (file)
@@ -31,4 +31,7 @@
 int
 os_create_anonymous_file(off_t size);
 
+int
+os_resize_anonymous_file(int fd, off_t size);
+
 #endif /* OS_COMPATIBILITY_H */
index ca5be8d..4e2dc50 100644 (file)
@@ -83,17 +83,7 @@ err_free:
 static int
 shm_pool_resize(struct shm_pool *pool, int size)
 {
-#ifdef HAVE_POSIX_FALLOCATE
-       /* 
-        * Filesystems that do support fallocate will return EINVAL or
-        * EOPNOTSUPP. In this case we need to fall back to ftruncate
-        */
-       errno = posix_fallocate(pool->fd, 0, size);
-       if (errno != 0 && errno != EINVAL && errno != EOPNOTSUPP)
-               return 0;
-#endif
-
-       if (ftruncate(pool->fd, size) < 0)
+       if (os_resize_anonymous_file(pool->fd, size) < 0)
                return 0;
 
        wl_shm_pool_resize(pool->pool, size);