From f4d2b352609512ab5d77c736609d9a18fb991121 Mon Sep 17 00:00:00 2001 From: DarN <82701459+DarNCelsius@users.noreply.github.com> Date: Tue, 27 Apr 2021 21:52:55 +0200 Subject: [PATCH] Added Package Manager support for Void Linux This adds support for xbps. --- src/modules/packages.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/modules/packages.c b/src/modules/packages.c index 651e45a7a..0e5b82b88 100644 --- a/src/modules/packages.c +++ b/src/modules/packages.c @@ -5,8 +5,14 @@ #define FF_PACKAGES_MODULE_NAME "Packages" #define FF_PACKAGES_NUM_FORMAT_ARGS 3 -static uint32_t get_num_dirs(const char* dirname) { - uint32_t num_dirs = 0; +enum elementType +{ + enumDir = 0, + enumFile +}; + +static uint32_t get_num_elements(const char* dirname, enum elementType type) { + uint32_t num_elements = 0; DIR * dirp; struct dirent *entry; @@ -15,23 +21,27 @@ static uint32_t get_num_dirs(const char* dirname) { return 0; while((entry = readdir(dirp)) != NULL) { - if(entry->d_type == DT_DIR) - ++num_dirs; + if(entry->d_type == DT_DIR && type == enumDir) + ++num_elements; + if(entry->d_type == DT_REG && type == enumFile) + ++num_elements; } - num_dirs -= 2; // accounting for . and .. + if(type == enumDir) + num_elements -= 2; // accounting for . and .. closedir(dirp); - return num_dirs; + return num_elements; } void ffPrintPackages(FFinstance* instance) { - uint32_t pacman = get_num_dirs("/var/lib/pacman/local"); - uint32_t flatpak = get_num_dirs("/var/lib/flatpak/app"); + uint32_t pacman = get_num_elements("/var/lib/pacman/local", enumDir); + uint32_t flatpak = get_num_elements("/var/lib/flatpak/app", enumDir); + uint32_t xbps = get_num_elements("/var/db/xbps", enumFile); - uint32_t all = pacman + flatpak; + uint32_t all = pacman + flatpak + xbps; if(all == 0) { @@ -53,6 +63,7 @@ void ffPrintPackages(FFinstance* instance) FF_PRINT_PACKAGE(pacman) FF_PRINT_PACKAGE(flatpak) + FF_PRINT_PACKAGE(xbps) #undef FF_PRINT_PACKAGE @@ -63,7 +74,8 @@ void ffPrintPackages(FFinstance* instance) ffPrintFormatString(instance, FF_PACKAGES_MODULE_NAME, 0, &instance->config.packagesKey, &instance->config.packagesFormat, NULL, FF_PACKAGES_NUM_FORMAT_ARGS, (FFformatarg[]){ {FF_FORMAT_ARG_TYPE_UINT, &all}, {FF_FORMAT_ARG_TYPE_UINT, &pacman}, - {FF_FORMAT_ARG_TYPE_UINT, &flatpak} + {FF_FORMAT_ARG_TYPE_UINT, &flatpak}, + {FF_FORMAT_ARG_TYPE_UINT, &xbps} }); } }