am 3f627205
: Merge change 2875 into donut
Merge commit '3f6272056275a00c30c07394d63bbe81cc9c5eba' * commit '3f6272056275a00c30c07394d63bbe81cc9c5eba': Added ashmem_get_size_region() function.
This commit is contained in:
commit
baf83e0250
3 changed files with 26 additions and 0 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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)?
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue