From: Michael Tremer Date: Fri, 20 Aug 2021 10:29:57 +0000 (+0000) Subject: archive: Make pakfire_archive_make_package return int X-Git-Tag: 0.9.28~984 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b31767bd2ef2c451ffc4062c6597e98b2686a5f4;p=pakfire.git archive: Make pakfire_archive_make_package return int Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/archive.c b/src/_pakfire/archive.c index 50d2872b9..0418fc5af 100644 --- a/src/_pakfire/archive.c +++ b/src/_pakfire/archive.c @@ -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); diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index a4cef2bb0..b01c4df78 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -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, diff --git a/src/libpakfire/include/pakfire/archive.h b/src/libpakfire/include/pakfire/archive.h index 93255a547..e1ad89201 100644 --- a/src/libpakfire/include/pakfire/archive.h +++ b/src/libpakfire/include/pakfire/archive.h @@ -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 diff --git a/src/libpakfire/repo.c b/src/libpakfire/repo.c index 2a5b52470..fa46606fb 100644 --- a/src/libpakfire/repo.c +++ b/src/libpakfire/repo.c @@ -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;