From 40aa4a60d6cd8cccc979cb1d117c45b6425e5600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Fri, 8 Dec 2023 09:30:17 +0800 Subject: [PATCH] Packages: improve performance of pkg and rpm detection --- CMakeLists.txt | 2 +- src/detection/packages/packages_bsd.c | 8 ++++++++ src/detection/packages/packages_linux.c | 9 +++------ 3 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 src/detection/packages/packages_bsd.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 12807993e..16810ecee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -529,7 +529,7 @@ elseif(BSD) src/detection/netio/netio_bsd.c src/detection/opengl/opengl_linux.c src/detection/os/os_linux.c - src/detection/packages/packages_linux.c + src/detection/packages/packages_bsd.c src/detection/poweradapter/poweradapter_nosupport.c src/detection/processes/processes_bsd.c src/detection/gtk_qt/qt.c diff --git a/src/detection/packages/packages_bsd.c b/src/detection/packages/packages_bsd.c new file mode 100644 index 000000000..cb9091457 --- /dev/null +++ b/src/detection/packages/packages_bsd.c @@ -0,0 +1,8 @@ +#include "packages.h" + +#include "common/settings.h" + +void ffDetectPackagesImpl(FFPackagesResult* result, FF_MAYBE_UNUSED FFPackagesOptions* options) +{ + result->pkg = (uint32_t) ffSettingsGetSQLite3Int(FASTFETCH_TARGET_DIR_ROOT "/var/db/pkg/local.sqlite", "SELECT count(*) FROM packages"); +} diff --git a/src/detection/packages/packages_linux.c b/src/detection/packages/packages_linux.c index ef5d1162d..0b608497c 100644 --- a/src/detection/packages/packages_linux.c +++ b/src/detection/packages/packages_linux.c @@ -11,7 +11,7 @@ static uint32_t getNumElementsImpl(const char* dirname, unsigned char type) { - DIR* dirp = opendir(dirname); + FF_AUTO_CLOSE_DIR DIR* dirp = opendir(dirname); if(dirp == NULL) return 0; @@ -26,8 +26,6 @@ static uint32_t getNumElementsImpl(const char* dirname, unsigned char type) if(type == DT_DIR && num_elements >= 2) num_elements -= 2; // accounting for . and .. - closedir(dirp); - return num_elements; } @@ -265,9 +263,8 @@ static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts) packageCounts->nixDefault += getNixPackages(baseDir, "/nix/var/nix/profiles/default"); packageCounts->nixSystem += getNixPackages(baseDir, "/run/current-system"); packageCounts->pacman += getNumElements(baseDir, "/var/lib/pacman/local", DT_DIR); - packageCounts->pkg += getSQLite3Int(baseDir, "/var/db/pkg/local.sqlite", "SELECT count(id) FROM packages"); packageCounts->pkgtool += getNumElements(baseDir, "/var/log/packages", DT_REG); - packageCounts->rpm += getSQLite3Int(baseDir, "/var/lib/rpm/rpmdb.sqlite", "SELECT count(blob) FROM Packages"); + packageCounts->rpm += getSQLite3Int(baseDir, "/var/lib/rpm/rpmdb.sqlite", "SELECT count(*) FROM Packages"); packageCounts->snap += getSnap(baseDir); packageCounts->xbps += getXBPS(baseDir, "/var/db/xbps"); packageCounts->brewCask += getNumElements(baseDir, "/home/linuxbrew/.linuxbrew/Caskroom", DT_DIR); @@ -281,7 +278,7 @@ static void getPackageCountsRegular(FFstrbuf* baseDir, FFPackagesResult* package getPackageCounts(baseDir, packageCounts); uint32_t baseDirLength = baseDir->length; - ffStrbufAppendS(baseDir, FASTFETCH_TARGET_DIR_ETC"/pacman-mirrors.conf"); + ffStrbufAppendS(baseDir, FASTFETCH_TARGET_DIR_ETC "/pacman-mirrors.conf"); if(ffParsePropFile(baseDir->chars, "Branch =", &packageCounts->pacmanBranch) && packageCounts->pacmanBranch.length == 0) ffStrbufAppendS(&packageCounts->pacmanBranch, "stable"); ffStrbufSubstrBefore(baseDir, baseDirLength);