/* If no bidder, we're done. */
if (best_bidder == NULL) {
+ /* Verify the filter by asking it for some data. */
+ __archive_read_filter_ahead(a->filter, 1, &avail);
+ if (avail < 0) {
+ close_filters(a);
+ free_filters(a);
+ return (ARCHIVE_FATAL);
+ }
a->archive.compression_name = a->filter->name;
a->archive.compression_code = a->filter->code;
return (ARCHIVE_OK);
filter->bidder = best_bidder;
filter->archive = a;
filter->upstream = a->filter;
- r = (best_bidder->init)(filter);
- if (r != ARCHIVE_OK) {
- free(filter);
- return (r);
- }
a->filter = filter;
- /* Verify the filter by asking it for some data. */
- __archive_read_filter_ahead(filter, 1, &avail);
- if (avail < 0) {
+ r = (best_bidder->init)(a->filter);
+ if (r != ARCHIVE_OK) {
close_filters(a);
free_filters(a);
return (ARCHIVE_FATAL);
if (a->archive.state == ARCHIVE_STATE_DATA) {
ret = archive_read_data_skip(&a->archive);
if (ret == ARCHIVE_EOF) {
- archive_set_error(&a->archive, EIO, "Premature end-of-file.");
+ archive_set_error(&a->archive, EIO,
+ "Premature end-of-file.");
a->archive.state = ARCHIVE_STATE_FATAL;
return (ARCHIVE_FATAL);
}