diff options
author | relan <relan@users.noreply.github.com> | 2013-08-06 18:53:10 +0000 |
---|---|---|
committer | relan <relan@users.noreply.github.com> | 2015-08-24 08:26:16 +0300 |
commit | 1a11935a441648480daecbb1b8f3eb228f1bffe1 (patch) | |
tree | a05736ed588f8447791707827b8f3fa7ef9fdb25 /libexfat | |
parent | 30336a7bcd6140b9cd1f8079f3d1e658a94bda50 (diff) | |
download | android_external_exfat-1a11935a441648480daecbb1b8f3eb228f1bffe1.tar.gz android_external_exfat-1a11935a441648480daecbb1b8f3eb228f1bffe1.tar.bz2 android_external_exfat-1a11935a441648480daecbb1b8f3eb228f1bffe1.zip |
Give the caller of pread()/pwrite() a chance to handle I/O errors.
Diffstat (limited to 'libexfat')
-rw-r--r-- | libexfat/exfat.h | 4 | ||||
-rw-r--r-- | libexfat/io.c | 16 |
2 files changed, 8 insertions, 12 deletions
diff --git a/libexfat/exfat.h b/libexfat/exfat.h index 4b0ebc9..d0dbeae 100644 --- a/libexfat/exfat.h +++ b/libexfat/exfat.h @@ -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); diff --git a/libexfat/io.c b/libexfat/io.c index 052aa8d..71e1dbc 100644 --- a/libexfat/io.c +++ b/libexfat/io.c @@ -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, |