1 #include "lib.h" 2 #include <sys/stat.h> 3 #include <errno.h> 4 #include "sys9.h" 5 #include "dir.h" 6 7 int 8 chmod(const char *path, mode_t mode) 9 { 10 Dir d; 11 int n; 12 char cd[DIRLEN]; 13 14 n = -1; 15 if(_STAT(path, cd) < 0) 16 _syserrno(); 17 else{ 18 convM2D(cd, &d); 19 d.mode = mode&0777; 20 convD2M(&d, cd); 21 if(_WSTAT(path, cd) < 0) 22 _syserrno(); 23 else 24 n = 0; 25 } 26 return n; 27 } 28 29 int 30 fchmod(int fd, mode_t mode) 31 { 32 Dir d; 33 int n; 34 char cd[DIRLEN]; 35 36 n = -1; 37 if(_FSTAT(fd, cd) < 0) 38 _syserrno(); 39 else{ 40 convM2D(cd, &d); 41 d.mode = mode&0777; 42 convD2M(&d, cd); 43 if(_FWSTAT(fd, cd) < 0) 44 _syserrno(); 45 else 46 n = 0; 47 } 48 return n; 49 } 50