ape: fix broken chmod for directories. (makes hg work again)
This commit is contained in:
parent
cbfc955b8d
commit
53e0e51cbb
1 changed files with 22 additions and 10 deletions
|
@ -7,27 +7,39 @@
|
|||
int
|
||||
chmod(const char *path, mode_t mode)
|
||||
{
|
||||
Dir d;
|
||||
Dir d, *dir;
|
||||
|
||||
_nulldir(&d);
|
||||
d.mode = mode & 0777;
|
||||
if(_dirwstat(path, &d) < 0){
|
||||
dir = _dirstat(path);
|
||||
if(dir == nil){
|
||||
error:
|
||||
_syserrno();
|
||||
return -1;
|
||||
}
|
||||
_nulldir(&d);
|
||||
d.mode = (dir->mode & ~0777) | (mode & 0777);
|
||||
free(dir);
|
||||
if(_dirwstat(path, &d) < 0)
|
||||
goto error;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
fchmod(int fd, mode_t mode)
|
||||
{
|
||||
Dir d;
|
||||
Dir d, *dir;
|
||||
|
||||
_nulldir(&d);
|
||||
d.mode = mode & 0777;
|
||||
if(_dirfwstat(fd, &d) < 0){
|
||||
dir = _dirfstat(fd);
|
||||
if(dir == nil){
|
||||
error:
|
||||
_syserrno();
|
||||
return -1;
|
||||
}
|
||||
_nulldir(&d);
|
||||
d.mode = (dir->mode & ~ 0777) | (mode & 0777);
|
||||
free(dir);
|
||||
if(_dirfwstat(fd, &d) < 0)
|
||||
goto error;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue