Blame


1 b3994ec5 2003-12-11 devnull #include <u.h>
2 b3994ec5 2003-12-11 devnull #define NOPLAN9DEFINES
3 b3994ec5 2003-12-11 devnull #include <libc.h>
4 b3994ec5 2003-12-11 devnull
5 b3994ec5 2003-12-11 devnull int
6 8ad51794 2004-03-25 devnull p9open(char *name, int mode)
7 b3994ec5 2003-12-11 devnull {
8 b3994ec5 2003-12-11 devnull int cexec, rclose;
9 b3994ec5 2003-12-11 devnull int fd, umode;
10 b3994ec5 2003-12-11 devnull
11 b3994ec5 2003-12-11 devnull umode = mode&3;
12 b3994ec5 2003-12-11 devnull cexec = mode&OCEXEC;
13 b3994ec5 2003-12-11 devnull rclose = mode&ORCLOSE;
14 b3994ec5 2003-12-11 devnull mode &= ~(3|OCEXEC|ORCLOSE);
15 b3994ec5 2003-12-11 devnull if(mode&OTRUNC){
16 b3994ec5 2003-12-11 devnull umode |= O_TRUNC;
17 b3994ec5 2003-12-11 devnull mode ^= OTRUNC;
18 b3994ec5 2003-12-11 devnull }
19 b3994ec5 2003-12-11 devnull if(mode){
20 b3994ec5 2003-12-11 devnull werrstr("mode not supported");
21 b3994ec5 2003-12-11 devnull return -1;
22 b3994ec5 2003-12-11 devnull }
23 b3994ec5 2003-12-11 devnull fd = open(name, umode);
24 b3994ec5 2003-12-11 devnull if(fd >= 0){
25 b3994ec5 2003-12-11 devnull if(cexec)
26 b3994ec5 2003-12-11 devnull fcntl(fd, F_SETFL, FD_CLOEXEC);
27 b3994ec5 2003-12-11 devnull if(rclose)
28 b3994ec5 2003-12-11 devnull remove(name);
29 b3994ec5 2003-12-11 devnull }
30 b3994ec5 2003-12-11 devnull return fd;
31 b3994ec5 2003-12-11 devnull }