aboutsummaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
Diffstat (limited to 'sys/src')
-rw-r--r--sys/src/internal.h3
-rw-r--r--sys/src/open.c6
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);
}