]> git.ipfire.org Git - pakfire.git/commitdiff
archive: Minor code cleanups
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 20 Oct 2024 10:19:22 +0000 (10:19 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 20 Oct 2024 10:19:22 +0000 (10:19 +0000)
No functional changes.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c

index 8e40b48092ccc986fd5cf17073d68c52ca0f2003..36c27a063ac7887ff7993b1bc0c7c945586908ff 100644 (file)
@@ -119,14 +119,6 @@ static int pakfire_archive_compute_digests(struct pakfire_archive* archive) {
        return r;
 }
 
-/*
-       A helper function to close the archive and reset our data structures
-*/
-static void close_archive(struct pakfire_archive* archive, struct archive* a) {
-       if (a)
-               archive_read_free(a);
-}
-
 /*
        A helper function that opens the archive for reading
 */
@@ -158,7 +150,8 @@ static struct archive* open_archive(struct pakfire_archive* archive, FILE* f) {
        return a;
 
 ERROR:
-       close_archive(archive, a);
+       if (a)
+               archive_read_free(a);
 
        return NULL;
 }
@@ -177,7 +170,7 @@ static int pakfire_archive_walk(struct pakfire_archive* archive,
 
        // Close the archive
        if (a)
-               close_archive(archive, a);
+               archive_read_free(a);
 
        return r;
 }
@@ -204,21 +197,6 @@ static void pakfire_archive_free(struct pakfire_archive* archive) {
        free(archive);
 }
 
-static int pakfire_archive_create(struct pakfire_archive** archive, struct pakfire* pakfire) {
-       struct pakfire_archive* a = calloc(1, sizeof(*a));
-       if (!a)
-               return ENOMEM;
-
-       // Store a reference to the context
-       a->ctx = pakfire_ctx(pakfire);
-
-       a->pakfire = pakfire_ref(pakfire);
-       a->nrefs = 1;
-
-       *archive = a;
-       return 0;
-}
-
 PAKFIRE_EXPORT struct pakfire_archive* pakfire_archive_ref(struct pakfire_archive* archive) {
        ++archive->nrefs;
 
@@ -481,19 +459,10 @@ static int pakfire_archive_read_metadata(struct pakfire_archive* archive) {
        return 0;
 }
 
-static int pakfire_archive_try_open(struct pakfire_archive* archive, const char* path) {
+static int pakfire_archive_try_open(struct pakfire_archive* archive) {
        int r;
 
-       // Check inputs
-       if (!path)
-               return -EINVAL;
-
-       CTX_DEBUG(archive->ctx, "Opening archive %s\n", path);
-
-       // Store path
-       r = pakfire_string_set(archive->path, path);
-       if (r < 0)
-               return r;
+       CTX_DEBUG(archive->ctx, "Opening archive %s\n", archive->path);
 
        // Open the file (and keep the file descriptor open)
        archive->f = fopen(archive->path, "r");
@@ -509,31 +478,48 @@ static int pakfire_archive_try_open(struct pakfire_archive* archive, const char*
        r = fstat(fileno(archive->f), &archive->stat);
        if (r) {
                CTX_ERROR(archive->ctx, "Could not stat archive: %m\n");
-               return r;
+               return -errno;
        }
 
        // Read all package metadata
-       r = pakfire_archive_read_metadata(archive);
-       if (r < 0)
-               return r;
-
-       return 0;
+       return pakfire_archive_read_metadata(archive);
 }
 
-PAKFIRE_EXPORT int pakfire_archive_open(struct pakfire_archive** archive, struct pakfire* pakfire, const char* path) {
-       int r = pakfire_archive_create(archive, pakfire);
-       if (r)
+PAKFIRE_EXPORT int pakfire_archive_open(struct pakfire_archive** archive,
+               struct pakfire* pakfire, const char* path) {
+       struct pakfire_archive* a = NULL;
+       int r;
+
+       // Allocate a new object
+       a = calloc(1, sizeof(*a));
+       if (!a)
+               return -errno;
+
+       // Store a reference to the context
+       a->ctx = pakfire_ctx(pakfire);
+
+       // Store a reference to pakfire
+       a->pakfire = pakfire_ref(pakfire);
+
+       // Initialize the reference counter
+       a->nrefs = 1;
+
+       // Store path
+       r = pakfire_string_set(a->path, path);
+       if (r < 0)
                return r;
 
-       r = pakfire_archive_try_open(*archive, path);
-       if (r)
+       // Try to open the archive
+       r = pakfire_archive_try_open(a);
+       if (r < 0)
                goto ERROR;
 
-       return 0;
+       // Return the pointer
+       *archive = pakfire_archive_ref(a);
 
 ERROR:
-       pakfire_archive_unref(*archive);
-       *archive = NULL;
+       if (a)
+               pakfire_archive_unref(a);
 
        return r;
 }
@@ -960,7 +946,7 @@ ERROR:
        if (pkg)
                pakfire_package_unref(pkg);
        if (a)
-               close_archive(archive, a);
+               archive_read_free(a);
 
        return r;
 }