xref: /plan9-contrib/sys/src/ape/lib/ap/plan9/chmod.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
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