diff options
Diffstat (limited to 'src/base/io/open.c')
-rw-r--r-- | src/base/io/open.c | 27 |
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; } |