aboutsummaryrefslogtreecommitdiffstats
path: root/libexfat
diff options
context:
space:
mode:
authorrelan <relan@users.noreply.github.com>2013-08-06 18:53:10 +0000
committerrelan <relan@users.noreply.github.com>2015-08-24 08:26:16 +0300
commit1a11935a441648480daecbb1b8f3eb228f1bffe1 (patch)
treea05736ed588f8447791707827b8f3fa7ef9fdb25 /libexfat
parent30336a7bcd6140b9cd1f8079f3d1e658a94bda50 (diff)
downloadandroid_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.h4
-rw-r--r--libexfat/io.c16
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,