summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Kientzle <kientzle@FreeBSD.org>2004-04-28 04:41:27 +0000
committerTim Kientzle <kientzle@FreeBSD.org>2004-04-28 04:41:27 +0000
commit887bcd3995beb3d356d0b623af101873153e336e (patch)
treebde271e0176f2528e906220fb052eacb00d57033
parent775471a93a90d5321b336d56217ef36ad76c6133 (diff)
Notes
-rw-r--r--lib/libarchive/archive.h5
-rw-r--r--lib/libarchive/archive.h.in5
-rw-r--r--lib/libarchive/archive_private.h2
-rw-r--r--lib/libarchive/archive_read_support_compression_bzip2.c1
-rw-r--r--lib/libarchive/archive_read_support_compression_gzip.c1
-rw-r--r--lib/libarchive/archive_read_support_compression_none.c1
-rw-r--r--lib/libarchive/archive_util.c20
-rw-r--r--lib/libarchive/archive_write_set_compression_bzip2.c3
-rw-r--r--lib/libarchive/archive_write_set_compression_gzip.c2
-rw-r--r--lib/libarchive/archive_write_set_compression_none.c4
10 files changed, 43 insertions, 1 deletions
diff --git a/lib/libarchive/archive.h b/lib/libarchive/archive.h
index 1ac0b2b12071..791831026778 100644
--- a/lib/libarchive/archive.h
+++ b/lib/libarchive/archive.h
@@ -257,6 +257,11 @@ void archive_write_finish(struct archive *);
* Accessor functions to read/set various information in
* the struct archive object:
*/
+/* Bytes written after compression or read before decompression. */
+int64_t archive_position_compressed(struct archive *);
+/* Bytes written to compressor or read from decompressor. */
+int64_t archive_position_uncompressed(struct archive *);
+
const char *archive_compression_name(struct archive *);
int archive_compression(struct archive *);
int archive_errno(struct archive *);
diff --git a/lib/libarchive/archive.h.in b/lib/libarchive/archive.h.in
index 1ac0b2b12071..791831026778 100644
--- a/lib/libarchive/archive.h.in
+++ b/lib/libarchive/archive.h.in
@@ -257,6 +257,11 @@ void archive_write_finish(struct archive *);
* Accessor functions to read/set various information in
* the struct archive object:
*/
+/* Bytes written after compression or read before decompression. */
+int64_t archive_position_compressed(struct archive *);
+/* Bytes written to compressor or read from decompressor. */
+int64_t archive_position_uncompressed(struct archive *);
+
const char *archive_compression_name(struct archive *);
int archive_compression(struct archive *);
int archive_errno(struct archive *);
diff --git a/lib/libarchive/archive_private.h b/lib/libarchive/archive_private.h
index 83fddc36b018..ab224b7b82ff 100644
--- a/lib/libarchive/archive_private.h
+++ b/lib/libarchive/archive_private.h
@@ -99,6 +99,8 @@ struct archive {
/* Position in UNCOMPRESSED data stream. */
off_t file_position;
+ /* Position in COMPRESSED data stream. */
+ off_t raw_position;
/* File offset of beginning of most recently-read header. */
off_t header_position;
diff --git a/lib/libarchive/archive_read_support_compression_bzip2.c b/lib/libarchive/archive_read_support_compression_bzip2.c
index 313c21230cd6..99acc62bc1a1 100644
--- a/lib/libarchive/archive_read_support_compression_bzip2.c
+++ b/lib/libarchive/archive_read_support_compression_bzip2.c
@@ -325,6 +325,7 @@ drive_decompressor(struct archive *a, struct private_data *state)
a->compression_name);
return (ARCHIVE_FATAL);
}
+ a->raw_position += ret;
state->stream.avail_in = ret;
}
diff --git a/lib/libarchive/archive_read_support_compression_gzip.c b/lib/libarchive/archive_read_support_compression_gzip.c
index ba1adec47151..c7622a3082e1 100644
--- a/lib/libarchive/archive_read_support_compression_gzip.c
+++ b/lib/libarchive/archive_read_support_compression_gzip.c
@@ -335,6 +335,7 @@ drive_decompressor(struct archive *a, struct private_data *state)
a->compression_name);
return (ARCHIVE_FATAL);
}
+ a->raw_position += ret;
state->stream.avail_in = ret;
}
diff --git a/lib/libarchive/archive_read_support_compression_none.c b/lib/libarchive/archive_read_support_compression_none.c
index 9aeff5ff3cfd..48e3ea47883f 100644
--- a/lib/libarchive/archive_read_support_compression_none.c
+++ b/lib/libarchive/archive_read_support_compression_none.c
@@ -180,6 +180,7 @@ archive_decompressor_none_read_ahead(struct archive *a, const void **buff,
state->end_of_file = 1;
break;
}
+ a->raw_position += bytes_read;
state->client_total = bytes_read;
state->client_avail = state->client_total;
state->client_next = state->client_buff;
diff --git a/lib/libarchive/archive_util.c b/lib/libarchive/archive_util.c
index 99aa13621080..065a8fe40d4b 100644
--- a/lib/libarchive/archive_util.c
+++ b/lib/libarchive/archive_util.c
@@ -76,6 +76,26 @@ archive_compression_name(struct archive *a)
return (a->compression_name);
}
+
+/*
+ * Return a count of the number of compressed bytes processed.
+ */
+int64_t
+archive_position_compressed(struct archive *a)
+{
+ return (a->raw_position);
+}
+
+/*
+ * Return a count of the number of uncompressed bytes processed.
+ */
+int64_t
+archive_position_uncompressed(struct archive *a)
+{
+ return (a->file_position);
+}
+
+
void
archive_set_error(struct archive *a, int error_number, const char *fmt, ...)
{
diff --git a/lib/libarchive/archive_write_set_compression_bzip2.c b/lib/libarchive/archive_write_set_compression_bzip2.c
index 85e487031160..f044a0cd6bfb 100644
--- a/lib/libarchive/archive_write_set_compression_bzip2.c
+++ b/lib/libarchive/archive_write_set_compression_bzip2.c
@@ -172,6 +172,7 @@ archive_compressor_bzip2_write(struct archive *a, const void *buff,
state->stream.avail_in = length;
if (drive_compressor(a, state, 0))
return (-1);
+ a->file_position += length;
return (length);
}
@@ -244,6 +245,7 @@ archive_compressor_bzip2_finish(struct archive *a)
ret = (a->client_writer)(a, a->client_data, state->compressed,
block_length);
+ a->raw_position += ret;
if (ret != 0)
goto cleanup;
@@ -295,6 +297,7 @@ drive_compressor(struct archive *a, struct private_data *state, int finishing)
state->compressed_buffer_size - ret);
}
+ a->raw_position += ret;
state->stream.next_out = state->compressed +
state->compressed_buffer_size - ret;
state->stream.avail_out = ret;
diff --git a/lib/libarchive/archive_write_set_compression_gzip.c b/lib/libarchive/archive_write_set_compression_gzip.c
index b09fc2bb62ad..6832d9723c22 100644
--- a/lib/libarchive/archive_write_set_compression_gzip.c
+++ b/lib/libarchive/archive_write_set_compression_gzip.c
@@ -200,6 +200,7 @@ archive_compressor_gzip_write(struct archive *a, const void *buff,
if ((ret = drive_compressor(a, state, 0)) != ARCHIVE_OK)
return (ret);
+ a->file_position += length;
return (length);
}
@@ -270,6 +271,7 @@ archive_compressor_gzip_finish(struct archive *a)
if (tocopy < 8) {
ret = (a->client_writer)(a, a->client_data, state->compressed,
state->compressed_buffer_size);
+ a->raw_position += ret;
state->stream.next_out = state->compressed;
state->stream.avail_out = state->compressed_buffer_size;
memcpy(state->stream.next_out, trailer + tocopy, 8-tocopy);
diff --git a/lib/libarchive/archive_write_set_compression_none.c b/lib/libarchive/archive_write_set_compression_none.c
index ea600ddd09bc..99347b04fdf5 100644
--- a/lib/libarchive/archive_write_set_compression_none.c
+++ b/lib/libarchive/archive_write_set_compression_none.c
@@ -131,7 +131,8 @@ archive_compressor_none_write(struct archive *a, const void *vbuff,
if (state->avail == 0) {
ret = (a->client_writer)(a, a->client_data,
state->buffer, state->buffer_size);
- /* TODO: if ret < state->buffer_size */
+ /* XXX TODO: if ret < state->buffer_size XXX */
+ a->raw_position += ret;
state->next = state->buffer;
state->avail = state->buffer_size;
}
@@ -145,6 +146,7 @@ archive_compressor_none_write(struct archive *a, const void *vbuff,
buff += to_copy;
remaining -= to_copy;
}
+ a->file_position += length;
return (length);
}