Loading libcutils/ashmem-dev.c +35 −28 Original line number Diff line number Diff line Loading @@ -20,14 +20,16 @@ * used by the simulator. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <linux/ashmem.h> #include <cutils/ashmem.h> #define ASHMEM_DEVICE "/dev/ashmem" Loading @@ -41,50 +43,55 @@ */ int ashmem_create_region(const char *name, size_t size) { int fd, ret; int ret, save_errno; fd = open(ASHMEM_DEVICE, O_RDWR); if (fd < 0) int fd = TEMP_FAILURE_RETRY(open(ASHMEM_DEVICE, O_RDWR)); if (fd < 0) { return fd; } if (name) { char buf[ASHMEM_NAME_LEN] = {0}; strlcpy(buf, name, sizeof(buf)); ret = ioctl(fd, ASHMEM_SET_NAME, buf); if (ret < 0) ret = TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_SET_NAME, buf)); if (ret < 0) { goto error; } } ret = ioctl(fd, ASHMEM_SET_SIZE, size); if (ret < 0) ret = TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_SET_SIZE, size)); if (ret < 0) { goto error; } return fd; error: save_errno = errno; close(fd); errno = save_errno; return ret; } int ashmem_set_prot_region(int fd, int prot) { return ioctl(fd, ASHMEM_SET_PROT_MASK, prot); return TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_SET_PROT_MASK, prot)); } int ashmem_pin_region(int fd, size_t offset, size_t len) { struct ashmem_pin pin = { offset, len }; return ioctl(fd, ASHMEM_PIN, &pin); return TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_PIN, &pin)); } int ashmem_unpin_region(int fd, size_t offset, size_t len) { struct ashmem_pin pin = { offset, len }; return ioctl(fd, ASHMEM_UNPIN, &pin); return TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_UNPIN, &pin)); } int ashmem_get_size_region(int fd) { return ioctl(fd, ASHMEM_GET_SIZE, NULL); return TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_GET_SIZE, NULL)); } libcutils/ashmem-host.c +5 −2 Original line number Diff line number Diff line Loading @@ -78,8 +78,11 @@ int ashmem_get_size_region(int fd) return -1; } // Check if this is an "ashmem" region. // TODO: This is very hacky, and can easily break. We need some reliable indicator. /* * Check if this is an "ashmem" region. * TODO: This is very hacky, and can easily break. * We need some reliable indicator. */ if (!(buf.st_nlink == 0 && S_ISREG(buf.st_mode))) { errno = ENOTTY; return -1; Loading Loading
libcutils/ashmem-dev.c +35 −28 Original line number Diff line number Diff line Loading @@ -20,14 +20,16 @@ * used by the simulator. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <linux/ashmem.h> #include <cutils/ashmem.h> #define ASHMEM_DEVICE "/dev/ashmem" Loading @@ -41,50 +43,55 @@ */ int ashmem_create_region(const char *name, size_t size) { int fd, ret; int ret, save_errno; fd = open(ASHMEM_DEVICE, O_RDWR); if (fd < 0) int fd = TEMP_FAILURE_RETRY(open(ASHMEM_DEVICE, O_RDWR)); if (fd < 0) { return fd; } if (name) { char buf[ASHMEM_NAME_LEN] = {0}; strlcpy(buf, name, sizeof(buf)); ret = ioctl(fd, ASHMEM_SET_NAME, buf); if (ret < 0) ret = TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_SET_NAME, buf)); if (ret < 0) { goto error; } } ret = ioctl(fd, ASHMEM_SET_SIZE, size); if (ret < 0) ret = TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_SET_SIZE, size)); if (ret < 0) { goto error; } return fd; error: save_errno = errno; close(fd); errno = save_errno; return ret; } int ashmem_set_prot_region(int fd, int prot) { return ioctl(fd, ASHMEM_SET_PROT_MASK, prot); return TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_SET_PROT_MASK, prot)); } int ashmem_pin_region(int fd, size_t offset, size_t len) { struct ashmem_pin pin = { offset, len }; return ioctl(fd, ASHMEM_PIN, &pin); return TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_PIN, &pin)); } int ashmem_unpin_region(int fd, size_t offset, size_t len) { struct ashmem_pin pin = { offset, len }; return ioctl(fd, ASHMEM_UNPIN, &pin); return TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_UNPIN, &pin)); } int ashmem_get_size_region(int fd) { return ioctl(fd, ASHMEM_GET_SIZE, NULL); return TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_GET_SIZE, NULL)); }
libcutils/ashmem-host.c +5 −2 Original line number Diff line number Diff line Loading @@ -78,8 +78,11 @@ int ashmem_get_size_region(int fd) return -1; } // Check if this is an "ashmem" region. // TODO: This is very hacky, and can easily break. We need some reliable indicator. /* * Check if this is an "ashmem" region. * TODO: This is very hacky, and can easily break. * We need some reliable indicator. */ if (!(buf.st_nlink == 0 && S_ISREG(buf.st_mode))) { errno = ENOTTY; return -1; Loading