summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/syscall-generic.h14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/syscall-generic.h b/src/syscall-generic.h
index 24d7c7c..44d57f3 100644
--- a/src/syscall-generic.h
+++ b/src/syscall-generic.h
@@ -2,10 +2,16 @@
#include <unistd.h>
#include <sys/syscall.h>
-#define _body_io_syscall(sname, args...) \
-{ \
- int ret = syscall(__NR_##sname, ## args); \
- return ret < 0 ? -errno : ret; \
+#define _body_io_syscall(sname, args...) \
+{ \
+ int ret, saved_errno; \
+ saved_errno = errno; \
+ ret= syscall(__NR_##sname, ## args); \
+ if (ret < 0) { \
+ ret = -errno; \
+ errno = saved_errno; \
+ } \
+ return ret; \
}
#define io_syscall1(type,fname,sname,type1,arg1) \