xref: /haiku/src/system/libroot/posix/unistd/truncate.c (revision ae9019359606f1db67632ef51a77ce70001d3770)
15af32e75SAxel Dörfler /*
25e2ef462SAxel Dörfler  * Copyright 2002-2008, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
35e2ef462SAxel 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>
85e2ef462SAxel 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 
14*ae901935SOliver Tappe #include <errno_private.h>
15*ae901935SOliver Tappe 
165af32e75SAxel Dörfler 
175af32e75SAxel Dörfler #define RETURN_AND_SET_ERRNO(err) \
185af32e75SAxel Dörfler 	if (err < 0) { \
19*ae901935SOliver Tappe 		__set_errno(err); \
205af32e75SAxel Dörfler 		return -1; \
215af32e75SAxel Dörfler 	} \
225af32e75SAxel Dörfler 	return err;
235af32e75SAxel Dörfler 
245af32e75SAxel Dörfler 
255af32e75SAxel Dörfler int
265af32e75SAxel Dörfler truncate(const char *path, off_t newSize)
275af32e75SAxel Dörfler {
285af32e75SAxel Dörfler 	struct stat stat;
295af32e75SAxel Dörfler 	status_t status;
305af32e75SAxel Dörfler 
315af32e75SAxel Dörfler 	stat.st_size = newSize;
325af32e75SAxel Dörfler 	status = _kern_write_stat(-1, path, true, &stat, sizeof(struct stat),
335e2ef462SAxel Dörfler 		B_STAT_SIZE);
345af32e75SAxel Dörfler 
355af32e75SAxel Dörfler 	RETURN_AND_SET_ERRNO(status);
365af32e75SAxel Dörfler }
375af32e75SAxel Dörfler 
385af32e75SAxel Dörfler 
395af32e75SAxel Dörfler int
405af32e75SAxel Dörfler ftruncate(int fd, off_t newSize)
415af32e75SAxel Dörfler {
425af32e75SAxel Dörfler 	struct stat stat;
435af32e75SAxel Dörfler 	status_t status;
445af32e75SAxel Dörfler 
455af32e75SAxel Dörfler 	stat.st_size = newSize;
465af32e75SAxel Dörfler 	status = _kern_write_stat(fd, NULL, false, &stat, sizeof(struct stat),
475e2ef462SAxel Dörfler 		B_STAT_SIZE);
485af32e75SAxel Dörfler 
495af32e75SAxel Dörfler 	RETURN_AND_SET_ERRNO(status);
505af32e75SAxel Dörfler }
515af32e75SAxel Dörfler 
52