creates the filter object, it should also free it. This
also corrects a small memory leak in
archive_read_support_compression_program.
SVN-Revision: 393
/* Clean up the filter pipeline. */
while (a->filter != NULL) {
struct archive_read_filter *t = a->filter->upstream;
- r1 = (a->filter->close)(a->filter);
- if (r1 < r)
- r = r1;
+ if (a->filter->close != NULL) {
+ r1 = (a->filter->close)(a->filter);
+ if (r1 < r)
+ r = r1;
+ }
+ free(a->filter->buffer);
+ free(a->filter);
a->filter = t;
}
free(state->out_block);
free(state);
- free(self);
return (ARCHIVE_OK);
}
free(state->out_block);
free(state);
- free(self);
return (ARCHIVE_OK);
}
free(state->out_block);
free(state);
- free(self);
return (ret);
}
static int
program_bidder_free(struct archive_read_filter_bidder *self)
{
+ struct program_bidder *state = (struct program_bidder *)self->data;
+ free(state->cmd);
free(self->data);
return (ARCHIVE_OK);
}