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;
}
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)
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;