diff --git a/src/unix/core.c b/src/unix/core.c index 0756364f..25c5181f 100644 --- a/src/unix/core.c +++ b/src/unix/core.c @@ -1271,6 +1271,10 @@ static int uv__getpwuid_r(uv_passwd_t *pwd, uid_t uid) { int uv_os_get_group(uv_group_t* grp, uv_uid_t gid) { +#if defined(__ANDROID__) && __ANDROID_API__ < 24 + /* This function getgrgid_r() was added in Android N (level 24) */ + return UV_ENOSYS; +#else struct group gp; struct group* result; char* buf; @@ -1347,6 +1351,7 @@ int uv_os_get_group(uv_group_t* grp, uv_uid_t gid) { uv__free(buf); return 0; +#endif } diff --git a/src/unix/fs.c b/src/unix/fs.c index e9e323e7..6b051c12 100644 --- a/src/unix/fs.c +++ b/src/unix/fs.c @@ -55,6 +55,11 @@ # define HAVE_PREADV 0 #endif +/* preadv() and pwritev() were added in Android N (level 24) */ +#if defined(__linux__) && !(defined(__ANDROID__) && __ANDROID_API__ < 24) +# define TRY_PREADV 1 +#endif + #if defined(__linux__) # include #endif @@ -456,7 +461,7 @@ static ssize_t uv__fs_preadv(uv_file fd, static ssize_t uv__fs_read(uv_fs_t* req) { -#if defined(__linux__) +#if TRY_PREADV static _Atomic int no_preadv; #endif unsigned int iovmax; @@ -480,13 +485,13 @@ static ssize_t uv__fs_read(uv_fs_t* req) { #if HAVE_PREADV result = preadv(req->file, (struct iovec*) req->bufs, req->nbufs, req->off); #else -# if defined(__linux__) +# if TRY_PREADV if (atomic_load_explicit(&no_preadv, memory_order_relaxed)) retry: # endif { result = uv__fs_preadv(req->file, req->bufs, req->nbufs, req->off); } -# if defined(__linux__) +# if TRY_PREADV else { result = preadv(req->file, (struct iovec*) req->bufs, @@ -1156,7 +1161,7 @@ static ssize_t uv__fs_lutime(uv_fs_t* req) { static ssize_t uv__fs_write(uv_fs_t* req) { -#if defined(__linux__) +#if TRY_PREADV static _Atomic int no_pwritev; #endif ssize_t r; @@ -1185,13 +1190,13 @@ static ssize_t uv__fs_write(uv_fs_t* req) { #if HAVE_PREADV r = pwritev(req->file, (struct iovec*) req->bufs, req->nbufs, req->off); #else -# if defined(__linux__) +# if TRY_PREADV if (atomic_load_explicit(&no_pwritev, memory_order_relaxed)) retry: # endif { r = pwrite(req->file, req->bufs[0].base, req->bufs[0].len, req->off); } -# if defined(__linux__) +# if TRY_PREADV else { r = pwritev(req->file, (struct iovec*) req->bufs,