diff options
author | kientzle <kientzle@FreeBSD.org> | 2007-03-03 07:37:37 +0000 |
---|---|---|
committer | kientzle <kientzle@FreeBSD.org> | 2007-03-03 07:37:37 +0000 |
commit | 1a60578adb6be1f7da9ed95f38cf52c20be13591 (patch) | |
tree | 1b026213a337089af577dee3ed6d194ee1b87d88 /lib/libarchive/archive_write_set_compression_none.c | |
parent | 56746aa8e0ffff51b371e72446368d6dbbe6b4ba (diff) | |
download | FreeBSD-src-1a60578adb6be1f7da9ed95f38cf52c20be13591.zip FreeBSD-src-1a60578adb6be1f7da9ed95f38cf52c20be13591.tar.gz |
libarchive 2.0
* libarchive_test program exercises many of the core features
* Refactored old "read_extract" into new "archive_write_disk", which
uses archive_write methods to put entries onto disk. In particular,
you can now use archive_write_disk to create objects on disk
without having an archive available.
* Pushed some security checks from bsdtar down into libarchive, where
they can be better optimized.
* Rearchitected the logic for creating objects on disk to reduce
the number of system calls. Several common cases now use a
minimum number of system calls.
* Virtualized some internal interfaces to provide a clearer separation
of read and write handling and make it simpler to override key
methods.
* New "empty" format reader.
* Corrected return types (this ABI breakage required the "2.0" version bump)
* Many bug fixes.
Diffstat (limited to 'lib/libarchive/archive_write_set_compression_none.c')
-rw-r--r-- | lib/libarchive/archive_write_set_compression_none.c | 59 |
1 files changed, 30 insertions, 29 deletions
diff --git a/lib/libarchive/archive_write_set_compression_none.c b/lib/libarchive/archive_write_set_compression_none.c index 329bd76..44ac83e 100644 --- a/lib/libarchive/archive_write_set_compression_none.c +++ b/lib/libarchive/archive_write_set_compression_none.c @@ -38,11 +38,12 @@ __FBSDID("$FreeBSD$"); #include "archive.h" #include "archive_private.h" +#include "archive_write_private.h" -static int archive_compressor_none_finish(struct archive *a); -static int archive_compressor_none_init(struct archive *); -static int archive_compressor_none_write(struct archive *, const void *, - size_t); +static int archive_compressor_none_finish(struct archive_write *a); +static int archive_compressor_none_init(struct archive_write *); +static int archive_compressor_none_write(struct archive_write *, + const void *, size_t); struct archive_none { char *buffer; @@ -52,12 +53,12 @@ struct archive_none { }; int -archive_write_set_compression_none(struct archive *a) +archive_write_set_compression_none(struct archive *_a) { - __archive_check_magic(a, ARCHIVE_WRITE_MAGIC, ARCHIVE_STATE_NEW, "archive_write_set_compression_none"); + struct archive_write *a = (struct archive_write *)_a; + __archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC, + ARCHIVE_STATE_NEW, "archive_write_set_compression_none"); a->compression_init = &archive_compressor_none_init; - a->compression_code = ARCHIVE_COMPRESSION_NONE; - a->compression_name = "none"; return (0); } @@ -65,23 +66,23 @@ archive_write_set_compression_none(struct archive *a) * Setup callback. */ static int -archive_compressor_none_init(struct archive *a) +archive_compressor_none_init(struct archive_write *a) { int ret; struct archive_none *state; - a->compression_code = ARCHIVE_COMPRESSION_NONE; - a->compression_name = "none"; + a->archive.compression_code = ARCHIVE_COMPRESSION_NONE; + a->archive.compression_name = "none"; 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 archive_none *)malloc(sizeof(*state)); if (state == NULL) { - archive_set_error(a, ENOMEM, + archive_set_error(&a->archive, ENOMEM, "Can't allocate data for output buffering"); return (ARCHIVE_FATAL); } @@ -91,7 +92,7 @@ archive_compressor_none_init(struct archive *a) if (state->buffer_size != 0) { state->buffer = (char *)malloc(state->buffer_size); if (state->buffer == NULL) { - archive_set_error(a, ENOMEM, + archive_set_error(&a->archive, ENOMEM, "Can't allocate output buffer"); free(state); return (ARCHIVE_FATAL); @@ -111,7 +112,7 @@ archive_compressor_none_init(struct archive *a) * Write data to the stream. */ static int -archive_compressor_none_write(struct archive *a, const void *vbuff, +archive_compressor_none_write(struct archive_write *a, const void *vbuff, size_t length) { const char *buff; @@ -122,7 +123,7 @@ archive_compressor_none_write(struct archive *a, const void *vbuff, state = (struct archive_none *)a->compression_data; buff = (const char *)vbuff; 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); @@ -138,14 +139,14 @@ archive_compressor_none_write(struct archive *a, const void *vbuff, */ if (state->buffer_size == 0) { while (remaining > 0) { - bytes_written = (a->client_writer)(a, a->client_data, - buff, remaining); + bytes_written = (a->client_writer)(&a->archive, + a->client_data, buff, remaining); if (bytes_written <= 0) return (ARCHIVE_FATAL); remaining -= bytes_written; buff += bytes_written; } - a->file_position += length; + a->archive.file_position += length; return (ARCHIVE_OK); } @@ -155,12 +156,12 @@ archive_compressor_none_write(struct archive *a, const void *vbuff, * output buffer. */ if (state->avail == 0) { - bytes_written = (a->client_writer)(a, a->client_data, - state->buffer, state->buffer_size); + bytes_written = (a->client_writer)(&a->archive, + a->client_data, state->buffer, state->buffer_size); if (bytes_written <= 0) return (ARCHIVE_FATAL); /* XXX TODO: if bytes_written < state->buffer_size */ - a->raw_position += bytes_written; + a->archive.raw_position += bytes_written; state->next = state->buffer; state->avail = state->buffer_size; } @@ -174,7 +175,7 @@ archive_compressor_none_write(struct archive *a, const void *vbuff, buff += to_copy; remaining -= to_copy; } - a->file_position += length; + a->archive.file_position += length; return (ARCHIVE_OK); } @@ -183,7 +184,7 @@ archive_compressor_none_write(struct archive *a, const void *vbuff, * Finish the compression. */ static int -archive_compressor_none_finish(struct archive *a) +archive_compressor_none_finish(struct archive_write *a) { ssize_t block_length; ssize_t target_block_length; @@ -195,7 +196,7 @@ archive_compressor_none_finish(struct archive *a) state = (struct archive_none *)a->compression_data; ret = ret2 = 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? " "This is probably an internal programming error."); return (ARCHIVE_FATAL); @@ -222,19 +223,19 @@ archive_compressor_none_finish(struct archive *a) target_block_length - block_length); block_length = target_block_length; } - bytes_written = (a->client_writer)(a, a->client_data, - state->buffer, block_length); + bytes_written = (a->client_writer)(&a->archive, + a->client_data, state->buffer, block_length); if (bytes_written <= 0) ret = ARCHIVE_FATAL; else { - a->raw_position += bytes_written; + a->archive.raw_position += bytes_written; ret = ARCHIVE_OK; } } /* Close the output */ if (a->client_closer != NULL) - ret2 = (a->client_closer)(a, a->client_data); + ret2 = (a->client_closer)(&a->archive, a->client_data); free(state->buffer); free(state); |