Merge change 2875 into donut
* changes: Added ashmem_get_size_region() function.
This commit is contained in:
commit
3f62720562
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_set_prot_region(int fd, int prot);
|
||||||
int ashmem_pin_region(int fd, size_t offset, size_t len);
|
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_unpin_region(int fd, size_t offset, size_t len);
|
||||||
|
int ashmem_get_size_region(int fd);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -83,3 +83,8 @@ int ashmem_unpin_region(int fd, size_t offset, size_t len)
|
||||||
struct ashmem_pin pin = { offset, len };
|
struct ashmem_pin pin = { offset, len };
|
||||||
return ioctl(fd, ASHMEM_UNPIN, &pin);
|
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;
|
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…
Add table
Reference in a new issue