create.c 414 B

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