diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2017-12-13 14:13:29 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2018-01-10 10:42:24 +0100 |
commit | e0e4c722c98737a4202b9fabc60bff6d2c6050f4 (patch) | |
tree | 35397d574ae30020bb3e64c449e04c13e9288e2a | |
parent | 896894088e7de081caddb5fc8dc653bc0f5ac7bb (diff) | |
download | barebox-e0e4c722c98737a4202b9fabc60bff6d2c6050f4.tar.gz barebox-e0e4c722c98737a4202b9fabc60bff6d2c6050f4.tar.xz |
fs: implement ftruncate
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | fs/fs.c | 22 | ||||
-rw-r--r-- | include/unistd.h | 1 |
2 files changed, 23 insertions, 0 deletions
@@ -742,6 +742,28 @@ int creat(const char *pathname, mode_t mode) } EXPORT_SYMBOL(creat); +int ftruncate(int fd, loff_t length) +{ + struct fs_driver_d *fsdrv; + FILE *f; + int ret; + + if (check_fd(fd)) + return -errno; + + f = &files[fd]; + + fsdrv = f->fsdev->driver; + + ret = fsdrv->truncate(&f->fsdev->dev, f, length); + if (ret) + return ret; + + f->size = length; + + return 0; +} + int ioctl(int fd, int request, void *buf) { struct fs_driver_d *fsdrv; diff --git a/include/unistd.h b/include/unistd.h index 31f430a5b6..f392e6dd6c 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -20,5 +20,6 @@ int symlink(const char *pathname, const char *newpath); int readlink(const char *path, char *buf, size_t bufsiz); int chdir(const char *pathname); const char *getcwd(void); +int ftruncate(int fd, loff_t length); #endif /* __UNISTD_H */ |