From d7e3adb683f85e49e078599a08aec7cd7c32d977 Mon Sep 17 00:00:00 2001 From: DevriesL Date: Tue, 25 May 2021 23:45:11 +0800 Subject: [PATCH] android: add support for NDK sharedmem Android add support for NDK sharedmem since API level 26 and prohibit the directly use of ashmem since API level 29, so we can use sharedmem if targeting API level is higher than 26. Signed-off-by: DevriesL --- os/os-android.h | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/os/os-android.h b/os/os-android.h index 3f1aa9d3..a81cd815 100644 --- a/os/os-android.h +++ b/os/os-android.h @@ -71,11 +71,15 @@ #include #include #include +#include +#if __ANDROID_API__ >= __ANDROID_API_O__ +#include +#else +#define ASHMEM_DEVICE "/dev/ashmem" +#endif #define shmid_ds shmid64_ds #define SHM_HUGETLB 04000 -#define ASHMEM_DEVICE "/dev/ashmem" - static inline int shmctl(int __shmid, int __cmd, struct shmid_ds *__buf) { int ret=0; @@ -89,6 +93,16 @@ static inline int shmctl(int __shmid, int __cmd, struct shmid_ds *__buf) return ret; } +#if __ANDROID_API__ >= __ANDROID_API_O__ +static inline int shmget(key_t __key, size_t __size, int __shmflg) +{ + char keybuf[11]; + + sprintf(keybuf, "%d", __key); + + return ASharedMemory_create(keybuf, __size + sizeof(uint64_t)); +} +#else static inline int shmget(key_t __key, size_t __size, int __shmflg) { int fd,ret; @@ -114,6 +128,7 @@ error: close(fd); return ret; } +#endif static inline void *shmat(int __shmid, const void *__shmaddr, int __shmflg) { -- 2.25.1