aboutsummaryrefslogtreecommitdiff
path: root/src/base/io/open.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/io/open.c')
-rw-r--r--src/base/io/open.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/base/io/open.c b/src/base/io/open.c
index fe78255..ed0be92 100644
--- a/src/base/io/open.c
+++ b/src/base/io/open.c
@@ -1,7 +1,28 @@
#include "internal.h"
-io·Stream*
-io·open(byte *name, byte *mode)
+int
+io·open(char *path, int flag, io·Buffer *io)
{
- return fopen(name, mode);
+ int err,fd;
+ switch(flag & ~(sys·OCloseExec|sys·OTrunc)){
+ default:
+ /* fmt·fprint(2, "open: unknown flag %d\n", flag); */
+ return 1;
+
+ case sys·ORead:
+ if((err=sys·open(path, flag, 0, &fd)))
+ return err;
+ break;
+
+ case sys·OWrite:
+ if((err=sys·open(path, flag, 0666, &fd)))
+ return err;
+ break;
+ }
+
+ if((err=io·openfd(fd, flag, io))){
+ sys·close(fd);
+ return err;
+ }
+ return 0;
}