]> git.sven.stormbind.net Git - sven/fuse-exfat.git/blob - debian/patches/fix-fuse-read-write-return-r336.patch
New upstream release
[sven/fuse-exfat.git] / debian / patches / fix-fuse-read-write-return-r336.patch
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
8 @@ -155,19 +155,25 @@
9  static int fuse_exfat_read(const char* path, char* buffer, size_t size,
10                 off_t offset, struct fuse_file_info* fi)
11  {
12 +       ssize_t ret;
13 +
14         exfat_debug("[%s] %s (%zu bytes)", __func__, path, size);
15 -       if (exfat_generic_pread(&ef, get_node(fi), buffer, size, offset) != size)
16 -               return EOF;
17 -       return size;
18 +       ret = exfat_generic_pread(&ef, get_node(fi), buffer, size, offset);
19 +       if (ret < 0)
20 +               return -EIO;
21 +       return ret;
22  }
23  
24  static int fuse_exfat_write(const char* path, const char* buffer, size_t size,
25                 off_t offset, struct fuse_file_info* fi)
26  {
27 +       ssize_t ret;
28 +
29         exfat_debug("[%s] %s (%zu bytes)", __func__, path, size);
30 -       if (exfat_generic_pwrite(&ef, get_node(fi), buffer, size, offset) != size)
31 -               return EOF;
32 -       return size;
33 +       ret = exfat_generic_pwrite(&ef, get_node(fi), buffer, size, offset);
34 +       if (ret < 0)
35 +               return -EIO;
36 +       return ret;
37  }
38  
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
44 @@ -341,7 +341,7 @@
45         }
46         if (!ef->ro && !ef->noatime)
47                 exfat_update_atime(node);
48 -       return size - remainder;
49 +       return MIN(size, node->size - offset) - remainder;
50  }
51  
52  ssize_t exfat_generic_pwrite(struct exfat* ef, struct exfat_node* node,