Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include "lib.h"
2
#include <errno.h>
3
#include <stdlib.h>
4
#include "sys9.h"
5
#include "dir.h"
6
 
7
static int
8
seterrno(void)
9
{
10
	_syserrno();
11
	return -1;
12
}
13
 
14
int
15
chmod(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
31
fchmod(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
}