diff options
author | kientzle <kientzle@FreeBSD.org> | 2007-05-29 01:00:21 +0000 |
---|---|---|
committer | kientzle <kientzle@FreeBSD.org> | 2007-05-29 01:00:21 +0000 |
commit | 013be331bc10706807599a452a143f4744398e9f (patch) | |
tree | 793787ab8615d768ba51341dfd934a5fb3039728 /lib/libarchive/archive_read_support_compression_compress.c | |
parent | c611006e893ac2bf962cabe02743954e3b3c3314 (diff) | |
download | FreeBSD-src-013be331bc10706807599a452a143f4744398e9f.zip FreeBSD-src-013be331bc10706807599a452a143f4744398e9f.tar.gz |
libarchive 2.2.3
* "compression_program" support uses an external program
* Portability: no longer uses "struct stat" as a primary
data interchange structure internally
* Part of the above: refactor archive_entry to separate
out copy_stat() and stat() functions
* More complete tests for archive_entry
* Finish archive_entry_clone()
* Isolate major()/minor()/makedev() in archive_entry; remove
these from everywhere else.
* Bug fix: properly handle decompression look-ahead at end-of-data
* Bug fixes to 'ar' support
* Fix memory leak in ZIP reader
* Portability: better timegm() emulation in iso9660 reader
* New write_disk flags to suppress auto dir creation and not
overwrite newer files (for future cpio front-end)
* Simplify trailing-'/' fixup when writing tar and pax
* Test enhancements: fix various compiler warnings, improve
portability, add lots of new tests.
* Documentation: document new functions, first draft of
libarchive_internals.3
MFC after: 14 days
Thanks to: Joerg Sonnenberger (compression_program)
Thanks to: Kai Wang (ar)
Thanks to: Colin Percival (many small fixes)
Thanks to: Many others who sent me various patches and problem reports.
Diffstat (limited to 'lib/libarchive/archive_read_support_compression_compress.c')
-rw-r--r-- | lib/libarchive/archive_read_support_compression_compress.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/lib/libarchive/archive_read_support_compression_compress.c b/lib/libarchive/archive_read_support_compression_compress.c index 9bd1765..f45b7cd 100644 --- a/lib/libarchive/archive_read_support_compression_compress.c +++ b/lib/libarchive/archive_read_support_compression_compress.c @@ -145,7 +145,9 @@ int archive_read_support_compression_compress(struct archive *_a) { struct archive_read *a = (struct archive_read *)_a; - return (__archive_read_register_compression(a, bid, init)); + if (__archive_read_register_compression(a, bid, init) != NULL) + return (ARCHIVE_OK); + return (ARCHIVE_FATAL); } /* @@ -197,10 +199,10 @@ init(struct archive_read *a, const void *buff, size_t n) a->archive.compression_code = ARCHIVE_COMPRESSION_COMPRESS; a->archive.compression_name = "compress (.Z)"; - a->compression_read_ahead = read_ahead; - a->compression_read_consume = read_consume; - a->compression_skip = NULL; /* not supported */ - a->compression_finish = finish; + a->decompressor->read_ahead = read_ahead; + a->decompressor->consume = read_consume; + a->decompressor->skip = NULL; /* not supported */ + a->decompressor->finish = finish; state = (struct private_data *)malloc(sizeof(*state)); if (state == NULL) { @@ -210,7 +212,7 @@ init(struct archive_read *a, const void *buff, size_t n) return (ARCHIVE_FATAL); } memset(state, 0, sizeof(*state)); - a->compression_data = state; + a->decompressor->data = state; state->uncompressed_buffer_size = 64 * 1024; state->uncompressed_buffer = malloc(state->uncompressed_buffer_size); @@ -278,7 +280,7 @@ read_ahead(struct archive_read *a, const void **p, size_t min) size_t read_avail; int ret; - state = (struct private_data *)a->compression_data; + state = (struct private_data *)a->decompressor->data; if (!a->client_reader) { archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, "No read callback is registered? " @@ -331,7 +333,7 @@ read_consume(struct archive_read *a, size_t n) { struct private_data *state; - state = (struct private_data *)a->compression_data; + state = (struct private_data *)a->decompressor->data; a->archive.file_position += n; state->read_next += n; if (state->read_next > state->next_out) @@ -349,7 +351,7 @@ finish(struct archive_read *a) struct private_data *state; int ret = ARCHIVE_OK; - state = (struct private_data *)a->compression_data; + state = (struct private_data *)a->decompressor->data; if (state != NULL) { if (state->uncompressed_buffer != NULL) @@ -357,10 +359,7 @@ finish(struct archive_read *a) free(state); } - a->compression_data = NULL; - if (a->client_closer != NULL) - ret = (a->client_closer)(&a->archive, a->client_data); - + a->decompressor->data = NULL; return (ret); } |