From: Michael Tremer Date: Mon, 12 Jul 2021 10:39:21 +0000 (+0000) Subject: archive: Refactor find_archive_entry X-Git-Tag: 0.9.28~1047 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a2f6c78cf0a7aae319ee7df1a4110fa6fc2aaf0;p=pakfire.git archive: Refactor find_archive_entry Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index e5b61468c..df35160fb 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -175,17 +175,30 @@ static int pakfire_archive_walk(struct pakfire_archive* archive, return r; } -static int find_archive_entry(struct archive_entry** entry, struct archive* a, const char* filename) { - int r; +static int find_archive_entry(struct pakfire_archive* archive, struct archive_entry** entry, + struct archive* a, const char* filename) { + while (1) { + int r = archive_read_next_header(a, entry); + + // Nothing found + if (r == ARCHIVE_EOF) { + break; - while ((r = archive_read_next_header(a, entry)) == ARCHIVE_OK) { + // Some error has occured + } else if (r) + return r; + + // Compare the name const char* entry_name = archive_entry_pathname(*entry); - if (strcmp(entry_name, filename) == 0) { + // Match? + if (strcmp(entry_name, filename) == 0) return 0; - } } + ERROR(archive->pakfire, "Could not find an entry named '%s'\n", filename); + + // Nothing found *entry = NULL; return 1; } @@ -199,7 +212,7 @@ static int open_archive_and_find(struct pakfire_archive* archive, struct archive if (r) return r; - r = find_archive_entry(entry, *a, filename); + r = find_archive_entry(archive, entry, *a, filename); // Close archive on error if (r) @@ -776,7 +789,7 @@ PAKFIRE_EXPORT int pakfire_archive_read(struct pakfire_archive* archive, const c if (!payload) goto ERROR; - int r = find_archive_entry(&entry, payload, filename); + int r = find_archive_entry(archive, &entry, payload, filename); if (r) goto ERROR;