xref: /haiku/src/system/libroot/posix/unistd/truncate.c (revision 5af32e752606778be5dd7379f319fe43cb3f6b8c)
1*5af32e75SAxel Dörfler /*
2*5af32e75SAxel Dörfler ** Copyright 2002-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3*5af32e75SAxel Dörfler ** Distributed under the terms of the Haiku License.
4*5af32e75SAxel Dörfler */
5*5af32e75SAxel Dörfler 
6*5af32e75SAxel Dörfler 
7*5af32e75SAxel Dörfler #include <fs_interface.h>
8*5af32e75SAxel Dörfler 
9*5af32e75SAxel Dörfler #include <unistd.h>
10*5af32e75SAxel Dörfler #include <syscalls.h>
11*5af32e75SAxel Dörfler #include <errno.h>
12*5af32e75SAxel Dörfler 
13*5af32e75SAxel Dörfler 
14*5af32e75SAxel Dörfler #define RETURN_AND_SET_ERRNO(err) \
15*5af32e75SAxel Dörfler 	if (err < 0) { \
16*5af32e75SAxel Dörfler 		errno = err; \
17*5af32e75SAxel Dörfler 		return -1; \
18*5af32e75SAxel Dörfler 	} \
19*5af32e75SAxel Dörfler 	return err;
20*5af32e75SAxel Dörfler 
21*5af32e75SAxel Dörfler 
22*5af32e75SAxel Dörfler int
23*5af32e75SAxel Dörfler truncate(const char *path, off_t newSize)
24*5af32e75SAxel Dörfler {
25*5af32e75SAxel Dörfler 	struct stat stat;
26*5af32e75SAxel Dörfler 	status_t status;
27*5af32e75SAxel Dörfler 
28*5af32e75SAxel Dörfler 	stat.st_size = newSize;
29*5af32e75SAxel Dörfler 	status = _kern_write_stat(-1, path, true, &stat, sizeof(struct stat),
30*5af32e75SAxel Dörfler 		FS_WRITE_STAT_SIZE);
31*5af32e75SAxel Dörfler 
32*5af32e75SAxel Dörfler 	RETURN_AND_SET_ERRNO(status);
33*5af32e75SAxel Dörfler }
34*5af32e75SAxel Dörfler 
35*5af32e75SAxel Dörfler 
36*5af32e75SAxel Dörfler int
37*5af32e75SAxel Dörfler ftruncate(int fd, off_t newSize)
38*5af32e75SAxel Dörfler {
39*5af32e75SAxel Dörfler 	struct stat stat;
40*5af32e75SAxel Dörfler 	status_t status;
41*5af32e75SAxel Dörfler 
42*5af32e75SAxel Dörfler 	stat.st_size = newSize;
43*5af32e75SAxel Dörfler 	status = _kern_write_stat(fd, NULL, false, &stat, sizeof(struct stat),
44*5af32e75SAxel Dörfler 		FS_WRITE_STAT_SIZE);
45*5af32e75SAxel Dörfler 
46*5af32e75SAxel Dörfler 	RETURN_AND_SET_ERRNO(status);
47*5af32e75SAxel Dörfler }
48*5af32e75SAxel Dörfler 
49