1 #include "lib.h" 2 #include <errno.h> 3 #include <stdlib.h> 4 #include "sys9.h" 5 #include "dir.h" 6 7 static int seterrno(void)8seterrno(void) 9 { 10 _syserrno(); 11 return -1; 12 } 13 14 int chmod(const char * path,mode_t mode)15chmod(const char *path, mode_t mode) 16 { 17 Dir d, *dir; 18 19 dir = _dirstat(path); 20 if(dir == nil) 21 return seterrno(); 22 _nulldir(&d); 23 d.mode = (dir->mode & ~0777) | (mode & 0777); 24 free(dir); 25 if(_dirwstat(path, &d) < 0) 26 return seterrno(); 27 return 0; 28 } 29 30 int fchmod(int fd,mode_t mode)31fchmod(int fd, mode_t mode) 32 { 33 Dir d, *dir; 34 35 dir = _dirfstat(fd); 36 if(dir == nil) 37 return seterrno(); 38 _nulldir(&d); 39 d.mode = (dir->mode & ~0777) | (mode & 0777); 40 free(dir); 41 if(_dirfwstat(fd, &d) < 0) 42 return seterrno(); 43 return 0; 44 } 45