From: Michael Tremer Date: Tue, 20 Apr 2021 13:04:24 +0000 (+0000) Subject: Run ldconfig only when we have extracted .so files X-Git-Tag: 0.9.28~1285^2~296 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4140a92389f466c4e808a92ce6674f7ebe6f7fa5;p=pakfire.git Run ldconfig only when we have extracted .so files Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index d36166452..43192c296 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -931,7 +931,15 @@ PAKFIRE_EXPORT unsigned int pakfire_archive_get_format(PakfireArchive archive) { } PAKFIRE_EXPORT PakfireFilelist pakfire_archive_get_filelist(PakfireArchive archive) { - return archive->filelist; +#if 0 + if (!archive->filelist) { + int r = pakfire_archive_load_filelist(archive); + if (r) + return NULL; + } +#endif + + return pakfire_filelist_ref(archive->filelist); } PAKFIRE_EXPORT const char* pakfire_archive_signature_get_data(PakfireArchiveSignature signature) { diff --git a/src/libpakfire/filelist.c b/src/libpakfire/filelist.c index 2951d85de..39069c1f9 100644 --- a/src/libpakfire/filelist.c +++ b/src/libpakfire/filelist.c @@ -301,3 +301,24 @@ ERROR: return r; } + +int pakfire_filelist_contains(PakfireFilelist list, const char* pattern) { + if (!pattern) { + errno = EINVAL; + return -1; + } + + for (unsigned int i = 0; i < list->size; i++) { + PakfireFile file = list->elements[i]; + + const char* path = pakfire_file_get_path(file); + if (!path) + return -1; + + int r = fnmatch(pattern, path, 0); + if (r == 0) + return 1; + } + + return 0; +} diff --git a/src/libpakfire/include/pakfire/filelist.h b/src/libpakfire/include/pakfire/filelist.h index 5d2498ff1..493c58b3a 100644 --- a/src/libpakfire/include/pakfire/filelist.h +++ b/src/libpakfire/include/pakfire/filelist.h @@ -44,6 +44,8 @@ size_t pakfire_filelist_total_filesize(PakfireFilelist list); int pakfire_filelist_scan(PakfireFilelist list, const char* root, const char** includes, const char** excludes); +int pakfire_filelist_contains(PakfireFilelist list, const char* pattern); + #endif #endif /* PAKFIRE_FILELIST_H */ diff --git a/src/libpakfire/step.c b/src/libpakfire/step.c index fad805fa6..de1c93fdc 100644 --- a/src/libpakfire/step.c +++ b/src/libpakfire/step.c @@ -300,8 +300,17 @@ static int pakfire_step_extract(PakfireStep step) { free(nevra); } - // Update the runtime linker cache - pakfire_run_ldconfig(step); + // Is it necessary to call ldconfig? + PakfireFilelist filelist = pakfire_archive_get_filelist(step->archive); + if (filelist) { + int need_ldconfig = pakfire_filelist_contains(filelist, "*/lib*.so.?"); + + // Update the runtime linker cache + if (need_ldconfig) + pakfire_run_ldconfig(step); + + pakfire_filelist_unref(filelist); + } return r; }