}
}
- __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;
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);
}
/*
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 *,
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;
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;
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;
/*
* 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.
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;
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;
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;
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;
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;