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