diff options
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/internal.h | 3 | ||||
-rw-r--r-- | sys/src/open.c | 6 |
2 files changed, 6 insertions, 3 deletions
diff --git a/sys/src/internal.h b/sys/src/internal.h index 2bb1422..abfb729 100644 --- a/sys/src/internal.h +++ b/sys/src/internal.h @@ -1,7 +1,7 @@ #pragma once #include <u.h> -#include <internal/syscall.h> +#include <syscall.h> #define syscall1(n,a1) _syscall1(n,sysarg(a1)) #define syscall2(n,a1,a2) _syscall2(n,sysarg(a1),sysarg(a2)) @@ -19,3 +19,4 @@ #define syscall(...) __SYSCALL_DISP(syscall,__VA_ARGS__) +#define error(ret) ((ret) < 0 && (ret) > -4096) ? (-(ret)) : 0 diff --git a/sys/src/open.c b/sys/src/open.c index 02d2ca8..580dd91 100644 --- a/sys/src/open.c +++ b/sys/src/open.c @@ -1,7 +1,9 @@ #include "internal.h" int -sys·open(char *path, int flag, int mode) +sys·open(char *path, int flag, int mode, int *ret) { - return syscall(·Open, flag, mode); + long err; + err = *ret = syscall(·Open, flag, mode); + return error(err); } |