Packages: support Chocolatey (Windows)

This commit is contained in:
李通洲
2022-10-23 22:16:12 +08:00
parent 65b342cac7
commit 883a535441
4 changed files with 35 additions and 26 deletions
+4 -16
View File
@@ -1,6 +1,8 @@
#include "packages.h"
#include "detection/internal.h"
#include <stddef.h>
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];
);
}
+3 -2
View File
@@ -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;
+27 -8
View File
@@ -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);
}
+1
View File
@@ -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;