summaryrefslogtreecommitdiffstats
path: root/lib/libarchive/archive_write_set_compression_bzip2.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libarchive/archive_write_set_compression_bzip2.c')
-rw-r--r--lib/libarchive/archive_write_set_compression_bzip2.c69
1 files changed, 36 insertions, 33 deletions
diff --git a/lib/libarchive/archive_write_set_compression_bzip2.c b/lib/libarchive/archive_write_set_compression_bzip2.c
index 85974f8..eab8c70 100644
--- a/lib/libarchive/archive_write_set_compression_bzip2.c
+++ b/lib/libarchive/archive_write_set_compression_bzip2.c
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
#include "archive.h"
#include "archive_private.h"
+#include "archive_write_private.h"
struct private_data {
bz_stream stream;
@@ -62,23 +63,23 @@ struct private_data {
#define SET_NEXT_IN(st,src) \
(st)->stream.next_in = (char *)(uintptr_t)(const void *)(src)
-static int archive_compressor_bzip2_finish(struct archive *);
-static int archive_compressor_bzip2_init(struct archive *);
-static int archive_compressor_bzip2_write(struct archive *, const void *,
- size_t);
-static int drive_compressor(struct archive *, struct private_data *,
+static int archive_compressor_bzip2_finish(struct archive_write *);
+static int archive_compressor_bzip2_init(struct archive_write *);
+static int archive_compressor_bzip2_write(struct archive_write *,
+ const void *, size_t);
+static int drive_compressor(struct archive_write *, struct private_data *,
int finishing);
/*
* Allocate, initialize and return an archive object.
*/
int
-archive_write_set_compression_bzip2(struct archive *a)
+archive_write_set_compression_bzip2(struct archive *_a)
{
- __archive_check_magic(a, ARCHIVE_WRITE_MAGIC, ARCHIVE_STATE_NEW, "archive_write_set_compression_bzip2");
+ struct archive_write *a = (struct archive_write *)_a;
+ __archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_write_set_compression_bzip2");
a->compression_init = &archive_compressor_bzip2_init;
- a->compression_code = ARCHIVE_COMPRESSION_BZIP2;
- a->compression_name = "bzip2";
return (ARCHIVE_OK);
}
@@ -86,23 +87,23 @@ archive_write_set_compression_bzip2(struct archive *a)
* Setup callback.
*/
static int
-archive_compressor_bzip2_init(struct archive *a)
+archive_compressor_bzip2_init(struct archive_write *a)
{
int ret;
struct private_data *state;
- a->compression_code = ARCHIVE_COMPRESSION_BZIP2;
- a->compression_name = "bzip2";
+ a->archive.compression_code = ARCHIVE_COMPRESSION_BZIP2;
+ a->archive.compression_name = "bzip2";
if (a->client_opener != NULL) {
- ret = (a->client_opener)(a, a->client_data);
+ ret = (a->client_opener)(&a->archive, a->client_data);
if (ret != 0)
return (ret);
}
state = (struct private_data *)malloc(sizeof(*state));
if (state == NULL) {
- archive_set_error(a, ENOMEM,
+ archive_set_error(&a->archive, ENOMEM,
"Can't allocate data for compression");
return (ARCHIVE_FATAL);
}
@@ -112,7 +113,7 @@ archive_compressor_bzip2_init(struct archive *a)
state->compressed = (char *)malloc(state->compressed_buffer_size);
if (state->compressed == NULL) {
- archive_set_error(a, ENOMEM,
+ archive_set_error(&a->archive, ENOMEM,
"Can't allocate data for compression buffer");
free(state);
return (ARCHIVE_FATAL);
@@ -131,7 +132,7 @@ archive_compressor_bzip2_init(struct archive *a)
}
/* Library setup failed: clean up. */
- archive_set_error(a, ARCHIVE_ERRNO_MISC,
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Internal error initializing compression library");
free(state->compressed);
free(state);
@@ -139,17 +140,17 @@ archive_compressor_bzip2_init(struct archive *a)
/* Override the error message if we know what really went wrong. */
switch (ret) {
case BZ_PARAM_ERROR:
- archive_set_error(a, ARCHIVE_ERRNO_MISC,
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Internal error initializing compression library: "
"invalid setup parameter");
break;
case BZ_MEM_ERROR:
- archive_set_error(a, ENOMEM,
+ archive_set_error(&a->archive, ENOMEM,
"Internal error initializing compression library: "
"out of memory");
break;
case BZ_CONFIG_ERROR:
- archive_set_error(a, ARCHIVE_ERRNO_MISC,
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Internal error initializing compression library: "
"mis-compiled library");
break;
@@ -165,14 +166,14 @@ archive_compressor_bzip2_init(struct archive *a)
* Returns ARCHIVE_OK if all data written, error otherwise.
*/
static int
-archive_compressor_bzip2_write(struct archive *a, const void *buff,
+archive_compressor_bzip2_write(struct archive_write *a, const void *buff,
size_t length)
{
struct private_data *state;
state = (struct private_data *)a->compression_data;
if (a->client_writer == NULL) {
- archive_set_error(a, ARCHIVE_ERRNO_PROGRAMMER,
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
"No write callback is registered? "
"This is probably an internal programming error.");
return (ARCHIVE_FATAL);
@@ -186,7 +187,7 @@ archive_compressor_bzip2_write(struct archive *a, const void *buff,
state->stream.avail_in = length;
if (drive_compressor(a, state, 0))
return (ARCHIVE_FATAL);
- a->file_position += length;
+ a->archive.file_position += length;
return (ARCHIVE_OK);
}
@@ -195,7 +196,7 @@ archive_compressor_bzip2_write(struct archive *a, const void *buff,
* Finish the compression.
*/
static int
-archive_compressor_bzip2_finish(struct archive *a)
+archive_compressor_bzip2_finish(struct archive_write *a)
{
ssize_t block_length;
int ret;
@@ -207,7 +208,7 @@ archive_compressor_bzip2_finish(struct archive *a)
state = (struct private_data *)a->compression_data;
ret = ARCHIVE_OK;
if (a->client_writer == NULL) {
- archive_set_error(a, ARCHIVE_ERRNO_PROGRAMMER,
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
"No write callback is registered?\n"
"This is probably an internal programming error.");
ret = ARCHIVE_FATAL;
@@ -257,14 +258,14 @@ archive_compressor_bzip2_finish(struct archive *a)
}
/* Write the last block */
- bytes_written = (a->client_writer)(a, a->client_data,
+ bytes_written = (a->client_writer)(&a->archive, a->client_data,
state->compressed, block_length);
/* TODO: Handle short write of final block. */
if (bytes_written <= 0)
ret = ARCHIVE_FATAL;
else {
- a->raw_position += ret;
+ a->archive.raw_position += ret;
ret = ARCHIVE_OK;
}
@@ -274,7 +275,7 @@ cleanup:
case BZ_OK:
break;
default:
- archive_set_error(a, ARCHIVE_ERRNO_PROGRAMMER,
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
"Failed to clean up compressor");
ret = ARCHIVE_FATAL;
}
@@ -284,7 +285,7 @@ cleanup:
/* Close the output */
if (a->client_closer != NULL)
- (a->client_closer)(a, a->client_data);
+ (a->client_closer)(&a->archive, a->client_data);
return (ret);
}
@@ -297,15 +298,16 @@ cleanup:
* false) and the end-of-archive case (finishing == true).
*/
static int
-drive_compressor(struct archive *a, struct private_data *state, int finishing)
+drive_compressor(struct archive_write *a, struct private_data *state, int finishing)
{
ssize_t bytes_written;
int ret;
for (;;) {
if (state->stream.avail_out == 0) {
- bytes_written = (a->client_writer)(a, a->client_data,
- state->compressed, state->compressed_buffer_size);
+ bytes_written = (a->client_writer)(&a->archive,
+ a->client_data, state->compressed,
+ state->compressed_buffer_size);
if (bytes_written <= 0) {
/* TODO: Handle this write failure */
return (ARCHIVE_FATAL);
@@ -317,7 +319,7 @@ drive_compressor(struct archive *a, struct private_data *state, int finishing)
state->compressed_buffer_size - bytes_written);
}
- a->raw_position += bytes_written;
+ a->archive.raw_position += bytes_written;
state->stream.next_out = state->compressed +
state->compressed_buffer_size - bytes_written;
state->stream.avail_out = bytes_written;
@@ -340,7 +342,8 @@ drive_compressor(struct archive *a, struct private_data *state, int finishing)
return (ARCHIVE_OK);
default:
/* Any other return value indicates an error */
- archive_set_error(a, ARCHIVE_ERRNO_PROGRAMMER,
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_PROGRAMMER,
"Bzip2 compression failed");
return (ARCHIVE_FATAL);
}
OpenPOWER on IntegriCloud