goto ERROR;
}
- // Open the archive
-AGAIN:
- cookie->a = open_archive(archive);
- if (!cookie->a)
- goto ERROR;
+ for (;;) {
+ // Close any previously opened archives
+ if (cookie->a)
+ archive_read_free(cookie->a);
- // Walk through the archive
- r = pakfire_archive_walk(archive, cookie->a, __pakfire_archive_read,
- pakfire_archive_read_filter, cookie);
- if (r) {
+ // Open the archive
+ cookie->a = open_archive(archive);
+ if (!cookie->a)
+ goto ERROR;
+
+ // Walk through the archive
+ r = pakfire_archive_walk(archive, cookie->a,
+ __pakfire_archive_read, pakfire_archive_read_filter, cookie);
switch (-r) {
+ // Success
+ case 0:
+ break;
+
+ // We have updated the path and need to search again...
case EAGAIN:
- if (cookie->a)
- archive_read_free(cookie->a);
- goto AGAIN;
+ continue;
default:
goto ERROR;
}
- }
- // Nothing found
- if (!cookie->f) {
- CTX_ERROR(archive->ctx, "Could not find /%s\n", path);
+ // Nothing found
+ if (!cookie->f) {
+ CTX_ERROR(archive->ctx, "Could not find /%s\n", path);
- // No such file or directory
- errno = ENOENT;
- goto ERROR;
- }
+ // No such file or directory
+ errno = ENOENT;
+ goto ERROR;
+ }
- return cookie->f;
+ return cookie->f;
+ }
ERROR:
if (cookie)