diff --git a/fs/vfs/fs_truncate.c b/fs/vfs/fs_truncate.c index 4ecd06c13d4..e67339a54b5 100644 --- a/fs/vfs/fs_truncate.c +++ b/fs/vfs/fs_truncate.c @@ -31,6 +31,7 @@ #include #include +#include #include "inode/inode.h" @@ -68,7 +69,19 @@ int file_truncate(FAR struct file *filep, off_t length) */ inode = filep->f_inode; - if (inode == NULL || !INODE_IS_MOUNTPT(inode) || inode->u.i_mops == NULL) + if (inode == NULL) + { + return -EINVAL; + } + + /* If inode is not mountpoint try ioctl first */ + + if (!INODE_IS_MOUNTPT(inode)) + { + return file_ioctl(filep, FIOC_TRUNCATE, length); + } + + if (inode->u.i_mops == NULL) { fwarn("WARNING: Not a (regular) file on a mounted file system.\n"); return -EINVAL; diff --git a/include/nuttx/fs/ioctl.h b/include/nuttx/fs/ioctl.h index 3c3038565b7..469b0c615a1 100644 --- a/include/nuttx/fs/ioctl.h +++ b/include/nuttx/fs/ioctl.h @@ -182,6 +182,9 @@ * configuration * OUT: None */ +#define FIOC_TRUNCATE _FIOC(0x0010) /* IN: Length of the file after truncate + * OUT: None + */ /* NuttX file system ioctl definitions **************************************/