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>
This commit is contained in:
Emil Velikov committed 2021-10-23 19:26:23 +01:00
1 parent 99868f6530
commit 7f3f47cba7
1 file changed
+13 -15
+13 -15
View File
@@ -236,24 +236,29 @@ 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;
}
return (r);
}
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)
{
@@ -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);
}
}