Android Builds of OpenJDK Mobile project now available

Ali Ebrahimi ali.ebrahimi1781 at gmail.com
Fri Feb 19 00:16:26 UTC 2016


Hi Bob,

On Thu, Feb 18, 2016 at 9:58 PM, Bob Vandette <bob.vandette at oracle.com>
wrote:

> Ali,
>
> I decided to take a slightly different approach to supporting NDK r10e.
>
> My last patch did add support for this version of the NDK but forced the
> Java runtime
> to only support API level 21 and higher.  This means we would only be able
> to run
> on devices with Android 5  and newer.
>
> If you look at the Android Dashboard, there are still a lot of devices
> that are supporting
> API level 19.
>
> http://developer.android.com/about/dashboards/index.html
>
> I think it’s best that we set API level 19 as our minimum supported API
> level for now.
>
> This means that we can still use NDK r10e but you need to specify
> —platform=android-19
> when generating the standalone toolchain.
>
> Taking this approach also reduces the number of changes required in the
> mobile/dev
> forest to only 2 files.
>
> Here’s the webrev:
>
> http://cr.openjdk.java.net/~bobv/8150074/webrev.01/
>

I come back with this patchs that work with —platform=android-19
and —platform=android-21 NDK r10e

*jdk.diff*

diff -r 91482de10f40
src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c
--- a/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c Wed Feb
10 14:17:12 2016 -0500
+++ b/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c Fri Feb
19 03:22:47 2016 +0330
@@ -241,34 +241,6 @@
     }
 }

-#ifdef __ANDROID__
-static int getline(char **line, size_t *len, FILE *fp) {
-  char *buf;
-  size_t bufLen;
-  if (*line != NULL) {
-    buf = *line;
-    bufLen = *len;
-  } else {
-    buf = malloc(64);
-    if (buf == NULL) {
-      return -1;
-    }
-    bufLen = 64;
-  }
-  if (fgets(buf, bufLen, fp) == NULL) {
-    if (*line == NULL) {
-      free(buf);
-    }
-    return -1;
-  }
-  if (*line == NULL) {
-    *line = buf;
-    *len = bufLen;
-  }
-  return strlen(*line);
-}
-#endif
-
 /**
  * Read the boottime from /proc/stat.
  */
diff -r 91482de10f40 src/java.base/linux/native/libnet/linux_close.c
--- a/src/java.base/linux/native/libnet/linux_close.c Wed Feb 10 14:17:12
2016 -0500
+++ b/src/java.base/linux/native/libnet/linux_close.c Fri Feb 19 03:22:47
2016 +0330
@@ -57,8 +57,10 @@
  * Signal to unblock thread
  */
 #ifdef __ANDROID__
+#ifndef __SIGRTMAX
 #define __SIGRTMAX SIGRTMAX
 #endif
+#endif
 static int sigWakeup = (__SIGRTMAX - 2);

 /*
diff -r 91482de10f40
src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c
--- a/src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c Wed Feb
10 14:17:12 2016 -0500
+++ b/src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c Fri Feb
19 03:22:47 2016 +0330
@@ -36,11 +36,6 @@

 #include "sun_nio_fs_LinuxNativeDispatcher.h"

-#ifdef __ANDROID__
-#define setmntent(f,m) fopen(f,m)
-#define endmntent(f) fclose(f)
-#endif
-
 typedef size_t fgetxattr_func(int fd, const char* name, void* value,
size_t size);
 typedef int fsetxattr_func(int fd, const char* name, void* value, size_t
size, int flags);
 typedef int fremovexattr_func(int fd, const char* name);
@@ -173,31 +168,6 @@
     return ptr_to_jlong(fp);
 }

-#ifdef __ANDROID__
-static struct mntent* getmntent_r(FILE* fp, struct mntent* m, char* buf,
int buflen) {
-    if (m) {
-        char *str;
-        char *last;
-
-        // skip comments
-        do {
-            if (!(str = fgets(buf, buflen, fp)))
-                return NULL;
-            m->mnt_fsname = strtok_r(str, " \t\n", &last);
-            if (m->mnt_fsname == NULL)
-                return NULL;
-        } while (*(m->mnt_fsname) == '#');
-
-        m->mnt_dir = strtok_r((char *)NULL, " \t\n", &last);
-        m->mnt_type = strtok_r((char *)NULL, " \t\n", &last);
-        m->mnt_opts = strtok_r((char *)NULL, " \t\n", &last);
-        if (m->mnt_opts == NULL)
-            return NULL;
-    }
-    return m;
-}
-#endif
-
 JNIEXPORT jint JNICALL
 Java_sun_nio_fs_LinuxNativeDispatcher_getmntent(JNIEnv* env, jclass this,
     jlong value, jobject entry)
diff -r 91482de10f40
src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c
--- a/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c Wed Feb 10
14:17:12 2016 -0500
+++ b/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c Fri Feb 19
03:22:47 2016 +0330
@@ -108,27 +108,6 @@
  * functionality into corresponding, platform-specific os_ functions.
  */

-#ifdef __ANDROID__
-/*
- * TODO: Android lacks support for the methods listed below.  In it's
place are
- * alternatives that use existing Android functionality, but lack reentrant
- * support.  Determine if the following are the most suitable alternatives.
- *
- */
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
-{
-  *result = NULL;
-  errno = 0;
-  pwd = getpwuid(uid);
-  if (pwd == NULL) {
-        return errno;
-  }
-  // buf not used by caller (see below)
-  *result = pwd;
-  return 0;
-}
-#endif
-
 #ifndef WIFEXITED
 #define WIFEXITED(status) (((status)&0xFF) == 0)
 #endif
diff -r 91482de10f40
src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c
--- a/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c Wed Feb 10
14:17:12 2016 -0500
+++ b/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c Fri Feb 19
03:22:47 2016 +0330
@@ -153,66 +153,6 @@
 #endif
 static fdopendir_func* my_fdopendir_func = NULL;

-#ifdef __ANDROID__
-/*
- * TODO: Android lacks support for the methods listed below.  In it's
place are
- * alternatives that use existing Android functionality, but lack reentrant
- * support.  Determine if the following are the most suitable alternatives.
- *
- */
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
-{
-  *result = NULL;
-  errno = 0;
-  pwd = getpwuid(uid);
-  if (pwd == NULL) {
-        return errno;
-  }
-  // buf not used by caller (see below)
-  *result = pwd;
-  return 0;
-}
-
-static int getpwnam_r(const char *name, struct passwd* pwd, char* buf,
size_t buflen, struct passwd** result)
-{
-  *result = NULL;
-  errno = 0;
-  pwd = getpwnam(name);
-  if (pwd == NULL) {
-        return errno;
-  }
-  // buf not used by caller (see below)
-  *result = pwd;
-  return 0;
-}
-
-static int getgrgid_r(gid_t gid, struct group* grp, char* buf, size_t
buflen, struct group** result)
-{
-  *result = NULL;
-  errno = 0;
-  grp = getgrgid(gid);
-  if (grp == NULL) {
-        return errno;
-  }
-  // buf not used by caller (see below)
-  *result = grp;
-  return 0;
-}
-
-static int getgrnam_r(const char *name, struct group* grp, char* buf,
size_t buflen, struct group** result)
-{
-  *result = NULL;
-  errno = 0;
-  grp = getgrnam(name);
-  if (grp == NULL) {
-        return errno;
-  }
-  // buf not used by caller (see below)
-  *result = grp;
-  return 0;
-}
-#endif
-
 /**
  * fstatat missing from glibc on Linux. Temporary workaround
  * for x86/x64.
diff -r 91482de10f40 src/jdk.security.auth/unix/native/libjaas/Unix.c
--- a/src/jdk.security.auth/unix/native/libjaas/Unix.c Wed Feb 10 14:17:12
2016 -0500
+++ b/src/jdk.security.auth/unix/native/libjaas/Unix.c Fri Feb 19 03:22:47
2016 +0330
@@ -38,21 +38,6 @@
 #include <string.h>
 #include <errno.h>

-#ifdef __ANDROID__
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
-{
-  *result = NULL;
-  errno = 0;
-  pwd = getpwuid(uid);
-  if (pwd == NULL) {
-        return errno;
-  }
-  // buf not used by caller (see below)
-  *result = pwd;
-  return 0;
-}
-#endif
-
 /*
  * Declare library specific JNI_Onload entry if static build
  */


*hotspot.diff*


diff -r de1d92b01bae src/os/linux/vm/perfMemory_linux.cpp
--- a/src/os/linux/vm/perfMemory_linux.cpp Wed Feb 10 14:15:17 2016 -0500
+++ b/src/os/linux/vm/perfMemory_linux.cpp Fri Feb 19 03:23:39 2016 +0330
@@ -44,7 +44,7 @@
 # include <pwd.h>

 #ifdef __ANDROID__
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
+int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen,
struct passwd** result)
 {
   *result = NULL;
   errno = 0;
diff -r de1d92b01bae src/os_cpu/linux_x86/vm/os_linux_x86.cpp
--- a/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Wed Feb 10 14:15:17 2016
-0500
+++ b/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Fri Feb 19 03:23:39 2016
+0330
@@ -73,11 +73,8 @@
 # include <sys/wait.h>
 # include <pwd.h>
 # include <poll.h>
-#ifdef __ANDROID__
-# include <asm/elf.h>
-# include <asm/sigcontext.h>
-#else
 # include <ucontext.h>
+#ifndef __ANDROID__
 # include <fpu_control.h>
 #endif

@@ -88,22 +85,6 @@
 #define _FPU_SETCW(cw) __asm__ ("fldcw %0" : : "m" (*&cw))
 #endif

-#ifdef __ANDROID__
-typedef elf_greg_t greg_t;
-#define SPELL_REG_SP "esp"
-#define SPELL_REG_FP "ebp"
-#define CTX_REG_AX eax
-#define CTX_REG_BX ebx
-#define CTX_REG_CX ecx
-#define CTX_REG_DX edx
-#define CTX_REG_DI edi
-#define CTX_REG_SI esi
-#define CTX_REG_PC  eip
-#define CTX_REG_SP esp
-#define CTX_REG_BP ebp
-#define CTX_REG_TRAPNO trapno
-#define CTX_REG_FL eflags
-#else
 #ifdef AMD64
 #define SPELL_REG_SP "rsp"
 #define SPELL_REG_FP "rbp"
@@ -143,7 +124,6 @@
 #define CTX_REG_TRAPNO gregs[REG_TRAPNO]
 #define CTX_REG_FL gregs[REG_EFL]
 #endif // AMD64
-#endif // __ANDROID__

 address os::current_stack_pointer() {
 #ifdef SPARC_WORKS
diff -r de1d92b01bae src/share/vm/utilities/globalDefinitions_gcc.hpp
--- a/src/share/vm/utilities/globalDefinitions_gcc.hpp Wed Feb 10 14:15:17
2016 -0500
+++ b/src/share/vm/utilities/globalDefinitions_gcc.hpp Fri Feb 19 03:23:39
2016 +0330
@@ -74,26 +74,10 @@
 #endif // __STDC_LIMIT_MACROS
 #include <inttypes.h>
 #include <signal.h>
-#ifdef __ANDROID__
-#include <asm/sigcontext.h>
-/* avoid conflicting ucontext definitions */
-#define ucontext asm_ucontext
-struct ucontext {
-  unsigned long uc_flags;
-  struct ucontext *uc_link;
-  stack_t uc_stack;
-  struct sigcontext uc_mcontext;
-  sigset_t uc_sigmask;
-};
-
-typedef struct ucontext ucontext_t;
-#endif //__ANDROID__

 #ifndef __OpenBSD__
-#ifndef __ANDROID__
 #include <ucontext.h>
 #endif
-#endif
 #ifdef __APPLE__
   #include <AvailabilityMacros.h>
   #include <mach/mach.h>

-- 

Best Regards,
Ali Ebrahimi
-------------- next part --------------
diff -r de1d92b01bae src/os/linux/vm/perfMemory_linux.cpp
--- a/src/os/linux/vm/perfMemory_linux.cpp	Wed Feb 10 14:15:17 2016 -0500
+++ b/src/os/linux/vm/perfMemory_linux.cpp	Fri Feb 19 03:23:39 2016 +0330
@@ -44,7 +44,7 @@
 # include <pwd.h>
 
 #ifdef __ANDROID__
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
+int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
 {
   *result = NULL;
   errno = 0;
diff -r de1d92b01bae src/os_cpu/linux_x86/vm/os_linux_x86.cpp
--- a/src/os_cpu/linux_x86/vm/os_linux_x86.cpp	Wed Feb 10 14:15:17 2016 -0500
+++ b/src/os_cpu/linux_x86/vm/os_linux_x86.cpp	Fri Feb 19 03:23:39 2016 +0330
@@ -73,11 +73,8 @@
 # include <sys/wait.h>
 # include <pwd.h>
 # include <poll.h>
-#ifdef __ANDROID__
-# include <asm/elf.h>
-# include <asm/sigcontext.h>
-#else
 # include <ucontext.h>
+#ifndef __ANDROID__
 # include <fpu_control.h>
 #endif
 
@@ -88,22 +85,6 @@
 #define _FPU_SETCW(cw) __asm__ ("fldcw %0" : : "m" (*&cw))
 #endif
 
-#ifdef __ANDROID__
-typedef elf_greg_t greg_t;
-#define SPELL_REG_SP "esp"
-#define SPELL_REG_FP "ebp"
-#define CTX_REG_AX eax
-#define CTX_REG_BX ebx
-#define CTX_REG_CX ecx
-#define CTX_REG_DX edx
-#define CTX_REG_DI edi
-#define CTX_REG_SI esi
-#define CTX_REG_PC  eip
-#define CTX_REG_SP esp
-#define CTX_REG_BP ebp
-#define CTX_REG_TRAPNO trapno
-#define CTX_REG_FL eflags
-#else
 #ifdef AMD64
 #define SPELL_REG_SP "rsp"
 #define SPELL_REG_FP "rbp"
@@ -143,7 +124,6 @@
 #define CTX_REG_TRAPNO gregs[REG_TRAPNO]
 #define CTX_REG_FL gregs[REG_EFL]
 #endif // AMD64
-#endif // __ANDROID__
 
 address os::current_stack_pointer() {
 #ifdef SPARC_WORKS
diff -r de1d92b01bae src/share/vm/utilities/globalDefinitions_gcc.hpp
--- a/src/share/vm/utilities/globalDefinitions_gcc.hpp	Wed Feb 10 14:15:17 2016 -0500
+++ b/src/share/vm/utilities/globalDefinitions_gcc.hpp	Fri Feb 19 03:23:39 2016 +0330
@@ -74,26 +74,10 @@
 #endif // __STDC_LIMIT_MACROS
 #include <inttypes.h>
 #include <signal.h>
-#ifdef __ANDROID__
-#include <asm/sigcontext.h>
-/* avoid conflicting ucontext definitions */
-#define ucontext asm_ucontext
-struct ucontext {
-  unsigned long uc_flags;
-  struct ucontext *uc_link;
-  stack_t uc_stack;
-  struct sigcontext uc_mcontext;
-  sigset_t uc_sigmask;
-};
-
-typedef struct ucontext ucontext_t;
-#endif //__ANDROID__
 
 #ifndef __OpenBSD__
-#ifndef __ANDROID__
 #include <ucontext.h>
 #endif
-#endif
 #ifdef __APPLE__
   #include <AvailabilityMacros.h>
   #include <mach/mach.h>
-------------- next part --------------
diff -r 91482de10f40 src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c
--- a/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c	Wed Feb 10 14:17:12 2016 -0500
+++ b/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c	Fri Feb 19 03:22:47 2016 +0330
@@ -241,34 +241,6 @@
     }
 }
 
-#ifdef __ANDROID__
-static int getline(char **line, size_t *len, FILE *fp) {
-  char *buf;
-  size_t bufLen;
-  if (*line != NULL) {
-    buf = *line;
-    bufLen = *len;
-  } else {
-    buf = malloc(64);
-    if (buf == NULL) {
-      return -1;
-    }
-    bufLen = 64;
-  }
-  if (fgets(buf, bufLen, fp) == NULL) {
-    if (*line == NULL) {
-      free(buf);
-    }
-    return -1;
-  }
-  if (*line == NULL) {
-    *line = buf;
-    *len = bufLen;
-  }
-  return strlen(*line);
-}
-#endif
-
 /**
  * Read the boottime from /proc/stat.
  */
diff -r 91482de10f40 src/java.base/linux/native/libnet/linux_close.c
--- a/src/java.base/linux/native/libnet/linux_close.c	Wed Feb 10 14:17:12 2016 -0500
+++ b/src/java.base/linux/native/libnet/linux_close.c	Fri Feb 19 03:22:47 2016 +0330
@@ -57,8 +57,10 @@
  * Signal to unblock thread
  */
 #ifdef __ANDROID__
+#ifndef __SIGRTMAX
 #define __SIGRTMAX SIGRTMAX
 #endif
+#endif
 static int sigWakeup = (__SIGRTMAX - 2);
 
 /*
diff -r 91482de10f40 src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c
--- a/src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c	Wed Feb 10 14:17:12 2016 -0500
+++ b/src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c	Fri Feb 19 03:22:47 2016 +0330
@@ -36,11 +36,6 @@
 
 #include "sun_nio_fs_LinuxNativeDispatcher.h"
 
-#ifdef __ANDROID__
-#define setmntent(f,m) fopen(f,m)
-#define endmntent(f) fclose(f)
-#endif
-
 typedef size_t fgetxattr_func(int fd, const char* name, void* value, size_t size);
 typedef int fsetxattr_func(int fd, const char* name, void* value, size_t size, int flags);
 typedef int fremovexattr_func(int fd, const char* name);
@@ -173,31 +168,6 @@
     return ptr_to_jlong(fp);
 }
 
-#ifdef __ANDROID__
-static struct mntent* getmntent_r(FILE* fp, struct mntent* m, char* buf, int buflen) {
-    if (m) {
-        char *str;
-        char *last;
-
-        // skip comments
-        do {
-            if (!(str = fgets(buf, buflen, fp)))
-                return NULL;
-            m->mnt_fsname = strtok_r(str, " \t\n", &last);
-            if (m->mnt_fsname == NULL)
-                return NULL;
-        } while (*(m->mnt_fsname) == '#');
-
-        m->mnt_dir = strtok_r((char *)NULL, " \t\n", &last);
-        m->mnt_type = strtok_r((char *)NULL, " \t\n", &last);
-        m->mnt_opts = strtok_r((char *)NULL, " \t\n", &last);
-        if (m->mnt_opts == NULL)
-            return NULL;
-    }
-    return m;
-}
-#endif
-
 JNIEXPORT jint JNICALL
 Java_sun_nio_fs_LinuxNativeDispatcher_getmntent(JNIEnv* env, jclass this,
     jlong value, jobject entry)
diff -r 91482de10f40 src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c
--- a/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c	Wed Feb 10 14:17:12 2016 -0500
+++ b/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c	Fri Feb 19 03:22:47 2016 +0330
@@ -108,27 +108,6 @@
  * functionality into corresponding, platform-specific os_ functions.
  */
 
-#ifdef __ANDROID__
-/*
- * TODO: Android lacks support for the methods listed below.  In it's place are
- * alternatives that use existing Android functionality, but lack reentrant
- * support.  Determine if the following are the most suitable alternatives.
- *
- */
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
-{
-  *result = NULL;
-  errno = 0;
-  pwd = getpwuid(uid);
-  if (pwd == NULL) {
-        return errno;
-  }
-  // buf not used by caller (see below)
-  *result = pwd;
-  return 0;
-}
-#endif
-
 #ifndef WIFEXITED
 #define WIFEXITED(status) (((status)&0xFF) == 0)
 #endif
diff -r 91482de10f40 src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c
--- a/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c	Wed Feb 10 14:17:12 2016 -0500
+++ b/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c	Fri Feb 19 03:22:47 2016 +0330
@@ -153,66 +153,6 @@
 #endif
 static fdopendir_func* my_fdopendir_func = NULL;
 
-#ifdef __ANDROID__
-/*
- * TODO: Android lacks support for the methods listed below.  In it's place are
- * alternatives that use existing Android functionality, but lack reentrant
- * support.  Determine if the following are the most suitable alternatives.
- *
- */
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
-{
-  *result = NULL;
-  errno = 0;
-  pwd = getpwuid(uid);
-  if (pwd == NULL) {
-        return errno;
-  }
-  // buf not used by caller (see below)
-  *result = pwd;
-  return 0;
-}
-
-static int getpwnam_r(const char *name, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
-{
-  *result = NULL;
-  errno = 0;
-  pwd = getpwnam(name);
-  if (pwd == NULL) {
-        return errno;
-  }
-  // buf not used by caller (see below)
-  *result = pwd;
-  return 0;
-}
-
-static int getgrgid_r(gid_t gid, struct group* grp, char* buf, size_t buflen, struct group** result)
-{
-  *result = NULL;
-  errno = 0;
-  grp = getgrgid(gid);
-  if (grp == NULL) {
-        return errno;
-  }
-  // buf not used by caller (see below)
-  *result = grp;
-  return 0;
-}
-
-static int getgrnam_r(const char *name, struct group* grp, char* buf, size_t buflen, struct group** result)
-{
-  *result = NULL;
-  errno = 0;
-  grp = getgrnam(name);
-  if (grp == NULL) {
-        return errno;
-  }
-  // buf not used by caller (see below)
-  *result = grp;
-  return 0;
-}
-#endif
-
 /**
  * fstatat missing from glibc on Linux. Temporary workaround
  * for x86/x64.
diff -r 91482de10f40 src/jdk.security.auth/unix/native/libjaas/Unix.c
--- a/src/jdk.security.auth/unix/native/libjaas/Unix.c	Wed Feb 10 14:17:12 2016 -0500
+++ b/src/jdk.security.auth/unix/native/libjaas/Unix.c	Fri Feb 19 03:22:47 2016 +0330
@@ -38,21 +38,6 @@
 #include <string.h>
 #include <errno.h>
 
-#ifdef __ANDROID__
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
-{
-  *result = NULL;
-  errno = 0;
-  pwd = getpwuid(uid);
-  if (pwd == NULL) {
-        return errno;
-  }
-  // buf not used by caller (see below)
-  *result = pwd;
-  return 0;
-}
-#endif
-
 /*
  * Declare library specific JNI_Onload entry if static build
  */


More information about the mobile-dev mailing list