diff --git a/source/fs/mufs/file.c b/source/fs/mufs/file.c index 26eee33..c70aa40 100644 --- a/source/fs/mufs/file.c +++ b/source/fs/mufs/file.c @@ -96,6 +96,9 @@ size_t mufs_read(struct mufs_file *file, void *data, size_t len) if (!(file->mode & MUFS_READ)) return 0; + if (file->va >= file->tree->file_size) + return 0; + if (!(ret = mufs_tree_read(file->tree, data, file->va, len))) return 0; @@ -122,8 +125,12 @@ size_t mufs_write(struct mufs_file *file, const void *data, size_t len) file->va += ret; - if (file->tree->file_size <= file->va && mufs_sync_tree(file->tree) < 0) - return 0; + if (file->tree->file_size <= file->va) { + file->tree->file_size = file->va; + + if (mufs_sync_tree(file->tree) < 0) + return 0; + } return ret; }