]> git.ipfire.org Git - pakfire.git/commitdiff
archive: Refactor find_archive_entry
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 12 Jul 2021 10:39:21 +0000 (10:39 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 12 Jul 2021 10:39:21 +0000 (10:39 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c

index e5b61468c764b7ee6f2aa49067543d63a6c89c80..df35160fbe816149932b9fe3ba9e2731bdd9cb68 100644 (file)
@@ -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;