13e12c5d1SDavid du Colombier #include "lib.h" 23e12c5d1SDavid du Colombier #include <errno.h> 39a747e4fSDavid du Colombier #include <stdlib.h> 43e12c5d1SDavid du Colombier #include "sys9.h" 53e12c5d1SDavid du Colombier #include "dir.h" 63e12c5d1SDavid du Colombier 7*354ab865SDavid du Colombier static int seterrno(void)8*354ab865SDavid du Colombierseterrno(void) 93e12c5d1SDavid du Colombier { 103e12c5d1SDavid du Colombier _syserrno(); 119a747e4fSDavid du Colombier return -1; 123e12c5d1SDavid du Colombier } 13*354ab865SDavid du Colombier 14*354ab865SDavid du Colombier int chmod(const char * path,mode_t mode)15*354ab865SDavid du Colombierchmod(const char *path, mode_t mode) 16*354ab865SDavid du Colombier { 17*354ab865SDavid du Colombier Dir d, *dir; 18*354ab865SDavid du Colombier 19*354ab865SDavid du Colombier dir = _dirstat(path); 20*354ab865SDavid du Colombier if(dir == nil) 21*354ab865SDavid du Colombier return seterrno(); 22*354ab865SDavid du Colombier _nulldir(&d); 23*354ab865SDavid du Colombier d.mode = (dir->mode & ~0777) | (mode & 0777); 24*354ab865SDavid du Colombier free(dir); 25*354ab865SDavid du Colombier if(_dirwstat(path, &d) < 0) 26*354ab865SDavid du Colombier return seterrno(); 279a747e4fSDavid du Colombier return 0; 283e12c5d1SDavid du Colombier } 293e12c5d1SDavid du Colombier 303e12c5d1SDavid du Colombier int fchmod(int fd,mode_t mode)313e12c5d1SDavid du Colombierfchmod(int fd, mode_t mode) 323e12c5d1SDavid du Colombier { 33*354ab865SDavid du Colombier Dir d, *dir; 343e12c5d1SDavid du Colombier 35*354ab865SDavid du Colombier dir = _dirfstat(fd); 36*354ab865SDavid du Colombier if(dir == nil) 37*354ab865SDavid du Colombier return seterrno(); 389a747e4fSDavid du Colombier _nulldir(&d); 39*354ab865SDavid du Colombier d.mode = (dir->mode & ~0777) | (mode & 0777); 40*354ab865SDavid du Colombier free(dir); 41*354ab865SDavid du Colombier if(_dirfwstat(fd, &d) < 0) 42*354ab865SDavid du Colombier return seterrno(); 439a747e4fSDavid du Colombier return 0; 443e12c5d1SDavid du Colombier } 45