diff options
author | rsc <devnull@localhost> | 2003-12-11 17:50:28 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2003-12-11 17:50:28 +0000 |
commit | b3994ec5c78e6c18885079b58abb7fb997899c3f (patch) | |
tree | d4ead391f5ebd1554cc5ecfba69130e750de67bb /src/lib9/open.c | |
parent | 32f69c36e0eec1227934bbd34854bfebd88686f2 (diff) | |
download | plan9port-b3994ec5c78e6c18885079b58abb7fb997899c3f.tar.gz plan9port-b3994ec5c78e6c18885079b58abb7fb997899c3f.tar.bz2 plan9port-b3994ec5c78e6c18885079b58abb7fb997899c3f.zip |
More files related to user-level file servers.
Also add acme!
Diffstat (limited to 'src/lib9/open.c')
-rw-r--r-- | src/lib9/open.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/lib9/open.c b/src/lib9/open.c new file mode 100644 index 00000000..bb597e8f --- /dev/null +++ b/src/lib9/open.c @@ -0,0 +1,38 @@ +#include <u.h> +#define NOPLAN9DEFINES +#include <libc.h> + +extern char* _p9translate(char*); + +int +p9open(char *xname, int mode) +{ + char *name; + int cexec, rclose; + int fd, umode; + + umode = mode&3; + cexec = mode&OCEXEC; + rclose = mode&ORCLOSE; + mode &= ~(3|OCEXEC|ORCLOSE); + if(mode&OTRUNC){ + umode |= O_TRUNC; + mode ^= OTRUNC; + } + if(mode){ + werrstr("mode not supported"); + return -1; + } + if((name = _p9translate(xname)) == nil) + return -1; + fd = open(name, umode); + if(fd >= 0){ + if(cexec) + fcntl(fd, F_SETFL, FD_CLOEXEC); + if(rclose) + remove(name); + } + if(name != xname) + free(name); + return fd; +} |