diff options
-rw-r--r-- | lib/libarchive/archive_private.h | 2 | ||||
-rw-r--r-- | lib/libarchive/archive_write.c | 4 | ||||
-rw-r--r-- | lib/libarchive/archive_write_set_format_cpio.c | 9 | ||||
-rw-r--r-- | lib/libarchive/archive_write_set_format_pax.c | 9 | ||||
-rw-r--r-- | lib/libarchive/archive_write_set_format_shar.c | 15 | ||||
-rw-r--r-- | lib/libarchive/archive_write_set_format_ustar.c | 8 |
6 files changed, 28 insertions, 19 deletions
diff --git a/lib/libarchive/archive_private.h b/lib/libarchive/archive_private.h index 9e02856..cc63c1e 100644 --- a/lib/libarchive/archive_private.h +++ b/lib/libarchive/archive_private.h @@ -182,7 +182,7 @@ struct archive { int (*format_finish_entry)(struct archive *); int (*format_write_header)(struct archive *, struct archive_entry *); - int (*format_write_data)(struct archive *, + ssize_t (*format_write_data)(struct archive *, const void *buff, size_t); /* diff --git a/lib/libarchive/archive_write.c b/lib/libarchive/archive_write.c index 148f6b5..aa50c70 100644 --- a/lib/libarchive/archive_write.c +++ b/lib/libarchive/archive_write.c @@ -271,9 +271,7 @@ archive_write_header(struct archive *a, struct archive_entry *entry) int archive_write_data(struct archive *a, const void *buff, size_t s) { - int ret; __archive_check_magic(a, ARCHIVE_WRITE_MAGIC, ARCHIVE_STATE_DATA, "archive_write_data"); archive_string_empty(&a->error_string); - ret = (a->format_write_data)(a, buff, s); - return (ret == ARCHIVE_OK ? (ssize_t)s : -1); + return ((a->format_write_data)(a, buff, s)); } diff --git a/lib/libarchive/archive_write_set_format_cpio.c b/lib/libarchive/archive_write_set_format_cpio.c index 224f9cf..fc558b6 100644 --- a/lib/libarchive/archive_write_set_format_cpio.c +++ b/lib/libarchive/archive_write_set_format_cpio.c @@ -45,7 +45,7 @@ __FBSDID("$FreeBSD$"); #include "archive_entry.h" #include "archive_private.h" -static int archive_write_cpio_data(struct archive *, const void *buff, +static ssize_t archive_write_cpio_data(struct archive *, const void *buff, size_t s); static int archive_write_cpio_finish(struct archive *); static int archive_write_cpio_finish_entry(struct archive *); @@ -167,7 +167,7 @@ archive_write_cpio_header(struct archive *a, struct archive_entry *entry) return (ret); } -static int +static ssize_t archive_write_cpio_data(struct archive *a, const void *buff, size_t s) { struct cpio *cpio; @@ -179,7 +179,10 @@ archive_write_cpio_data(struct archive *a, const void *buff, size_t s) ret = (a->compression_write)(a, buff, s); cpio->entry_bytes_remaining -= s; - return (ret); + if (ret >= 0) + return (s); + else + return (ret); } /* diff --git a/lib/libarchive/archive_write_set_format_pax.c b/lib/libarchive/archive_write_set_format_pax.c index 81a43b7..657a720 100644 --- a/lib/libarchive/archive_write_set_format_pax.c +++ b/lib/libarchive/archive_write_set_format_pax.c @@ -70,7 +70,7 @@ static void add_pax_attr_time(struct archive_string *, unsigned long nanos); static void add_pax_attr_w(struct archive_string *, const char *key, const wchar_t *wvalue); -static int archive_write_pax_data(struct archive *, +static ssize_t archive_write_pax_data(struct archive *, const void *, size_t); static int archive_write_pax_finish(struct archive *); static int archive_write_pax_finish_entry(struct archive *); @@ -1081,7 +1081,7 @@ write_nulls(struct archive *a, size_t padding) return (ARCHIVE_OK); } -static int +static ssize_t archive_write_pax_data(struct archive *a, const void *buff, size_t s) { struct pax *pax; @@ -1094,7 +1094,10 @@ archive_write_pax_data(struct archive *a, const void *buff, size_t s) ret = (a->compression_write)(a, buff, s); pax->entry_bytes_remaining -= s; - return (ret); + if (ret == ARCHIVE_OK) + return (s); + else + return (ret); } static int diff --git a/lib/libarchive/archive_write_set_format_shar.c b/lib/libarchive/archive_write_set_format_shar.c index fd451e3..88b1384 100644 --- a/lib/libarchive/archive_write_set_format_shar.c +++ b/lib/libarchive/archive_write_set_format_shar.c @@ -64,9 +64,9 @@ struct shar { static int archive_write_shar_finish(struct archive *); static int archive_write_shar_header(struct archive *, struct archive_entry *); -static int archive_write_shar_data_sed(struct archive *, +static ssize_t archive_write_shar_data_sed(struct archive *, const void * buff, size_t); -static int archive_write_shar_data_uuencode(struct archive *, +static ssize_t archive_write_shar_data_uuencode(struct archive *, const void * buff, size_t); static int archive_write_shar_finish_entry(struct archive *); static int shar_printf(struct archive *, const char *fmt, ...); @@ -323,12 +323,13 @@ archive_write_shar_header(struct archive *a, struct archive_entry *entry) } /* XXX TODO: This could be more efficient XXX */ -static int +static ssize_t archive_write_shar_data_sed(struct archive *a, const void *buff, size_t n) { struct shar *shar; const char *src; int ret; + int written = n; shar = (struct shar *)a->format_data; if (!shar->has_data) @@ -357,7 +358,9 @@ archive_write_shar_data_sed(struct archive *a, const void *buff, size_t n) if (shar->outpos > 0) ret = (a->compression_write)(a, shar->outbuff, shar->outpos); - return (ret); + if (ret != ARCHIVE_OK) + return (ret); + return (written); } #define UUENC(c) (((c)!=0) ? ((c) & 077) + ' ': '`') @@ -384,7 +387,7 @@ uuencode_group(struct shar *shar) shar->outbuff[shar->outpos] = 0; } -static int +static ssize_t archive_write_shar_data_uuencode(struct archive *a, const void *buff, size_t length) { @@ -413,7 +416,7 @@ archive_write_shar_data_uuencode(struct archive *a, const void *buff, shar->uubuffer[shar->uuavail++] = *src++; shar->outbytes++; } - return (ARCHIVE_OK); + return (length); } static int diff --git a/lib/libarchive/archive_write_set_format_ustar.c b/lib/libarchive/archive_write_set_format_ustar.c index 0a443fb..53ef37b 100644 --- a/lib/libarchive/archive_write_set_format_ustar.c +++ b/lib/libarchive/archive_write_set_format_ustar.c @@ -113,7 +113,7 @@ static const struct archive_entry_header_ustar template_header = { { "" } /* padding */ }; -static int archive_write_ustar_data(struct archive *a, const void *buff, +static ssize_t archive_write_ustar_data(struct archive *a, const void *buff, size_t s); static int archive_write_ustar_finish(struct archive *); static int archive_write_ustar_finish_entry(struct archive *); @@ -493,7 +493,7 @@ write_nulls(struct archive *a, size_t padding) return (ARCHIVE_OK); } -static int +static ssize_t archive_write_ustar_data(struct archive *a, const void *buff, size_t s) { struct ustar *ustar; @@ -504,5 +504,7 @@ archive_write_ustar_data(struct archive *a, const void *buff, size_t s) s = ustar->entry_bytes_remaining; ret = (a->compression_write)(a, buff, s); ustar->entry_bytes_remaining -= s; - return (ret); + if (ret != ARCHIVE_OK) + return (ret); + return (s); } |