OSDN Git Service

Reduce the exposure of the __set_errno implementation detail.
authorElliott Hughes <enh@google.com>
Fri, 30 Nov 2012 19:58:57 +0000 (11:58 -0800)
committerElliott Hughes <enh@google.com>
Fri, 30 Nov 2012 20:05:18 +0000 (12:05 -0800)
Change-Id: I395e1b46a9491e34fc53e71853e932ea90b3d1cc

libc/Android.mk
libc/bionic/__set_errno.cpp [moved from libc/bionic/__set_errno.c with 66% similarity]
libc/bionic/pthread.c
libc/include/errno.h

index 92bca4c..dc2b331 100644 (file)
@@ -211,7 +211,6 @@ libc_common_src_files := \
        bionic/semaphore.c \
        bionic/send.c \
        bionic/setegid.c \
-       bionic/__set_errno.c \
        bionic/seteuid.c \
        bionic/setpgrp.c \
        bionic/setresuid.c \
@@ -283,6 +282,7 @@ libc_bionic_src_files := \
     bionic/__memcpy_chk.cpp \
     bionic/__memmove_chk.cpp \
     bionic/__memset_chk.cpp \
+    bionic/__set_errno.cpp \
     bionic/setlocale.cpp \
     bionic/__strcat_chk.cpp \
     bionic/__strcpy_chk.cpp \
similarity index 66%
rename from libc/bionic/__set_errno.c
rename to libc/bionic/__set_errno.cpp
index 163d404..5b249c8 100644 (file)
 
 #include <errno.h>
 
+// These functions are called from our assembler syscall stubs.
+// C/C++ code should just assign 'errno' instead.
 
-int __set_errno(int n)
-{
-    errno = n;
-    return -1;
+// TODO: should be __LIBC_HIDDEN__, but already exported by NDK :-(
+// TODO: this isn't used on ARM.
+extern "C" int __set_errno(int n) {
+  errno = n;
+  return -1;
 }
 
-/*
- * this function is called from syscall stubs,
- * (tail-called in the case of 0-4 arg versions)
- */
-
-__LIBC_HIDDEN__
-int __set_syscall_errno(int n)
-{
-        /* some syscalls, mmap() for example, have valid return
-        ** values that are "negative".  Since errno values are not
-        ** greater than 131 on Linux, we will just consider 
-        ** anything significantly out of range as not-an-error
-        */
-    if(n > -256) {
-        return __set_errno(-n);
-    } else {
-        return n;
-    }
+// TODO: this is only used on ARM, but is exported by NDK on all platforms :-(
+extern "C" __LIBC_HIDDEN__ int __set_syscall_errno(int n) {
+  // Some syscalls, mmap() for example, have valid return
+  // values that are "negative".  Since errno values are not
+  // greater than 131 on Linux, we will just consider
+  // anything significantly out of range as not-an-error.
+  if(n > -256) {
+    return __set_errno(-n);
+  } else {
+    return n;
+  }
 }
index d8d0d05..b685f2d 100644 (file)
@@ -59,7 +59,6 @@ extern void pthread_debug_mutex_unlock_check(pthread_mutex_t *mutex);
 extern int  __pthread_clone(int (*fn)(void*), void *child_stack, int flags, void *arg);
 extern void _exit_with_stack_teardown(void * stackBase, int stackSize, int retCode);
 extern void _exit_thread(int  retCode);
-extern int  __set_errno(int);
 
 int  __futex_wake_ex(volatile void *ftx, int pshared, int val)
 {
index e1b15c0..2e5ce5f 100644 (file)
@@ -40,10 +40,6 @@ __BEGIN_DECLS
 #define  ENOTSUP  EOPNOTSUPP
 #endif
 
-/* internal function that should *only* be called from system calls */
-/* use errno = xxxx instead in C code                               */
-extern int    __set_errno(int  error);
-
 /* internal function returning the address of the thread-specific errno */
 extern volatile int*   __errno(void);