aboutsummaryrefslogtreecommitdiffstats
path: root/libc/bionic
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2013-03-12 19:08:36 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2013-03-12 19:08:36 +0000
commit94a34010c1f989032c0a4dc7a7a68d069ca23b1e (patch)
tree2aa24aece4d7a3b1d380f2edafb14967da9d1c0b /libc/bionic
parentf21aa3b61ebc6b1a7c34265699f40bd9b5af7952 (diff)
parentcb2069bf69b14f0e76593e1ec4d1deb6fa15232c (diff)
downloadandroid_bionic-94a34010c1f989032c0a4dc7a7a68d069ca23b1e.tar.gz
android_bionic-94a34010c1f989032c0a4dc7a7a68d069ca23b1e.tar.bz2
android_bionic-94a34010c1f989032c0a4dc7a7a68d069ca23b1e.zip
Merge "Support large errno values on ARM."
Diffstat (limited to 'libc/bionic')
-rw-r--r--libc/bionic/__set_errno.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/libc/bionic/__set_errno.cpp b/libc/bionic/__set_errno.cpp
index 5b249c8bb..c69ca8707 100644
--- a/libc/bionic/__set_errno.cpp
+++ b/libc/bionic/__set_errno.cpp
@@ -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;
}