struct archive_none *state;
void *buffer;
size_t buffer_size;
- int ret;
f->bytes_per_block = archive_write_get_bytes_per_block(f->archive);
f->bytes_in_last_block =
if (a->client_opener == NULL)
return (ARCHIVE_OK);
- ret = a->client_opener(f->archive, a->client_data);
- if (ret != ARCHIVE_OK) {
- free(state->buffer);
- free(state);
- f->data = NULL;
- }
- return (ret);
+ return (a->client_opener(f->archive, a->client_data));
}
static int
archive_write_client_free(struct archive_write_filter *f)
{
struct archive_write *a = (struct archive_write *)f->archive;
+ struct archive_none *state = (struct archive_none *)f->data;
if (a->client_freer)
(*a->client_freer)(&a->archive, a->client_data);
a->passphrase = NULL;
}
+ /* Free state. */
+ if (state != NULL) {
+ free(state->buffer);
+ free(state);
+ f->data = NULL;
+ }
+
return (ARCHIVE_OK);
}
}
if (a->client_closer)
(*a->client_closer)(&a->archive, a->client_data);
- free(state->buffer);
- free(state);
/* Clear the close handler myself not to be called again. */
f->state = ARCHIVE_WRITE_FILTER_STATE_CLOSED;