diff options
Diffstat (limited to 'src/syscall-generic.h')
-rw-r--r-- | src/syscall-generic.h | 14 |
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) \ |