summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libarchive/archive_private.h2
-rw-r--r--lib/libarchive/archive_write.c4
-rw-r--r--lib/libarchive/archive_write_set_format_cpio.c9
-rw-r--r--lib/libarchive/archive_write_set_format_pax.c9
-rw-r--r--lib/libarchive/archive_write_set_format_shar.c15
-rw-r--r--lib/libarchive/archive_write_set_format_ustar.c8
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);
}
OpenPOWER on IntegriCloud