]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Introduce a shared __archive_write_nulls() method and remove
authorTim Kientzle <kientzle@gmail.com>
Sun, 18 Apr 2010 01:20:13 +0000 (21:20 -0400)
committerTim Kientzle <kientzle@gmail.com>
Sun, 18 Apr 2010 01:20:13 +0000 (21:20 -0400)
the duplicate copies of this function.

SVN-Revision: 2262

libarchive/archive_write.c
libarchive/archive_write_private.h
libarchive/archive_write_set_format_cpio.c
libarchive/archive_write_set_format_cpio_newc.c
libarchive/archive_write_set_format_pax.c
libarchive/archive_write_set_format_ustar.c

index 8c8aca57ea77b00ff5811ab83956848d827fdf7c..08d2b1ffa124235ab3bd3d67a6773a9690ec7865 100644 (file)
@@ -267,6 +267,22 @@ __archive_write_output(struct archive_write *a, const void *buff, size_t length)
        return (__archive_write_filter(a->filter_first, buff, length));
 }
 
+int
+__archive_write_nulls(struct archive_write *a, size_t length)
+{
+       if (length == 0)
+               return (ARCHIVE_OK);
+
+       while (length > 0) {
+               size_t to_write = length < a->null_length ? length : a->null_length;
+               int r = __archive_write_output(a, a->nulls, to_write);
+               if (r < ARCHIVE_OK)
+                       return (r);
+               length -= to_write;
+       }
+       return (ARCHIVE_OK);
+}
+
 static int
 archive_write_client_open(struct archive_write_filter *f)
 {
index 687ff67b7a66adafac560fa3a1abf2abbf0f1015..0fb447cb6341a34783b2581c51148af1f33e68a9 100644 (file)
@@ -62,6 +62,7 @@ void __archive_write_filters_free(struct archive *);
 struct archive_write_filter *__archive_write_allocate_filter(struct archive *);
 
 int __archive_write_output(struct archive_write *, const void *, size_t);
+int __archive_write_nulls(struct archive_write *, size_t);
 int __archive_write_filter(struct archive_write_filter *, const void *, size_t);
 int __archive_write_open_filter(struct archive_write_filter *);
 int __archive_write_close_filter(struct archive_write_filter *);
index 8cbef96a1f9235d0b4f0b1cdd990d7cb93878ace..1339f4f22150f5e41f6651f609eeaf776c91c5cb 100644 (file)
@@ -328,18 +328,7 @@ static int
 archive_write_cpio_finish_entry(struct archive_write *a)
 {
        struct cpio *cpio;
-       size_t to_write;
-       int ret;
 
        cpio = (struct cpio *)a->format_data;
-       ret = ARCHIVE_OK;
-       while (cpio->entry_bytes_remaining > 0) {
-               to_write = cpio->entry_bytes_remaining < a->null_length ?
-                   cpio->entry_bytes_remaining : a->null_length;
-               ret = __archive_write_output(a, a->nulls, to_write);
-               if (ret != ARCHIVE_OK)
-                       return (ret);
-               cpio->entry_bytes_remaining -= to_write;
-       }
-       return (ret);
+       return (__archive_write_nulls(a, cpio->entry_bytes_remaining));
 }
index 1049cb680bcc518eb4affa251773d53eba884fea..3bda18797292ed09ad6c78540aa42b0b051a7058 100644 (file)
@@ -279,18 +279,7 @@ static int
 archive_write_newc_finish_entry(struct archive_write *a)
 {
        struct cpio *cpio;
-       size_t to_write;
-       int ret;
 
        cpio = (struct cpio *)a->format_data;
-       while (cpio->entry_bytes_remaining > 0) {
-               to_write = cpio->entry_bytes_remaining < a->null_length ?
-                   cpio->entry_bytes_remaining : a->null_length;
-               ret = __archive_write_output(a, a->nulls, to_write);
-               if (ret != ARCHIVE_OK)
-                       return (ret);
-               cpio->entry_bytes_remaining -= to_write;
-       }
-       ret = __archive_write_output(a, a->nulls, cpio->padding);
-       return (ret);
+       return (__archive_write_nulls(a, cpio->entry_bytes_remaining + cpio->padding));
 }
index 249f2b5933e61fb9d6e58fb4d0a353870cffdd2a..3992d92f508dba63cb71af895fd4271f4d420dae 100644 (file)
@@ -85,7 +85,6 @@ static int             has_non_ASCII(const wchar_t *);
 static void             sparse_list_clear(struct pax *);
 static int              sparse_list_add(struct pax *, int64_t, int64_t);
 static char            *url_encode(const char *in);
-static int              write_nulls(struct archive_write *, size_t);
 
 /*
  * Set output format to 'restricted pax' format.
@@ -1079,7 +1078,7 @@ archive_write_pax_header(struct archive_write *a,
                        return (ARCHIVE_FATAL);
                }
                /* Pad out the end of the entry. */
-               r = write_nulls(a, pax->entry_padding);
+               r = __archive_write_nulls(a, pax->entry_padding);
                if (r != ARCHIVE_OK) {
                        /* If a write fails, we're pretty much toast. */
                        return (ARCHIVE_FATAL);
@@ -1379,7 +1378,7 @@ build_gnu_sparse_name(char *dest, const char *src)
 static int
 archive_write_pax_close(struct archive_write *a)
 {
-       return (write_nulls(a, 512 * 2));
+       return (__archive_write_nulls(a, 512 * 2));
 }
 
 static int
@@ -1417,27 +1416,11 @@ archive_write_pax_finish_entry(struct archive_write *a)
                        pax->sparse_list = sb;
                }
        }
-       ret = write_nulls(a, remaining + pax->entry_padding);
+       ret = __archive_write_nulls(a, remaining + pax->entry_padding);
        pax->entry_bytes_remaining = pax->entry_padding = 0;
        return (ret);
 }
 
-static int
-write_nulls(struct archive_write *a, size_t padding)
-{
-       int ret;
-       size_t to_write;
-
-       while (padding > 0) {
-               to_write = padding < a->null_length ? padding : a->null_length;
-               ret = __archive_write_output(a, a->nulls, to_write);
-               if (ret != ARCHIVE_OK)
-                       return (ret);
-               padding -= to_write;
-       }
-       return (ARCHIVE_OK);
-}
-
 static ssize_t
 archive_write_pax_data(struct archive_write *a, const void *buff, size_t s)
 {
@@ -1457,7 +1440,7 @@ archive_write_pax_data(struct archive_write *a, const void *buff, size_t s)
                    archive_strlen(&(pax->sparse_map)));
                if (ret != ARCHIVE_OK)
                        return (ret);
-               ret = write_nulls(a, pax->sparse_map_padding);
+               ret = __archive_write_nulls(a, pax->sparse_map_padding);
                if (ret != ARCHIVE_OK)
                        return (ret);
                archive_string_empty(&(pax->sparse_map));
index 12de03e08f4082c815e735c97ff0adc9d7174f98..f17aa3ae14ba2b813d22c3876d98717aeba3635a 100644 (file)
@@ -151,7 +151,6 @@ static int  archive_write_ustar_header(struct archive_write *,
 static int     format_256(int64_t, char *, int);
 static int     format_number(int64_t, char *, int size, int max, int strict);
 static int     format_octal(int64_t, char *, int);
-static int     write_nulls(struct archive_write *a, size_t);
 
 /*
  * Set output format to 'ustar' format.
@@ -522,7 +521,7 @@ format_octal(int64_t v, char *p, int s)
 static int
 archive_write_ustar_close(struct archive_write *a)
 {
-       return (write_nulls(a, 512*2));
+       return (__archive_write_nulls(a, 512*2));
 }
 
 static int
@@ -543,28 +542,12 @@ archive_write_ustar_finish_entry(struct archive_write *a)
        int ret;
 
        ustar = (struct ustar *)a->format_data;
-       ret = write_nulls(a,
+       ret = __archive_write_nulls(a,
            ustar->entry_bytes_remaining + ustar->entry_padding);
        ustar->entry_bytes_remaining = ustar->entry_padding = 0;
        return (ret);
 }
 
-static int
-write_nulls(struct archive_write *a, size_t padding)
-{
-       int ret;
-       size_t to_write;
-
-       while (padding > 0) {
-               to_write = padding < a->null_length ? padding : a->null_length;
-               ret = __archive_write_output(a, a->nulls, to_write);
-               if (ret != ARCHIVE_OK)
-                       return (ret);
-               padding -= to_write;
-       }
-       return (ARCHIVE_OK);
-}
-
 static ssize_t
 archive_write_ustar_data(struct archive_write *a, const void *buff, size_t s)
 {