mirror of
https://github.com/termux/termux-packages.git
synced 2024-11-23 14:56:16 +00:00
40 lines
907 B
Diff
40 lines
907 B
Diff
+++ ./platform/linuxbsd/wayland/wayland_thread.cpp
|
|
@@ -96,9 +96,29 @@
|
|
return data;
|
|
}
|
|
|
|
+#include <sys/ioctl.h>
|
|
// Based on the wayland book's shared memory boilerplate (PD/CC0).
|
|
// See: https://wayland-book.com/surfaces/shared-memory.html
|
|
int WaylandThread::_allocate_shm_file(size_t size) {
|
|
+#ifdef __ANDROID__
|
|
+ int fd, ret;
|
|
+ long flags;
|
|
+ fd = open("/dev/ashmem", O_RDWR | O_CLOEXEC);
|
|
+ if (fd < 0)
|
|
+ return fd;
|
|
+ ret = ioctl(fd, /* ASHMEM_SET_SIZE */ _IOW(0x77, 3, size_t), size);
|
|
+ if (ret < 0)
|
|
+ goto err;
|
|
+ flags = fcntl(fd, F_GETFD);
|
|
+ if (flags == -1)
|
|
+ goto err;
|
|
+ if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1)
|
|
+ goto err;
|
|
+ return fd;
|
|
+ err:
|
|
+ close(fd);
|
|
+ return -1;
|
|
+#else
|
|
int retries = 100;
|
|
|
|
do {
|
|
@@ -132,6 +152,7 @@
|
|
} while (retries > 0 && errno == EEXIST);
|
|
|
|
return -1;
|
|
+#endif
|
|
}
|
|
|
|
// Return the content of a wl_data_offer.
|