OSDN Git Service

Fix fuse_exfat_read() and fuse_exfat_write() return values.
authorrelan <relan@users.noreply.github.com>
Tue, 25 Dec 2012 16:58:23 +0000 (16:58 +0000)
committerrelan <relan@users.noreply.github.com>
Mon, 24 Aug 2015 05:26:15 +0000 (08:26 +0300)
FUSE read and write ops should return either buffer size on success or EOF
on error.

fuse/main.c

index 19f1816..21140a3 100644 (file)
@@ -154,14 +154,18 @@ static int fuse_exfat_read(const char* path, char* buffer, size_t size,
                off_t offset, struct fuse_file_info* fi)
 {
        exfat_debug("[fuse_exfat_read] %s (%zu bytes)", path, size);
-       return exfat_generic_pread(&ef, get_node(fi), buffer, size, offset);
+       if (exfat_generic_pread(&ef, get_node(fi), buffer, size, offset) != size)
+               return EOF;
+       return size;
 }
 
 static int fuse_exfat_write(const char* path, const char* buffer, size_t size,
                off_t offset, struct fuse_file_info* fi)
 {
        exfat_debug("[fuse_exfat_write] %s (%zu bytes)", path, size);
-       return exfat_generic_pwrite(&ef, get_node(fi), buffer, size, offset);
+       if (exfat_generic_pwrite(&ef, get_node(fi), buffer, size, offset) != size)
+               return EOF;
+       return size;
 }
 
 static int fuse_exfat_unlink(const char* path)