diff options
author | Andres Mejia <amejia004@gmail.com> | 2013-01-25 22:01:56 -0500 |
---|---|---|
committer | Andres Mejia <amejia004@gmail.com> | 2013-01-25 22:01:56 -0500 |
commit | a16da62ba7771eebd3807e18513195d0f0607d8d (patch) | |
tree | a28b3f5f958581fbaa309a1c51f46cdd0cdd120b /libarchive/archive_read.c | |
parent | c2a8c82a44e2ef60255f5b9d21482c3cc26a60e5 (diff) | |
download | libarchive-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.c | 6 |
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); } |