OSDN Git Service

Give the caller of pread()/pwrite() a chance to handle I/O errors.
authorrelan <relan@users.noreply.github.com>
Tue, 6 Aug 2013 18:53:10 +0000 (18:53 +0000)
committerrelan <relan@users.noreply.github.com>
Mon, 24 Aug 2015 05:26:16 +0000 (08:26 +0300)
libexfat/exfat.h
libexfat/io.c

index 4b0ebc9..d0dbeae 100644 (file)
@@ -143,9 +143,9 @@ off_t exfat_get_size(const struct exfat_dev* dev);
 off_t exfat_seek(struct exfat_dev* dev, off_t offset, int whence);
 ssize_t exfat_read(struct exfat_dev* dev, void* buffer, size_t size);
 ssize_t exfat_write(struct exfat_dev* dev, const void* buffer, size_t size);
-void exfat_pread(struct exfat_dev* dev, void* buffer, size_t size,
+ssize_t exfat_pread(struct exfat_dev* dev, void* buffer, size_t size,
                off_t offset);
-void exfat_pwrite(struct exfat_dev* dev, const void* buffer, size_t size,
+ssize_t exfat_pwrite(struct exfat_dev* dev, const void* buffer, size_t size,
                off_t offset);
 ssize_t exfat_generic_pread(const struct exfat* ef, struct exfat_node* node,
                void* buffer, size_t size, off_t offset);
index 052aa8d..71e1dbc 100644 (file)
@@ -282,28 +282,24 @@ ssize_t exfat_write(struct exfat_dev* dev, const void* buffer, size_t size)
 #endif
 }
 
-void exfat_pread(struct exfat_dev* dev, void* buffer, size_t size,
+ssize_t exfat_pread(struct exfat_dev* dev, void* buffer, size_t size,
                off_t offset)
 {
 #ifdef USE_UBLIO
-       if (ublio_pread(dev->ufh, buffer, size, offset) != size)
+       return ublio_pread(dev->ufh, buffer, size, offset);
 #else
-       if (pread(dev->fd, buffer, size, offset) != size)
+       return pread(dev->fd, buffer, size, offset);
 #endif
-               exfat_bug("failed to read %zu bytes from file at %"PRIu64, size,
-                               (uint64_t) offset);
 }
 
-void exfat_pwrite(struct exfat_dev* dev, const void* buffer, size_t size,
+ssize_t exfat_pwrite(struct exfat_dev* dev, const void* buffer, size_t size,
                off_t offset)
 {
 #ifdef USE_UBLIO
-       if (ublio_pwrite(dev->ufh, buffer, size, offset) != size)
+       return ublio_pwrite(dev->ufh, buffer, size, offset);
 #else
-       if (pwrite(dev->fd, buffer, size, offset) != size)
+       return pwrite(dev->fd, buffer, size, offset);
 #endif
-               exfat_bug("failed to write %zu bytes to file at %"PRIu64, size,
-                               (uint64_t) offset);
 }
 
 ssize_t exfat_generic_pread(const struct exfat* ef, struct exfat_node* node,