From: Roman Neuhauser Date: Wed, 30 Mar 2011 21:42:29 +0000 (-0400) Subject: archive_read.c: s/__archive_errx/archive_set_error/ X-Git-Tag: v3.0.0a~549 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5efdaa4bd2f25e789066c6182b58fb3d1e56ffa;p=thirdparty%2Flibarchive.git archive_read.c: s/__archive_errx/archive_set_error/ 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 --- diff --git a/libarchive/archive_read.c b/libarchive/archive_read.c index 446821aff..ebfc52876 100644 --- a/libarchive/archive_read.c +++ b/libarchive/archive_read.c @@ -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); } /* diff --git a/libarchive/archive_read_private.h b/libarchive/archive_read_private.h index 4318387df..b1a71d79b 100644 --- a/libarchive/archive_read_private.h +++ b/libarchive/archive_read_private.h @@ -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 *, diff --git a/libarchive/archive_read_support_filter_bzip2.c b/libarchive/archive_read_support_filter_bzip2.c index 6a068469b..d1bab5a79 100644 --- a/libarchive/archive_read_support_filter_bzip2.c +++ b/libarchive/archive_read_support_filter_bzip2.c @@ -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; diff --git a/libarchive/archive_read_support_filter_compress.c b/libarchive/archive_read_support_filter_compress.c index 902912d14..359f66db9 100644 --- a/libarchive/archive_read_support_filter_compress.c +++ b/libarchive/archive_read_support_filter_compress.c @@ -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; diff --git a/libarchive/archive_read_support_filter_gzip.c b/libarchive/archive_read_support_filter_gzip.c index 74af48200..c6c63a9fe 100644 --- a/libarchive/archive_read_support_filter_gzip.c +++ b/libarchive/archive_read_support_filter_gzip.c @@ -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; diff --git a/libarchive/archive_read_support_filter_program.c b/libarchive/archive_read_support_filter_program.c index a77997264..03eb0d318 100644 --- a/libarchive/archive_read_support_filter_program.c +++ b/libarchive/archive_read_support_filter_program.c @@ -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. diff --git a/libarchive/archive_read_support_filter_rpm.c b/libarchive/archive_read_support_filter_rpm.c index ddbde5c90..f2ca0506d 100644 --- a/libarchive/archive_read_support_filter_rpm.c +++ b/libarchive/archive_read_support_filter_rpm.c @@ -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; diff --git a/libarchive/archive_read_support_filter_uu.c b/libarchive/archive_read_support_filter_uu.c index a8babc40b..567b306b8 100644 --- a/libarchive/archive_read_support_filter_uu.c +++ b/libarchive/archive_read_support_filter_uu.c @@ -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; diff --git a/libarchive/archive_read_support_filter_xz.c b/libarchive/archive_read_support_filter_xz.c index df53cb391..3b4147ea5 100644 --- a/libarchive/archive_read_support_filter_xz.c +++ b/libarchive/archive_read_support_filter_xz.c @@ -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;