OSDN Git Service

Fixed "Operation not permitted" error on reading an empty file: FUSE read/write ops...
authorresver <resver@60bc1c72-a15a-11de-b98f-4500b42dc123>
Fri, 25 Jan 2013 17:46:10 +0000 (17:46 +0000)
committerresver <resver@60bc1c72-a15a-11de-b98f-4500b42dc123>
Fri, 25 Jan 2013 17:46:10 +0000 (17:46 +0000)
git-svn-id: http://exfat.googlecode.com/svn/trunk@336 60bc1c72-a15a-11de-b98f-4500b42dc123

fuse/main.c
libexfat/io.c

index 1527347..b939164 100644 (file)
@@ -155,19 +155,25 @@ static int fuse_exfat_release(const char* path, struct fuse_file_info* fi)
 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 1a555b9..4413aaa 100644 (file)
@@ -341,7 +341,7 @@ ssize_t exfat_generic_pread(const struct exfat* ef, struct exfat_node* node,
        }
        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,