diff --git a/src/detection/packages/packages.c b/src/detection/packages/packages.c index 08d79e054..2404f74e3 100644 --- a/src/detection/packages/packages.c +++ b/src/detection/packages/packages.c @@ -1,6 +1,8 @@ #include "packages.h" #include "detection/internal.h" +#include + void ffDetectPackagesImpl(const FFinstance* instance, FFPackagesResult* result); const FFPackagesResult* ffDetectPackages(const FFinstance* instance) @@ -11,21 +13,7 @@ const FFPackagesResult* ffDetectPackages(const FFinstance* instance) ffDetectPackagesImpl(instance, &result); - result.all = 0 - + result.pacman - + result.dpkg - + result.rpm - + result.emerge - + result.xbps - + result.nixSystem - + result.nixUser - + result.nixDefault - + result.apk - + result.pkg - + result.flatpak - + result.snap - + result.brew - + result.port - + result.scoop; + for(uint32_t i = 0; i < offsetof(FFPackagesResult, all) / sizeof(uint32_t); ++i) + result.all += ((uint32_t *)&result)[i]; ); } diff --git a/src/detection/packages/packages.h b/src/detection/packages/packages.h index 92bd26d63..1992b8d8d 100644 --- a/src/detection/packages/packages.h +++ b/src/detection/packages/packages.h @@ -7,10 +7,9 @@ typedef struct FFPackagesResult { - uint32_t all; - uint32_t apk; uint32_t brew; + uint32_t choco; uint32_t dpkg; uint32_t emerge; uint32_t flatpak; @@ -25,6 +24,8 @@ typedef struct FFPackagesResult uint32_t snap; uint32_t xbps; + uint32_t all; //Make sure this goes last + FFstrbuf pacmanBranch; } FFPackagesResult; diff --git a/src/detection/packages/packages_windows.c b/src/detection/packages/packages_windows.c index 1a9fe2ade..93739e9bf 100644 --- a/src/detection/packages/packages_windows.c +++ b/src/detection/packages/packages_windows.c @@ -25,15 +25,34 @@ static uint32_t getNumElements(const char* searchPath /* including `\*` suffix * return counter; } -void ffDetectPackagesImpl(const FFinstance* instance, FFPackagesResult* result) +static void detectScoop(const FFinstance* instance, FFPackagesResult* result) +{ + char scoopPath[MAX_PATH + 3]; + strcpy(scoopPath, instance->state.passwd->pw_dir); + strncat(scoopPath, "/scoop/apps/*", sizeof(scoopPath) - 1 - strlen(scoopPath)); + result->scoop = getNumElements(scoopPath, FILE_ATTRIBUTE_DIRECTORY); + if(result->scoop > 0) + result->scoop--; // scoop +} + +static void detectChoco(const FFinstance* instance, FFPackagesResult* result) { FF_UNUSED(instance); - FFstrbuf scoopPath; - ffStrbufInitS(&scoopPath, instance->state.passwd->pw_dir); - ffStrbufAppendS(&scoopPath, "/scoop/apps/*"); - result->scoop = getNumElements(scoopPath.chars, FILE_ATTRIBUTE_DIRECTORY); - if(result->scoop > 0) - result->scoop--; // scoop - ffStrbufDestroy(&scoopPath); + const char* chocoInstall = getenv("ChocolateyInstall"); + if(!chocoInstall || chocoInstall[0] == '\0') + return; + + char chocoPath[MAX_PATH + 3]; + strcpy(chocoPath, chocoInstall); + strncat(chocoPath, "/lib/*", sizeof(chocoPath) - 1 - strlen(chocoPath)); + result->choco = getNumElements(chocoPath, FILE_ATTRIBUTE_DIRECTORY); + if(result->choco > 0) + result->choco--; // choco +} + +void ffDetectPackagesImpl(const FFinstance* instance, FFPackagesResult* result) +{ + detectScoop(instance, result); + detectChoco(instance, result); } diff --git a/src/modules/packages.c b/src/modules/packages.c index 488334bb1..3f9d6d990 100644 --- a/src/modules/packages.c +++ b/src/modules/packages.c @@ -53,6 +53,7 @@ void ffPrintPackages(FFinstance* instance) FF_PRINT_PACKAGE(brew) FF_PRINT_PACKAGE(port) FF_PRINT_PACKAGE(scoop) + FF_PRINT_PACKAGE(choco) //Fix linter warning of unused value of all (void) all;