Commit 230885eb authored by Jan Beich's avatar Jan Beich

cursor/os-compatibility: move resizing into a separate function

Signed-off-by: Jan Beich's avatarJan Beich <jbeich@FreeBSD.org>
parent 3a3dd082
Pipeline #111881 passed with stage
in 2 minutes and 27 seconds
......@@ -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;
}
......@@ -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 */
......@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment