-Fixed "Operation not permitted" error on reading an empty file: FUSE read/write
-ops should return a number of bytes actually read/written or -errno on error.
-Picked from upstream svn r336.
-Index: fuse-exfat/fuse/main.c
-===================================================================
---- fuse-exfat.orig/fuse/main.c 2013-01-25 22:26:15.309086812 +0100
-+++ fuse-exfat/fuse/main.c 2013-01-25 22:26:20.093086638 +0100
-@@ -155,19 +155,25 @@
- static int fuse_exfat_read(const char* path, char* buffer, size_t size,
- off_t offset, struct fuse_file_info* fi)
- {
-+ ssize_t ret;
-+
- exfat_debug("[%s] %s (%zu bytes)", __func__, path, size);
-- if (exfat_generic_pread(&ef, get_node(fi), buffer, size, offset) != size)
-- return EOF;
-- return size;
-+ ret = exfat_generic_pread(&ef, get_node(fi), buffer, size, offset);
-+ if (ret < 0)
-+ return -EIO;
-+ return ret;
- }
-
- static int fuse_exfat_write(const char* path, const char* buffer, size_t size,
- off_t offset, struct fuse_file_info* fi)
- {
-+ ssize_t ret;
-+
- exfat_debug("[%s] %s (%zu bytes)", __func__, path, size);
-- if (exfat_generic_pwrite(&ef, get_node(fi), buffer, size, offset) != size)
-- return EOF;
-- return size;
-+ ret = exfat_generic_pwrite(&ef, get_node(fi), buffer, size, offset);
-+ if (ret < 0)
-+ return -EIO;
-+ return ret;
- }
-
- static int fuse_exfat_unlink(const char* path)
-Index: fuse-exfat/libexfat/io.c
-===================================================================
---- fuse-exfat.orig/libexfat/io.c 2013-01-25 22:26:15.309086812 +0100
-+++ fuse-exfat/libexfat/io.c 2013-01-25 22:26:20.093086638 +0100
-@@ -341,7 +341,7 @@
- }
- if (!ef->ro && !ef->noatime)
- exfat_update_atime(node);
-- return size - remainder;
-+ return MIN(size, node->size - offset) - remainder;
- }
-
- ssize_t exfat_generic_pwrite(struct exfat* ef, struct exfat_node* node,