Support large errno values on ARM.

Bug: http://code.google.com/p/android/issues/detail?id=53104
Change-Id: Ic6c40be2dc50f0644a3d8b09ceae59c38f2d5b53
This commit is contained in:
Elliott Hughes 2013-03-12 11:55:45 -07:00
parent f21aa3b61e
commit cb2069bf69

View File

@ -27,6 +27,9 @@
*/
#include <errno.h>
#include <linux/err.h>
#define unlikely(x) __builtin_expect((x), false) // Used but not defined by <linux/err.h>.
// These functions are called from our assembler syscall stubs.
// C/C++ code should just assign 'errno' instead.
@ -39,14 +42,10 @@ extern "C" int __set_errno(int 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;
extern "C" __LIBC_HIDDEN__ int __set_syscall_errno(unsigned long n) {
if (IS_ERR_VALUE(n)) {
errno = -n;
return -1;
}
return n;
}