Skip to content

Commit 3a865df

Browse files
authored
Packages (Linux): Auto detect the DBPath directory for pacman on archlinux (#2154)
Fixes #2068
1 parent bae80e2 commit 3a865df

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

src/detection/packages/packages_linux.c

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,33 @@ static uint32_t getFlatpakPackages(FFstrbuf* baseDir, const char* dirname)
412412
return num_elements;
413413
}
414414

415+
static uint32_t getPacmanPackages(FFstrbuf* baseDir)
416+
{
417+
FF_STRBUF_AUTO_DESTROY pacmanDir = ffStrbufCreate();
418+
// Get path to pacman.conf
419+
uint32_t baseDirLen = baseDir->length;
420+
ffStrbufAppendS(baseDir, "/etc/pacman.conf");
421+
422+
// Get DBPath for packages
423+
ffParsePropFile(baseDir->chars, "DBPath =", &pacmanDir);
424+
// If DBPath is specified
425+
if (pacmanDir.length == 0) {
426+
ffParsePropFile(baseDir->chars, "RootDir =", &pacmanDir);
427+
// If DBpath is not specified and RootDir is specified
428+
if (pacmanDir.length ==0)
429+
// If both are not specified
430+
ffStrbufClear(&pacmanDir);
431+
ffStrbufTrimRight(&pacmanDir, '/');
432+
ffStrbufAppendS(&pacmanDir, "/var/lib/pacman");
433+
}
434+
ffStrbufSubstrBefore(baseDir, baseDirLen);
435+
436+
ffStrbufTrimRight(&pacmanDir, '/');
437+
ffStrbufAppendS(&pacmanDir, "/local");
438+
439+
return getNumElements(baseDir, pacmanDir.chars, true);
440+
}
441+
415442
static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts, FFPackagesOptions* options)
416443
{
417444
if (!(options->disabled & FF_PACKAGES_FLAG_APK_BIT)) packageCounts->apk += getNumStrings(baseDir, "/lib/apk/db/installed", "C:Q", "apk");
@@ -426,7 +453,7 @@ static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts,
426453
packageCounts->nixDefault += ffPackagesGetNix(baseDir, "/nix/var/nix/profiles/default");
427454
packageCounts->nixSystem += ffPackagesGetNix(baseDir, "/run/current-system");
428455
}
429-
if (!(options->disabled & FF_PACKAGES_FLAG_PACMAN_BIT)) packageCounts->pacman += getNumElements(baseDir, "/var/lib/pacman/local", true);
456+
if (!(options->disabled & FF_PACKAGES_FLAG_PACMAN_BIT)) packageCounts->pacman += getPacmanPackages(baseDir);
430457
if (!(options->disabled & FF_PACKAGES_FLAG_LPKGBUILD_BIT)) packageCounts->lpkgbuild += getNumElements(baseDir, "/opt/Loc-OS-LPKG/lpkgbuild/remove", false);
431458
if (!(options->disabled & FF_PACKAGES_FLAG_PKGTOOL_BIT)) packageCounts->pkgtool += getNumElements(baseDir, "/var/log/packages", false);
432459
if (!(options->disabled & FF_PACKAGES_FLAG_RPM_BIT))

0 commit comments

Comments
 (0)