aboutsummaryrefslogtreecommitdiffstats
path: root/cursor
diff options
context:
space:
mode:
Diffstat (limited to 'cursor')
-rw-r--r--cursor/wayland-cursor.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/cursor/wayland-cursor.c b/cursor/wayland-cursor.c
index d40c5c8..ca5be8d 100644
--- a/cursor/wayland-cursor.c
+++ b/cursor/wayland-cursor.c
@@ -83,15 +83,19 @@ err_free:
static int
shm_pool_resize(struct shm_pool *pool, int size)
{
- if (ftruncate(pool->fd, size) < 0)
- return 0;
-
#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)
+ if (errno != 0 && errno != EINVAL && errno != EOPNOTSUPP)
return 0;
#endif
+ if (ftruncate(pool->fd, size) < 0)
+ return 0;
+
wl_shm_pool_resize(pool->pool, size);
munmap(pool->data, pool->size);