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