diff options
author | Emil Velikov <emil.l.velikov@gmail.com> | 2020-03-14 21:29:25 +0000 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2021-10-23 19:26:23 +0100 |
commit | 7f3f47cba79721604290b4cc515aaac3f3f558fa (patch) | |
tree | b24274726a2309b0239e4b4cdcdc71ba6fc96b73 /libarchive/archive_read.c | |
parent | 99868f65300f44e550b58c9e7acecadfabb6632b (diff) | |
download | libarchive-7f3f47cba79721604290b4cc515aaac3f3f558fa.tar.gz |
reader: reuse client_{open,close}_proxy more
Currently we have open-coded versions. Replace them with the respective
functions.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Diffstat (limited to 'libarchive/archive_read.c')
-rw-r--r-- | libarchive/archive_read.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/libarchive/archive_read.c b/libarchive/archive_read.c index 1f95165f..23526057 100644 --- a/libarchive/archive_read.c +++ b/libarchive/archive_read.c @@ -236,18 +236,17 @@ client_seek_proxy(struct archive_read_filter *self, int64_t offset, int whence) } static int -client_close_proxy(struct archive_read_filter *self) +read_client_close_proxy(struct archive_read *a) { int r = ARCHIVE_OK, r2; unsigned int i; - if (self->archive->client.closer == NULL) + if (a->client.closer == NULL) return (r); - for (i = 0; i < self->archive->client.nodes; i++) + for (i = 0; i < a->client.nodes; i++) { - r2 = (self->archive->client.closer) - ((struct archive *)self->archive, - self->archive->client.dataset[i].data); + r2 = (a->client.closer) + ((struct archive *)a, a->client.dataset[i].data); if (r > r2) r = r2; } @@ -255,6 +254,12 @@ client_close_proxy(struct archive_read_filter *self) } static int +client_close_proxy(struct archive_read_filter *self) +{ + return read_client_close_proxy(self->archive); +} + +static int client_open_proxy(struct archive_read_filter *self) { int r = ARCHIVE_OK; @@ -289,9 +294,7 @@ client_switch_proxy(struct archive_read_filter *self, unsigned int iindex) r1 = (self->archive->client.closer) ((struct archive *)self->archive, self->data); self->data = data2; - if (self->archive->client.opener != NULL) - r2 = (self->archive->client.opener) - ((struct archive *)self->archive, self->data); + r2 = client_open_proxy(self); } return (r1 < r2) ? r1 : r2; } @@ -454,7 +457,6 @@ archive_read_open1(struct archive *_a) struct archive_read *a = (struct archive_read *)_a; struct archive_read_filter *filter, *tmp; int slot, e = ARCHIVE_OK; - unsigned int i; archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW, "archive_read_open"); @@ -472,11 +474,7 @@ archive_read_open1(struct archive *_a) e = (a->client.opener)(&a->archive, a->client.dataset[0].data); if (e != 0) { /* If the open failed, call the closer to clean up. */ - if (a->client.closer) { - for (i = 0; i < a->client.nodes; i++) - (a->client.closer)(&a->archive, - a->client.dataset[i].data); - } + read_client_close_proxy(a); return (e); } } |