xref: /inferno-os/lib9/create.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1 #include "lib9.h"
2 #include <sys/types.h>
3 #include <fcntl.h>
4 
5 int
create(char * f,int mode,int perm)6 create(char *f, int mode, int perm)
7 {
8 	int m;
9 
10 	m = 0;
11 	switch(mode & 3){
12 	case OREAD:
13 	case OEXEC:
14 		m = O_RDONLY;
15 		break;
16 	case OWRITE:
17 		m = O_WRONLY;
18 		break;
19 	case ORDWR:
20 		m = O_RDWR;
21 		break;
22 	}
23 	m |= O_CREAT|O_TRUNC;
24 
25 	if(perm & DMDIR){
26 		if(mkdir(f, perm&0777) < 0)
27 			return -1;
28 		perm &= ~DMDIR;
29 		m &= 3;
30 	}
31 	return open(f, m, perm);
32 }
33