Skip to content
Browse files

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.
  • Loading branch information...
1 parent 3c5a6f0 commit 7be52b1a0e052635b361f9d8c186adbbcc981b7e Bjorn Bringert committed
Showing with 26 additions and 0 deletions.
  1. +1 −0 include/cutils/ashmem.h
  2. +5 −0 libcutils/ashmem-dev.c
  3. +20 −0 libcutils/ashmem-host.c
View
1 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
}
View
5 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);
+}
View
20 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)?
+}

0 comments on commit 7be52b1

Please sign in to comment.
Something went wrong with that request. Please try again.