]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
archive_read.c: s/__archive_errx/archive_set_error/
authorRoman Neuhauser <neuhauser@sigpipe.cz>
Wed, 30 Mar 2011 21:42:29 +0000 (17:42 -0400)
committerRoman Neuhauser <neuhauser@sigpipe.cz>
Wed, 30 Mar 2011 21:42:29 +0000 (17:42 -0400)
the last two calls were in __archive_read_get_bidder() and
__archive_read_register_format().  __archive_read_get_bidder()
required a change in interface (not really, but if it calls
archive_set_error(), it should return ARCHIVE_*); i added
a wrapper macro ala archive_check_magic() to keep it DRY.

some but not all archive_read_support_compression_*() functions
called archive_clear_error() right after __archive_read_get_bidder.
the reason isn't clear to me and no tests break without these
calls, so i've removed them.

SVN-Revision: 3132

libarchive/archive_read.c
libarchive/archive_read_private.h
libarchive/archive_read_support_filter_bzip2.c
libarchive/archive_read_support_filter_compress.c
libarchive/archive_read_support_filter_gzip.c
libarchive/archive_read_support_filter_program.c
libarchive/archive_read_support_filter_rpm.c
libarchive/archive_read_support_filter_uu.c
libarchive/archive_read_support_filter_xz.c

index 446821aff2f60436241d304ee747f07f54f2dc65..ebfc528768ae49c1ccdcbee88f79e4a20bf71bd5 100644 (file)
@@ -838,16 +838,18 @@ __archive_read_register_format(struct archive_read *a,
                }
        }
 
-       __archive_errx(1, "Not enough slots for format registration");
-       return (ARCHIVE_FATAL); /* Never actually called. */
+       archive_set_error(&a->archive, ENOMEM,
+           "Not enough slots for format registration");
+       return (ARCHIVE_FATAL);
 }
 
 /*
  * Used internally by decompression routines to register their bid and
  * initialization functions.
  */
-struct archive_read_filter_bidder *
-__archive_read_get_bidder(struct archive_read *a)
+int
+__archive_read_get_bidder(struct archive_read *a,
+    struct archive_read_filter_bidder **bidder)
 {
        int i, number_slots;
 
@@ -856,12 +858,14 @@ __archive_read_get_bidder(struct archive_read *a)
        for (i = 0; i < number_slots; i++) {
                if (a->bidders[i].bid == NULL) {
                        memset(a->bidders + i, 0, sizeof(a->bidders[0]));
-                       return (a->bidders + i);
+                       *bidder = (a->bidders + i);
+                       return (ARCHIVE_OK);
                }
        }
 
-       __archive_errx(1, "Not enough slots for compression registration");
-       return (NULL); /* Never actually executed. */
+       archive_set_error(&a->archive, ENOMEM,
+           "Not enough slots for filter registration");
+       return (ARCHIVE_FATAL);
 }
 
 /*
index 4318387dfe23cd6e25ff0bf39e4d722f08f3d42a..b1a71d79b9c1eeda150208d91125485076f3a70f 100644 (file)
@@ -190,8 +190,17 @@ int        __archive_read_register_format(struct archive_read *a,
            int (*read_data_skip)(struct archive_read *),
            int (*cleanup)(struct archive_read *));
 
-struct archive_read_filter_bidder
-       *__archive_read_get_bidder(struct archive_read *a);
+int __archive_read_get_bidder(struct archive_read *a,
+    struct archive_read_filter_bidder **bidder);
+
+#define archive_read_get_bidder(__a, __b) \
+       do { \
+               int r = __archive_read_get_bidder(__a, &(__b)); \
+               if (r != ARCHIVE_OK) \
+                       return (r); \
+               if ((__b) == NULL) \
+                       return (ARCHIVE_FATAL); \
+       } while (0)
 
 const void *__archive_read_ahead(struct archive_read *, size_t, ssize_t *);
 const void *__archive_read_filter_ahead(struct archive_read_filter *,
index 6a068469b0821ff9bb24c5aa79945bba6fafecbc..d1bab5a79147ba3e2f6f9da32089f0d35b4dc58d 100644 (file)
@@ -86,10 +86,9 @@ int
 archive_read_support_compression_bzip2(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *reader = __archive_read_get_bidder(a);
+       struct archive_read_filter_bidder *reader;
 
-       if (reader == NULL)
-               return (ARCHIVE_FATAL);
+       archive_read_get_bidder(a, reader);
 
        reader->data = NULL;
        reader->bid = bzip2_reader_bid;
index 902912d143b65dff986ab41c30772f26f566c8b6..359f66db9ef0ca4a07409780be3327b2f9d55423 100644 (file)
@@ -155,10 +155,9 @@ int
 archive_read_support_compression_compress(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder = __archive_read_get_bidder(a);
+       struct archive_read_filter_bidder *bidder;
 
-       if (bidder == NULL)
-               return (ARCHIVE_FATAL);
+       archive_read_get_bidder(a, bidder);
 
        bidder->data = NULL;
        bidder->bid = compress_bidder_bid;
index 74af48200992daaaee0cad58303ce1aaf54852a7..c6c63a9fe4ef0b073ddbbef8708a880336f55577 100644 (file)
@@ -92,10 +92,9 @@ int
 archive_read_support_compression_gzip(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder = __archive_read_get_bidder(a);
+       struct archive_read_filter_bidder *bidder;
 
-       if (bidder == NULL)
-               return (ARCHIVE_FATAL);
+       archive_read_get_bidder(a, bidder);
 
        bidder->data = NULL;
        bidder->bid = gzip_bidder_bid;
index a7799726443ccddc545f3862acf9581bb22645c5..03eb0d318927c6374c25711a7de330cdac043f15 100644 (file)
@@ -164,9 +164,7 @@ archive_read_support_compression_program_signature(struct archive *_a,
        /*
         * Get a bidder object from the read core.
         */
-       bidder = __archive_read_get_bidder(a);
-       if (bidder == NULL)
-               return (ARCHIVE_FATAL);
+       archive_read_get_bidder(a, bidder);
 
        /*
         * Allocate our private state.
index ddbde5c904f2a5a4f50db1c54461e8bdaa33e09d..f2ca0506d2af686dc25a42f08f0d45f08df06d72 100644 (file)
@@ -79,10 +79,7 @@ archive_read_support_compression_rpm(struct archive *_a)
        struct archive_read *a = (struct archive_read *)_a;
        struct archive_read_filter_bidder *bidder;
 
-       bidder = __archive_read_get_bidder(a);
-       archive_clear_error(_a);
-       if (bidder == NULL)
-               return (ARCHIVE_FATAL);
+       archive_read_get_bidder(a, bidder);
 
        bidder->data = NULL;
        bidder->bid = rpm_bidder_bid;
index a8babc40bbc806726d7d0da7075542696e35497c..567b306b8e56dfecca11fdb133bb06d611aca0f1 100644 (file)
@@ -79,10 +79,7 @@ archive_read_support_compression_uu(struct archive *_a)
        struct archive_read *a = (struct archive_read *)_a;
        struct archive_read_filter_bidder *bidder;
 
-       bidder = __archive_read_get_bidder(a);
-       archive_clear_error(_a);
-       if (bidder == NULL)
-               return (ARCHIVE_FATAL);
+       archive_read_get_bidder(a, bidder);
 
        bidder->data = NULL;
        bidder->bid = uudecode_bidder_bid;
index df53cb391913e8bf4c40034ed164e36c20c9c06a..3b4147ea58dc28c47a149fd3949355253b7595b7 100644 (file)
@@ -128,11 +128,9 @@ int
 archive_read_support_compression_xz(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder = __archive_read_get_bidder(a);
+       struct archive_read_filter_bidder *bidder;
 
-       archive_clear_error(_a);
-       if (bidder == NULL)
-               return (ARCHIVE_FATAL);
+       archive_read_get_bidder(a, bidder);
 
        bidder->data = NULL;
        bidder->bid = xz_bidder_bid;
@@ -162,11 +160,9 @@ int
 archive_read_support_compression_lzma(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder = __archive_read_get_bidder(a);
+       struct archive_read_filter_bidder *bidder;
 
-       archive_clear_error(_a);
-       if (bidder == NULL)
-               return (ARCHIVE_FATAL);
+       archive_read_get_bidder(a, bidder);
 
        bidder->data = NULL;
        bidder->bid = lzma_bidder_bid;
@@ -198,11 +194,9 @@ int
 archive_read_support_compression_lzip(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder = __archive_read_get_bidder(a);
+       struct archive_read_filter_bidder *bidder;
 
-       archive_clear_error(_a);
-       if (bidder == NULL)
-               return (ARCHIVE_FATAL);
+       archive_read_get_bidder(a, bidder);
 
        bidder->data = NULL;
        bidder->bid = lzip_bidder_bid;