android: add support for NDK sharedmem
authorDevriesL <therkduan@gmail.com>
Tue, 25 May 2021 15:45:11 +0000 (23:45 +0800)
committerDevriesL <therkduan@gmail.com>
Tue, 25 May 2021 22:52:05 +0000 (06:52 +0800)
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 <therkduan@gmail.com>
os/os-android.h

index 3f1aa9d30abec412ffb9c72cfd08aae8ebe9c487..a81cd815e1a7df5b0328fbda515edbfa10f40042 100644 (file)
 #include <stdio.h>
 #include <linux/ashmem.h>
 #include <linux/shm.h>
+#include <android/api-level.h>
+#if __ANDROID_API__ >= __ANDROID_API_O__
+#include <android/sharedmem.h>
+#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)
 {