From 7be52b1a0e052635b361f9d8c186adbbcc981b7e Mon Sep 17 00:00:00 2001 From: Bjorn Bringert Date: Tue, 2 Jun 2009 00:41:09 +0100 Subject: Added ashmem_get_size_region() function. This is needed by the MemoryFile changes in https://android-git.corp.google.com/g/2714 where it is used to find out whether a file descriptor refers to an ashmem region. --- include/cutils/ashmem.h | 1 + libcutils/ashmem-dev.c | 5 +++++ libcutils/ashmem-host.c | 20 ++++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/include/cutils/ashmem.h b/include/cutils/ashmem.h index fd71352..0683bf2 100644 --- a/include/cutils/ashmem.h +++ b/include/cutils/ashmem.h @@ -18,6 +18,7 @@ int ashmem_create_region(const char *name, size_t size); int ashmem_set_prot_region(int fd, int prot); int ashmem_pin_region(int fd, size_t offset, size_t len); int ashmem_unpin_region(int fd, size_t offset, size_t len); +int ashmem_get_size_region(int fd); #ifdef __cplusplus } diff --git a/libcutils/ashmem-dev.c b/libcutils/ashmem-dev.c index 5e158af..8b71f87 100644 --- a/libcutils/ashmem-dev.c +++ b/libcutils/ashmem-dev.c @@ -83,3 +83,8 @@ int ashmem_unpin_region(int fd, size_t offset, size_t len) struct ashmem_pin pin = { offset, len }; return ioctl(fd, ASHMEM_UNPIN, &pin); } + +int ashmem_get_size_region(int fd) +{ + return ioctl(fd, ASHMEM_GET_SIZE, NULL); +} diff --git a/libcutils/ashmem-host.c b/libcutils/ashmem-host.c index dbb52bc..f03e130 100644 --- a/libcutils/ashmem-host.c +++ b/libcutils/ashmem-host.c @@ -92,3 +92,23 @@ int ashmem_unpin_region(int fd, size_t offset, size_t len) { return ASHMEM_IS_UNPINNED; } + +int ashmem_get_size_region(int fd) +{ + struct stat buf; + int result; + + result = fstat(fd, &buf); + if (result == -1) { + return -1; + } + + // 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; + } + + return (int)buf.st_size; // TODO: care about overflow (> 2GB file)? +} -- cgit v1.1