xref: /haiku/src/system/libroot/posix/unistd/truncate.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 
75af32e75SAxel Dörfler #include <fs_interface.h>
8*5e2ef462SAxel Dörfler #include <NodeMonitor.h>
95af32e75SAxel Dörfler 
105af32e75SAxel Dörfler #include <unistd.h>
115af32e75SAxel Dörfler #include <syscalls.h>
125af32e75SAxel Dörfler #include <errno.h>
135af32e75SAxel Dörfler 
145af32e75SAxel Dörfler 
155af32e75SAxel Dörfler #define RETURN_AND_SET_ERRNO(err) \
165af32e75SAxel Dörfler 	if (err < 0) { \
175af32e75SAxel Dörfler 		errno = err; \
185af32e75SAxel Dörfler 		return -1; \
195af32e75SAxel Dörfler 	} \
205af32e75SAxel Dörfler 	return err;
215af32e75SAxel Dörfler 
225af32e75SAxel Dörfler 
235af32e75SAxel Dörfler int
245af32e75SAxel Dörfler truncate(const char *path, off_t newSize)
255af32e75SAxel Dörfler {
265af32e75SAxel Dörfler 	struct stat stat;
275af32e75SAxel Dörfler 	status_t status;
285af32e75SAxel Dörfler 
295af32e75SAxel Dörfler 	stat.st_size = newSize;
305af32e75SAxel Dörfler 	status = _kern_write_stat(-1, path, true, &stat, sizeof(struct stat),
31*5e2ef462SAxel Dörfler 		B_STAT_SIZE);
325af32e75SAxel Dörfler 
335af32e75SAxel Dörfler 	RETURN_AND_SET_ERRNO(status);
345af32e75SAxel Dörfler }
355af32e75SAxel Dörfler 
365af32e75SAxel Dörfler 
375af32e75SAxel Dörfler int
385af32e75SAxel Dörfler ftruncate(int fd, off_t newSize)
395af32e75SAxel Dörfler {
405af32e75SAxel Dörfler 	struct stat stat;
415af32e75SAxel Dörfler 	status_t status;
425af32e75SAxel Dörfler 
435af32e75SAxel Dörfler 	stat.st_size = newSize;
445af32e75SAxel Dörfler 	status = _kern_write_stat(fd, NULL, false, &stat, sizeof(struct stat),
45*5e2ef462SAxel Dörfler 		B_STAT_SIZE);
465af32e75SAxel Dörfler 
475af32e75SAxel Dörfler 	RETURN_AND_SET_ERRNO(status);
485af32e75SAxel Dörfler }
495af32e75SAxel Dörfler 
50