static int pakfire_archive_walk(PakfireArchive archive,
int (*callback)(PakfireArchive archive, struct archive* a, struct archive_entry* e, const char* pathname)) {
+ struct archive* a;
struct archive_entry* e;
- int r = 0;
// Open the archive file
- struct archive* a;
- r = archive_open(archive, &a);
+ int r = archive_open(archive, &a);
if (r)
return r;
// Walk through the archive
- int ret;
- while ((ret = archive_read_next_header(a, &e)) == ARCHIVE_OK) {
+ while (1) {
+ r = archive_read_next_header(a, &e);
+ if (r)
+ break;
+
+ // Fetch the filename
const char* pathname = archive_entry_pathname(e);
+ // Run callback
r = callback(archive, a, e, pathname);
if (r)
break;
}
- // Close the archive again
+ // Close the archive
archive_read_free(a);
return r;