summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Chen <nchen@mozilla.com>2018-01-23 15:10:22 +0100
committerJim Chen <nchen@mozilla.com>2018-01-23 15:10:22 +0100
commit36339aff647f402ea6bcbbf51a67f06bb2e4a2f0 (patch)
treefdb0e5862bc2bcbac6588365d9aec2bcc7b2b9b7
parent54cf20890110ec404510529af26cb7424cfd390b (diff)
downloadnspr-hg-36339aff647f402ea6bcbbf51a67f06bb2e4a2f0.tar.gz
Bug 1432473, Update NSPR to build with Android NDK r16. r=kaie
-rw-r--r--pr/src/md/unix/unix.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/pr/src/md/unix/unix.c b/pr/src/md/unix/unix.c
index 29e24e57..7c90b507 100644
--- a/pr/src/md/unix/unix.c
+++ b/pr/src/md/unix/unix.c
@@ -2713,8 +2713,13 @@ static void* _MD_Unix_mmap64(
} /* _MD_Unix_mmap64 */
#endif /* defined(_PR_NO_LARGE_FILES) || defined(SOLARIS2_5) */
-/* Android <= 19 doesn't have mmap64. */
-#if defined(ANDROID) && __ANDROID_API__ <= 19
+/* NDK non-unified headers for API < 21 don't have mmap64. However,
+ * NDK unified headers do provide mmap64 for all API versions when building
+ * with clang. Therefore, we should provide mmap64 here for API < 21 if we're
+ * not using clang or if we're using non-unified headers. We check for
+ * non-unified headers by the lack of __ANDROID_API_L__ macro. */
+#if defined(ANDROID) && __ANDROID_API__ < 21 && \
+ (!defined(__clang__) || !defined(__ANDROID_API_L__))
PR_IMPORT(void) *__mmap2(void *, size_t, int, int, int, size_t);
#define ANDROID_PAGE_SIZE 4096
@@ -2784,9 +2789,9 @@ static void _PR_InitIOV(void)
_md_iovector._stat64 = stat;
_md_iovector._lseek64 = _MD_Unix_lseek64;
#elif defined(_PR_HAVE_OFF64_T)
-#if defined(IRIX5_3) || defined(ANDROID)
+#if defined(IRIX5_3) || (defined(ANDROID) && __ANDROID_API__ < 21)
/*
- * Android doesn't have open64. We pass the O_LARGEFILE flag to open
+ * Android < 21 doesn't have open64. We pass the O_LARGEFILE flag to open
* in _MD_open.
*/
_md_iovector._open64 = open;
@@ -2794,8 +2799,14 @@ static void _PR_InitIOV(void)
_md_iovector._open64 = open64;
#endif
_md_iovector._mmap64 = mmap64;
+#if (defined(ANDROID) && __ANDROID_API__ < 21)
+ /* Same as the open64 case for Android. */
+ _md_iovector._fstat64 = fstat;
+ _md_iovector._stat64 = stat;
+#else
_md_iovector._fstat64 = fstat64;
_md_iovector._stat64 = stat64;
+#endif
_md_iovector._lseek64 = lseek64;
#elif defined(_PR_HAVE_LARGE_OFF_T)
_md_iovector._open64 = open;