1 Fixed "Operation not permitted" error on reading an empty file: FUSE read/write
2 ops should return a number of bytes actually read/written or -errno on error.
3 Picked from upstream svn r336.
4 Index: fuse-exfat/fuse/main.c
5 ===================================================================
6 --- fuse-exfat.orig/fuse/main.c 2013-01-25 22:26:15.309086812 +0100
7 +++ fuse-exfat/fuse/main.c 2013-01-25 22:26:20.093086638 +0100
9 static int fuse_exfat_read(const char* path, char* buffer, size_t size,
10 off_t offset, struct fuse_file_info* fi)
14 exfat_debug("[%s] %s (%zu bytes)", __func__, path, size);
15 - if (exfat_generic_pread(&ef, get_node(fi), buffer, size, offset) != size)
18 + ret = exfat_generic_pread(&ef, get_node(fi), buffer, size, offset);
24 static int fuse_exfat_write(const char* path, const char* buffer, size_t size,
25 off_t offset, struct fuse_file_info* fi)
29 exfat_debug("[%s] %s (%zu bytes)", __func__, path, size);
30 - if (exfat_generic_pwrite(&ef, get_node(fi), buffer, size, offset) != size)
33 + ret = exfat_generic_pwrite(&ef, get_node(fi), buffer, size, offset);
39 static int fuse_exfat_unlink(const char* path)
40 Index: fuse-exfat/libexfat/io.c
41 ===================================================================
42 --- fuse-exfat.orig/libexfat/io.c 2013-01-25 22:26:15.309086812 +0100
43 +++ fuse-exfat/libexfat/io.c 2013-01-25 22:26:20.093086638 +0100
46 if (!ef->ro && !ef->noatime)
47 exfat_update_atime(node);
48 - return size - remainder;
49 + return MIN(size, node->size - offset) - remainder;
52 ssize_t exfat_generic_pwrite(struct exfat* ef, struct exfat_node* node,