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