summaryrefslogtreecommitdiff
path: root/libarchive/archive_read.c
diff options
context:
space:
mode:
authorAndres Mejia <amejia004@gmail.com>2013-01-25 22:01:56 -0500
committerAndres Mejia <amejia004@gmail.com>2013-01-25 22:01:56 -0500
commita16da62ba7771eebd3807e18513195d0f0607d8d (patch)
treea28b3f5f958581fbaa309a1c51f46cdd0cdd120b /libarchive/archive_read.c
parentc2a8c82a44e2ef60255f5b9d21482c3cc26a60e5 (diff)
downloadlibarchive-a16da62ba7771eebd3807e18513195d0f0607d8d.tar.gz
Give formats/filters way to know data amount requested from archive_read_data().
Diffstat (limited to 'libarchive/archive_read.c')
-rw-r--r--libarchive/archive_read.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/libarchive/archive_read.c b/libarchive/archive_read.c
index c569a63f..048c316c 100644
--- a/libarchive/archive_read.c
+++ b/libarchive/archive_read.c
@@ -660,6 +660,8 @@ _archive_read_next_header2(struct archive *_a, struct archive_entry *entry)
a->read_data_output_offset = 0;
a->read_data_remaining = 0;
+ a->read_data_is_posix_read = 0;
+ a->read_data_requested = 0;
a->data_start_node = a->client.cursor;
/* EOF always wins; otherwise return the worst error. */
return (r2 < r1 || r2 == ARCHIVE_EOF) ? r2 : r1;
@@ -771,6 +773,8 @@ archive_read_data(struct archive *_a, void *buff, size_t s)
while (s > 0) {
if (a->read_data_remaining == 0) {
read_buf = a->read_data_block;
+ a->read_data_is_posix_read = 1;
+ a->read_data_requested = s;
r = _archive_read_data_block(&a->archive, &read_buf,
&a->read_data_remaining, &a->read_data_offset);
a->read_data_block = read_buf;
@@ -824,6 +828,8 @@ archive_read_data(struct archive *_a, void *buff, size_t s)
bytes_read += len;
}
}
+ a->read_data_is_posix_read = 0;
+ a->read_data_requested = 0;
return (bytes_read);
}