From b3994ec5c78e6c18885079b58abb7fb997899c3f Mon Sep 17 00:00:00 2001 From: rsc Date: Thu, 11 Dec 2003 17:50:28 +0000 Subject: More files related to user-level file servers. Also add acme! --- src/lib9/open.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/lib9/open.c (limited to 'src/lib9/open.c') 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 +#define NOPLAN9DEFINES +#include + +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; +} -- cgit v1.2.3