xref: /haiku/src/system/libroot/posix/sys/chmod.c (revision 55e8238c7286b14593f43460aebf91b89309e38c)
15af32e75SAxel Dörfler /*
2fb2500daSAxel Dörfler  * Copyright 2002-2009, Axel Dörfler, axeld@pinc-software.de.
35e2ef462SAxel Dörfler  * Distributed under the terms of the MIT License.
45af32e75SAxel Dörfler  */
55af32e75SAxel Dörfler 
65af32e75SAxel Dörfler 
7fb2500daSAxel Dörfler #include <errno.h>
8fb2500daSAxel Dörfler #include <sys/stat.h>
9fb2500daSAxel Dörfler 
105e2ef462SAxel Dörfler #include <NodeMonitor.h>
115af32e75SAxel Dörfler 
12ae901935SOliver Tappe #include <errno_private.h>
135af32e75SAxel Dörfler #include <syscalls.h>
14fb2500daSAxel Dörfler #include <syscall_utils.h>
155af32e75SAxel Dörfler 
165af32e75SAxel Dörfler 
175af32e75SAxel Dörfler int
chmod(const char * path,mode_t mode)185af32e75SAxel Dörfler chmod(const char *path, mode_t mode)
195af32e75SAxel Dörfler {
205af32e75SAxel Dörfler 	struct stat stat;
215af32e75SAxel Dörfler 	status_t status;
225af32e75SAxel Dörfler 
235af32e75SAxel Dörfler 	stat.st_mode = mode;
24*55e8238cSAugustin Cavalier 	status = _kern_write_stat(AT_FDCWD, path, true, &stat, sizeof(struct stat),
255e2ef462SAxel Dörfler 		B_STAT_MODE);
265af32e75SAxel Dörfler 
275af32e75SAxel Dörfler 	RETURN_AND_SET_ERRNO(status);
285af32e75SAxel Dörfler }
295af32e75SAxel Dörfler 
305af32e75SAxel Dörfler 
315af32e75SAxel Dörfler int
fchmod(int fd,mode_t mode)325af32e75SAxel Dörfler fchmod(int fd, mode_t mode)
335af32e75SAxel Dörfler {
345af32e75SAxel Dörfler 	struct stat stat;
355af32e75SAxel Dörfler 	status_t status;
365af32e75SAxel Dörfler 
375af32e75SAxel Dörfler 	stat.st_mode = mode;
385af32e75SAxel Dörfler 	status = _kern_write_stat(fd, NULL, false, &stat, sizeof(struct stat),
395e2ef462SAxel Dörfler 		B_STAT_MODE);
405af32e75SAxel Dörfler 
415af32e75SAxel Dörfler 	RETURN_AND_SET_ERRNO(status);
425af32e75SAxel Dörfler }
43fb2500daSAxel Dörfler 
44fb2500daSAxel Dörfler 
45fb2500daSAxel Dörfler int
fchmodat(int fd,const char * path,mode_t mode,int flag)46fb2500daSAxel Dörfler fchmodat(int fd, const char* path, mode_t mode, int flag)
47fb2500daSAxel Dörfler {
48fb2500daSAxel Dörfler 	struct stat stat;
49fb2500daSAxel Dörfler 	status_t status;
50fb2500daSAxel Dörfler 
51fb2500daSAxel Dörfler 	stat.st_mode = mode;
52fb2500daSAxel Dörfler 	status = _kern_write_stat(fd, path, (flag & AT_SYMLINK_NOFOLLOW) == 0, &stat,
53fb2500daSAxel Dörfler 		sizeof(struct stat), B_STAT_MODE);
54fb2500daSAxel Dörfler 
55fb2500daSAxel Dörfler 	RETURN_AND_SET_ERRNO(status);
56fb2500daSAxel Dörfler }
57