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