From: Michael Tremer Date: Tue, 27 Apr 2021 11:50:25 +0000 (+0000) Subject: package: Cache nevra in package object X-Git-Tag: 0.9.28~1285^2~220 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=40fcf5ff88e4a5ba9adf829ec57d87359e30de38;p=pakfire.git package: Cache nevra in package object Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index 77bbba0ca..28102909b 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -770,7 +770,7 @@ PAKFIRE_EXPORT char* pakfire_archive_extraction_path(PakfireArchive archive, con if (pakfire_package_is_source(pkg) && !target) target = "/usr/src/packages"; - char* nevra = pakfire_package_get_nevra(pkg); + const char* nevra = pakfire_package_get_nevra(pkg); // Append package name and version to path int r = pakfire_path_join(prefix, target, nevra); @@ -778,7 +778,6 @@ PAKFIRE_EXPORT char* pakfire_archive_extraction_path(PakfireArchive archive, con // Cleanup pakfire_package_unref(pkg); pakfire_repo_unref(repo); - free(nevra); if (r < 0) return NULL; @@ -1380,10 +1379,9 @@ PAKFIRE_EXPORT PakfirePackage pakfire_archive_make_package(PakfireArchive archiv free(arch); #ifdef ENABLE_DEBUG - char* nevra = pakfire_package_get_nevra(pkg); + const char* nevra = pakfire_package_get_nevra(pkg); DEBUG(archive->pakfire, "Created package %s (%p) from archive %p\n", nevra, pkg, archive); - free(nevra); #endif // Set path diff --git a/src/libpakfire/include/pakfire/package.h b/src/libpakfire/include/pakfire/package.h index 671ba8ec2..6d8cbc8c2 100644 --- a/src/libpakfire/include/pakfire/package.h +++ b/src/libpakfire/include/pakfire/package.h @@ -39,7 +39,7 @@ int pakfire_package_identical(PakfirePackage pkg1, PakfirePackage pkg2); int pakfire_package_cmp(PakfirePackage pkg1, PakfirePackage pkg2); int pakfire_package_evr_cmp(PakfirePackage pkg1, PakfirePackage pkg2); -char* pakfire_package_get_nevra(PakfirePackage pkg); +const char* pakfire_package_get_nevra(PakfirePackage pkg); const char* pakfire_package_get_name(PakfirePackage pkg); void pakfire_package_set_name(PakfirePackage pkg, const char* name); const char* pakfire_package_get_evr(PakfirePackage pkg); diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index f20aaf034..28d6dddb5 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -51,6 +51,8 @@ struct _PakfirePackage { Id id; PakfireRepo repo; + char nevra[NAME_MAX]; + char filename[NAME_MAX]; char path[PATH_MAX]; }; @@ -190,13 +192,15 @@ Id pakfire_package_id(PakfirePackage pkg) { return pkg->id; } -PAKFIRE_EXPORT char* pakfire_package_get_nevra(PakfirePackage pkg) { - Pool* pool = pakfire_get_solv_pool(pkg->pakfire); - Solvable* s = get_solvable(pkg); +PAKFIRE_EXPORT const char* pakfire_package_get_nevra(PakfirePackage pkg) { + if (!*pkg->nevra) { + Pool* pool = pakfire_get_solv_pool(pkg->pakfire); + Solvable* s = get_solvable(pkg); - const char* nevra = pool_solvable2str(pool, s); + pakfire_string_set(pkg->nevra, pool_solvable2str(pool, s)); + } - return strdup(nevra); + return pkg->nevra; } PAKFIRE_EXPORT const char* pakfire_package_get_name(PakfirePackage pkg) { diff --git a/src/libpakfire/step.c b/src/libpakfire/step.c index e9a69a905..764ca040e 100644 --- a/src/libpakfire/step.c +++ b/src/libpakfire/step.c @@ -200,10 +200,9 @@ static int pakfire_step_verify(PakfireStep step) { // Fetch the archive step->archive = pakfire_package_get_archive(step->package); if (!step->archive) { - char* nevra = pakfire_package_get_nevra(step->package); + const char* nevra = pakfire_package_get_nevra(step->package); ERROR(step->pakfire, "Could not open package archive for %s: %s\n", nevra, strerror(errno)); - free(nevra); return -1; } @@ -294,9 +293,8 @@ static int pakfire_step_extract(PakfireStep step) { // Extract payload to the root of the Pakfire instance int r = pakfire_archive_extract(step->archive, NULL); if (r) { - char* nevra = pakfire_package_get_nevra(step->package); + const char* nevra = pakfire_package_get_nevra(step->package); ERROR(step->pakfire, "Could not extract package %s: %d\n", nevra, r); - free(nevra); } // Is it necessary to call ldconfig?