plan9port/src/lib9/open.c

37 lines
592 B
C
Raw Normal View History

#define _GNU_SOURCE /* for Linux O_DIRECT */
#include <u.h>
#define NOPLAN9DEFINES
#include <libc.h>
int
2004-03-25 23:03:57 +00:00
p9open(char *name, int mode)
{
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&ODIRECT){
umode |= O_DIRECT;
mode ^= ODIRECT;
}
if(mode){
2004-05-14 19:45:23 +00:00
werrstr("mode 0x%x not supported", mode);
return -1;
}
fd = open(name, umode);
if(fd >= 0){
if(cexec)
fcntl(fd, F_SETFL, FD_CLOEXEC);
if(rclose)
remove(name);
}
return fd;
}