diff options
Diffstat (limited to 'libarchive/archive_write_add_filter_bzip2.c')
-rw-r--r-- | libarchive/archive_write_add_filter_bzip2.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/libarchive/archive_write_add_filter_bzip2.c b/libarchive/archive_write_add_filter_bzip2.c index 9bb19082..6d1b3567 100644 --- a/libarchive/archive_write_add_filter_bzip2.c +++ b/libarchive/archive_write_add_filter_bzip2.c @@ -241,21 +241,15 @@ static int archive_compressor_bzip2_close(struct archive_write_filter *f) { struct private_data *data = (struct private_data *)f->data; - ssize_t bytes_written; - int ret; - - if (data == NULL) - return (ARCHIVE_OK); + int ret, r1; /* Finish compression cycle. */ ret = drive_compressor(f, data, 1); if (ret == ARCHIVE_OK) { /* Write the last block */ - bytes_written = __archive_write_filter(f->next_filter, + ret = __archive_write_filter(f->next_filter, data->compressed, data->compressed_buffer_size - data->stream.avail_out); - if (bytes_written <= 0) - ret = ARCHIVE_FATAL; } switch (BZ2_bzCompressEnd(&(data->stream))) { @@ -266,7 +260,9 @@ archive_compressor_bzip2_close(struct archive_write_filter *f) "Failed to clean up compressor"); ret = ARCHIVE_FATAL; } - return (ARCHIVE_OK); + + r1 = __archive_write_close_filter(f->next_filter); + return (r1 < ret ? r1 : ret); } static int |