diff --git a/src/modules/packages.c b/src/modules/packages.c index 651e45a7a..8009d450b 100644 --- a/src/modules/packages.c +++ b/src/modules/packages.c @@ -3,10 +3,10 @@ #include #define FF_PACKAGES_MODULE_NAME "Packages" -#define FF_PACKAGES_NUM_FORMAT_ARGS 3 +#define FF_PACKAGES_NUM_FORMAT_ARGS 4 -static uint32_t get_num_dirs(const char* dirname) { - uint32_t num_dirs = 0; +static uint32_t get_num_elements(const char* dirname, unsigned char type) { + uint32_t num_elements = 0; DIR * dirp; struct dirent *entry; @@ -15,23 +15,25 @@ 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 == type) + ++num_elements; } - num_dirs -= 2; // accounting for . and .. + if(type == DT_DIR) + 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", DT_DIR); + uint32_t flatpak = get_num_elements("/var/lib/flatpak/app", DT_DIR); + uint32_t xbps = get_num_elements("/var/db/xbps", DT_REG); - uint32_t all = pacman + flatpak; + uint32_t all = pacman + flatpak + xbps; if(all == 0) { @@ -53,6 +55,7 @@ void ffPrintPackages(FFinstance* instance) FF_PRINT_PACKAGE(pacman) FF_PRINT_PACKAGE(flatpak) + FF_PRINT_PACKAGE(xbps) #undef FF_PRINT_PACKAGE @@ -63,7 +66,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} }); } }