xref: /haiku/src/system/libroot/posix/sys/chmod.c (revision 5e2ef462ec217bde96ca3facd40711db324b1126)
15af32e75SAxel Dörfler /*
2*5e2ef462SAxel Dörfler  * Copyright 2002-2008, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3*5e2ef462SAxel Dörfler  * Distributed under the terms of the MIT License.
45af32e75SAxel Dörfler  */
55af32e75SAxel Dörfler 
65af32e75SAxel Dörfler 
7*5e2ef462SAxel Dörfler #include <NodeMonitor.h>
85af32e75SAxel Dörfler 
95af32e75SAxel Dörfler #include <sys/stat.h>
105af32e75SAxel Dörfler #include <syscalls.h>
115af32e75SAxel Dörfler #include <errno.h>
125af32e75SAxel Dörfler 
135af32e75SAxel Dörfler 
145af32e75SAxel Dörfler #define RETURN_AND_SET_ERRNO(err) \
155af32e75SAxel Dörfler 	if (err < 0) { \
165af32e75SAxel Dörfler 		errno = err; \
175af32e75SAxel Dörfler 		return -1; \
185af32e75SAxel Dörfler 	} \
195af32e75SAxel Dörfler 	return err;
205af32e75SAxel Dörfler 
215af32e75SAxel Dörfler 
225af32e75SAxel Dörfler int
235af32e75SAxel Dörfler chmod(const char *path, mode_t mode)
245af32e75SAxel Dörfler {
255af32e75SAxel Dörfler 	struct stat stat;
265af32e75SAxel Dörfler 	status_t status;
275af32e75SAxel Dörfler 
285af32e75SAxel Dörfler 	stat.st_mode = mode;
295af32e75SAxel Dörfler 	status = _kern_write_stat(-1, path, true, &stat, sizeof(struct stat),
30*5e2ef462SAxel Dörfler 		B_STAT_MODE);
315af32e75SAxel Dörfler 
325af32e75SAxel Dörfler 	RETURN_AND_SET_ERRNO(status);
335af32e75SAxel Dörfler }
345af32e75SAxel Dörfler 
355af32e75SAxel Dörfler 
365af32e75SAxel Dörfler int
375af32e75SAxel Dörfler fchmod(int fd, mode_t mode)
385af32e75SAxel Dörfler {
395af32e75SAxel Dörfler 	struct stat stat;
405af32e75SAxel Dörfler 	status_t status;
415af32e75SAxel Dörfler 
425af32e75SAxel Dörfler 	stat.st_mode = mode;
435af32e75SAxel Dörfler 	status = _kern_write_stat(fd, NULL, false, &stat, sizeof(struct stat),
44*5e2ef462SAxel Dörfler 		B_STAT_MODE);
455af32e75SAxel Dörfler 
465af32e75SAxel Dörfler 	RETURN_AND_SET_ERRNO(status);
475af32e75SAxel Dörfler }
48