X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=libc%2Fbionic%2F__set_errno.cpp;h=9ef0047cc6a1bf5f860ebe69eb02d7287e75128d;hb=78e6c4ec7c3c41831629c0e70fd97861d8c098c4;hp=4e72093b7b3ec8d0df18fb0eeb9e2032984eeec6;hpb=65461bbe256f04072e6408a2f762529c76f48304;p=android-x86%2Fbionic.git diff --git a/libc/bionic/__set_errno.cpp b/libc/bionic/__set_errno.cpp index 4e72093b7..9ef0047cc 100644 --- a/libc/bionic/__set_errno.cpp +++ b/libc/bionic/__set_errno.cpp @@ -31,7 +31,18 @@ // This function is called from our assembler syscall stubs. // C/C++ code should just assign 'errno' instead. -extern "C" __LIBC_HIDDEN__ int __set_errno(int n) { +// The return type is 'long' because we use the same routine in calls +// that return an int as in ones that return a ssize_t. On a 32-bit +// system these are the same size, but on a 64-bit system they're not. +// 'long' gives us 32-bit on 32-bit systems, 64-bit on 64-bit systems. + +// Since __set_errno was mistakenly exposed in in the 32-bit +// NDK, use a differently named internal function for the system call +// stubs. This avoids having the stubs .hidden directives accidentally +// hide __set_errno for old NDK apps. + +// This one is for internal use only and used by both LP32 and LP64 assembler. +extern "C" __LIBC_HIDDEN__ long __set_errno_internal(int n) { errno = n; return -1; }