]> git.ipfire.org Git - pakfire.git/commitdiff
archive: Make pakfire_archive_make_package return int
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 Aug 2021 10:29:57 +0000 (10:29 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 Aug 2021 10:29:57 +0000 (10:29 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/archive.c
src/libpakfire/archive.c
src/libpakfire/include/pakfire/archive.h
src/libpakfire/repo.c

index 50d2872b9c83db1e03fe34fb50cf6a0709f2af9b..0418fc5af979b43e520a0b1e2dc9c864abeba964 100644 (file)
@@ -166,14 +166,20 @@ static PyObject* Archive_get_package(ArchiveObject* self) {
        if (!repo)
                return NULL;
 
+       struct pakfire_package* package = NULL;
+
        // Make the package
-       struct pakfire_package* pkg = pakfire_archive_make_package(self->archive, repo);
+       int r = pakfire_archive_make_package(self->archive, repo, &package);
+       if (r) {
+               PyErr_SetFromErrno(PyExc_OSError);
+               return NULL;
+       }
 
        // Make the Python object
-       PyObject* ret = new_package(&PackageType, pkg);
+       PyObject* ret = new_package(&PackageType, package);
 
        // Cleanup
-       pakfire_package_unref(pkg);
+       pakfire_package_unref(package);
        pakfire_repo_unref(repo);
        pakfire_unref(pakfire);
 
index a4cef2bb09c7c2b98623ff03173b605007f8fdc6..b01c4df78642adbc9ec9af8b8f964b6beeae4dc6 100644 (file)
@@ -477,10 +477,10 @@ static struct pakfire_package* pakfire_archive_get_package(struct pakfire_archiv
                if (!repo)
                        return NULL;
 
-               archive->package = pakfire_archive_make_package(archive, repo);
+               int r = pakfire_archive_make_package(archive, repo, &archive->package);
                pakfire_repo_unref(repo);
 
-               if (!archive->package)
+               if (!r)
                        return NULL;
        }
 
@@ -1838,7 +1838,8 @@ PAKFIRE_EXPORT size_t pakfire_archive_get_size(struct pakfire_archive* archive)
 /*
        Copy all metadata from this archive to the package object
 */
-PAKFIRE_EXPORT struct pakfire_package* pakfire_archive_make_package(struct pakfire_archive* archive, struct pakfire_repo* repo) {
+PAKFIRE_EXPORT int pakfire_archive_make_package(struct pakfire_archive* archive,
+               struct pakfire_repo* repo, struct pakfire_package** package) {
        char* name = pakfire_archive_get(archive, "package", "name");
        char* arch = pakfire_archive_get(archive, "package", "arch");
 
@@ -2016,7 +2017,9 @@ PAKFIRE_EXPORT struct pakfire_package* pakfire_archive_make_package(struct pakfi
                pakfire_filelist_unref(filelist);
        }
 
-       return pkg;
+       *package = pkg;
+
+       return 0;
 }
 
 static int pakfire_archive_load_scriptlet(struct pakfire_archive* archive,
index 93255a547071644e531f58e0e3b7df0515be872b..e1ad89201cedc66afdd3732f0cddea6b9630b935 100644 (file)
@@ -65,8 +65,8 @@ const char* pakfire_archive_verify_strerror(pakfire_archive_verify_status_t stat
 int pakfire_archive_sign(struct pakfire_archive* archive, struct pakfire_key* key);
 
 size_t pakfire_archive_get_size(struct pakfire_archive* archive);
-struct pakfire_package* pakfire_archive_make_package(
-       struct pakfire_archive* archive, struct pakfire_repo* repo);
+int pakfire_archive_make_package(struct pakfire_archive* archive,
+       struct pakfire_repo* repo, struct pakfire_package** package);
 
 #ifdef PAKFIRE_PRIVATE
 
index 2a5b524709913d36dcbb4fa2ed35cc662e1318a6..fa46606fbb092bc842a238fb13a07af18b2626f8 100644 (file)
@@ -226,15 +226,7 @@ Id pakfire_repo_add_solvable(struct pakfire_repo* repo) {
 
 int pakfire_repo_add_archive(struct pakfire_repo* repo,
                struct pakfire_archive* archive, struct pakfire_package** package) {
-       struct pakfire_package* p = pakfire_archive_make_package(archive, repo);
-
-       if (package)
-               *package = p;
-
-       if (p)
-               return 0;
-
-       return 1;
+       return pakfire_archive_make_package(archive, repo, package);
 }
 
 struct pakfire_mirrorlist* pakfire_repo_get_mirrorlist(struct pakfire_repo* repo) {
@@ -885,19 +877,22 @@ PAKFIRE_EXPORT int pakfire_repo_clean(struct pakfire_repo* repo, int flags) {
 static int pakfire_repo_scan_file(struct pakfire_repo* repo, const char* path) {
        DEBUG(repo->pakfire, "Scanning %s...\n", path);
 
-       struct pakfire_archive* archive;
+       struct pakfire_archive* archive = NULL;
+       struct pakfire_package* package = NULL;
+
+       // Open archive
        int r = pakfire_archive_open(&archive, repo->pakfire, path);
        if (r)
                return r;
 
        // Import package into the repository
-       struct pakfire_package* pkg = pakfire_archive_make_package(archive, repo);
-       if (!pkg) {
+       r = pakfire_archive_make_package(archive, repo, &package);
+       if (r) {
                pakfire_archive_unref(archive);
-               return errno;
+               return r;
        }
 
-       pakfire_package_unref(pkg);
+       pakfire_package_unref(package);
        pakfire_archive_unref(archive);
 
        return 0;