]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
__archive_write_filter returns a status, not a count of bytes written.
authorTim Kientzle <kientzle@gmail.com>
Sun, 31 Oct 2010 06:24:18 +0000 (02:24 -0400)
committerTim Kientzle <kientzle@gmail.com>
Sun, 31 Oct 2010 06:24:18 +0000 (02:24 -0400)
Correct the bzip2 and compress writers.

SVN-Revision: 2773

libarchive/archive_write_add_filter_bzip2.c
libarchive/archive_write_add_filter_compress.c

index 85a849225296c2f899ea8a1cb4c33beabcfd8c05..8b83a431aaac478d16b252b62bedf572e10876c2 100644 (file)
@@ -286,28 +286,19 @@ static int
 drive_compressor(struct archive_write_filter *f,
     struct private_data *data, int finishing)
 {
-       ssize_t bytes_written;
        int ret;
 
        for (;;) {
                if (data->stream.avail_out == 0) {
-                       bytes_written = __archive_write_filter(f->next_filter,
+                       ret = __archive_write_filter(f->next_filter,
                            data->compressed,
                            data->compressed_buffer_size);
-                       if (bytes_written <= 0) {
+                       if (ret != ARCHIVE_OK) {
                                /* TODO: Handle this write failure */
                                return (ARCHIVE_FATAL);
-                       } else if ((size_t)bytes_written < data->compressed_buffer_size) {
-                               /* Short write: Move remainder to
-                                * front and keep filling */
-                               memmove(data->compressed,
-                                   data->compressed + bytes_written,
-                                   data->compressed_buffer_size - bytes_written);
                        }
-
-                       data->stream.next_out = data->compressed +
-                           data->compressed_buffer_size - bytes_written;
-                       data->stream.avail_out = bytes_written;
+                       data->stream.next_out = data->compressed;
+                       data->stream.avail_out = data->compressed_buffer_size;
                }
 
                /* If there's nothing to do, we're done. */
index 25a08a8d12dfbd19c5e092aae3c99f9814a2055d..f8e6258ebcfdb4e5e10a8b5ca8447451dc5331d3 100644 (file)
@@ -222,15 +222,14 @@ static int
 output_byte(struct archive_write_filter *f, unsigned char c)
 {
        struct private_data *state = f->data;
-       ssize_t bytes_written;
 
        state->compressed[state->compressed_offset++] = c;
        ++state->out_count;
 
        if (state->compressed_buffer_size == state->compressed_offset) {
-               bytes_written = __archive_write_filter(f->next_filter,
+               int ret = __archive_write_filter(f->next_filter,
                    state->compressed, state->compressed_buffer_size);
-               if (bytes_written <= 0)
+               if (ret != ARCHIVE_OK)
                        return ARCHIVE_FATAL;
                state->compressed_offset = 0;
        }