diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c534c9c2..584f7cc0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,18 @@ -# 2.8.10 +# 2.9.0 -Changes: -* Use MS-DOS device name as mountFrom result, instead of useless GUID volume name (Windows, Disk) -* Some adjustments to Terminal detection (Terminal, Windows) - * Don't pretty print CMD - * Print conhost as Windows Console - * Don't detect `wininit` as Terminal +Features: +* Support Lxterminal version detection (Terminal, Linux) +* Support weston-terminal version and font detection (TerminalFont, Linux) +* Support `am` package manager detection (#771, Packages, Linux) +* Support network prefix length detection for IPv6 (LocalIP) +* Display all IPs when multiple IPs are assigned to the same interface (LocalIP) +* Add option `--localip-show-prefix-len` to show network prefix length for both IPv4 and IPv6. Defaults to `true` (LocalIP) + +Bugfixes: +* Fix network prefix length detection when the value is greater than 24 (#773, LocalIP, Linux) +* For xfce4-terminal, use system mono font if no config file is found (TerminalFont, Linux) + +# 2.8.10 Bugfixes: * Don't display 0.00 GHz (CPU, FreeBSD) @@ -17,6 +24,11 @@ Bugfixes: Features: * Improve stability; print more useful error message; avoid misuse (PublicIP / Weather) +* Use MS-DOS device name as mountFrom result, instead of useless GUID volume name (Windows, Disk) +* Some adjustments to Terminal detection (Terminal, Windows) + * Don't pretty print CMD + * Print conhost as Windows Console + * Don't detect `wininit` as Terminal Logo: * Fix color of Arco Linux diff --git a/CMakeLists.txt b/CMakeLists.txt index 64a87ad3d..6470145a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.12.0) # target_link_libraries with OBJECT libs & project homepage url project(fastfetch - VERSION 2.8.10 + VERSION 2.9.0 LANGUAGES C DESCRIPTION "Fast neofetch-like system information tool" HOMEPAGE_URL "https://github.com/fastfetch-cli/fastfetch" diff --git a/debian/changelog b/debian/changelog index 8515ae964..6c560750f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +fastfetch (2.8.10) jammy; urgency=medium + + * Update to 2.8.10 + + -- Carter Li Mon, 25 Mar 2024 15:01:53 +0800 + fastfetch (2.8.9) jammy; urgency=medium * Update to 2.8.9 diff --git a/debian/files b/debian/files index b621bfa1f..655eaefe5 100644 --- a/debian/files +++ b/debian/files @@ -1 +1 @@ -fastfetch_2.8.9_source.buildinfo universe/utils optional +fastfetch_2.8.10_source.buildinfo universe/utils optional diff --git a/doc/json_schema.json b/doc/json_schema.json index bc436f26c..363497e30 100644 --- a/doc/json_schema.json +++ b/doc/json_schema.json @@ -1438,6 +1438,11 @@ "type": "boolean", "default": false }, + "showPrefixLen": { + "description": "Show network prefix length (/N)", + "type": "boolean", + "default": true + }, "compact": { "description": "Show all IPs in one line", "type": "boolean", diff --git a/src/data/help.json b/src/data/help.json index 621d2d71e..b50980800 100644 --- a/src/data/help.json +++ b/src/data/help.json @@ -1261,6 +1261,15 @@ "default": false } }, + { + "long": "localip-show-prefix-len", + "desc": "Show network prefix length (/N) in local ip module", + "arg": { + "type": "bool", + "optional": true, + "default": true + } + }, { "long": "localip-name-prefix", "desc": "Show interfaces with given interface name prefix only", diff --git a/src/detection/localip/localip_linux.c b/src/detection/localip/localip_linux.c index afc97e28d..905dec568 100644 --- a/src/detection/localip/localip_linux.c +++ b/src/detection/localip/localip_linux.c @@ -40,10 +40,12 @@ static void addNewIp(FFlist* list, const char* name, const char* addr, int type, switch (type) { case AF_INET: - ffStrbufSetS(&ip->ipv4, addr); + if (ip->ipv4.length) ffStrbufAppendC(&ip->ipv4, ','); + ffStrbufAppendS(&ip->ipv4, addr); break; case AF_INET6: - ffStrbufSetS(&ip->ipv6, addr); + if (ip->ipv6.length) ffStrbufAppendC(&ip->ipv6, ','); + ffStrbufAppendS(&ip->ipv6, addr); break; case -1: ffStrbufSetS(&ip->mac, addr); @@ -83,12 +85,15 @@ const char* ffDetectLocalIps(const FFLocalIpOptions* options, FFlist* results) char addressBuffer[INET_ADDRSTRLEN + 4]; inet_ntop(AF_INET, &ipv4->sin_addr, addressBuffer, INET_ADDRSTRLEN); - struct sockaddr_in* netmask = (struct sockaddr_in*) ifa->ifa_netmask; - int cidr = __builtin_popcount(inet_netof(netmask->sin_addr)); - if (cidr != 0) + if (options->showType & FF_LOCALIP_TYPE_PREFIX_LEN_BIT) { - size_t len = strlen(addressBuffer); - snprintf(addressBuffer + len, 4, "/%d", cidr); + struct sockaddr_in* netmask = (struct sockaddr_in*) ifa->ifa_netmask; + int cidr = __builtin_popcount(netmask->sin_addr.s_addr); + if (cidr != 0) + { + size_t len = strlen(addressBuffer); + snprintf(addressBuffer + len, 4, "/%d", cidr); + } } addNewIp(results, ifa->ifa_name, addressBuffer, AF_INET, isDefaultRoute); @@ -99,8 +104,23 @@ const char* ffDetectLocalIps(const FFLocalIpOptions* options, FFlist* results) continue; struct sockaddr_in6* ipv6 = (struct sockaddr_in6 *)ifa->ifa_addr; - char addressBuffer[INET6_ADDRSTRLEN]; + char addressBuffer[INET6_ADDRSTRLEN + 4]; inet_ntop(AF_INET6, &ipv6->sin6_addr, addressBuffer, INET6_ADDRSTRLEN); + + if (options->showType & FF_LOCALIP_TYPE_PREFIX_LEN_BIT) + { + struct sockaddr_in6* netmask = (struct sockaddr_in6*) ifa->ifa_netmask; + int cidr = 0; + static_assert(sizeof(netmask->sin6_addr) % sizeof(uint64_t) == 0, ""); + for (uint32_t i = 0; i < sizeof(netmask->sin6_addr) / sizeof(uint64_t); ++i) + cidr += __builtin_popcountll(((uint64_t*) &netmask->sin6_addr)[i]); + if (cidr != 0) + { + size_t len = strlen(addressBuffer); + snprintf(addressBuffer + len, 4, "/%d", cidr); + } + } + addNewIp(results, ifa->ifa_name, addressBuffer, AF_INET6, isDefaultRoute); } #if defined(__FreeBSD__) || defined(__APPLE__) diff --git a/src/detection/localip/localip_windows.c b/src/detection/localip/localip_windows.c index 3bbdddd8b..96463c331 100644 --- a/src/detection/localip/localip_windows.c +++ b/src/detection/localip/localip_windows.c @@ -6,7 +6,7 @@ #include "util/windows/unicode.h" #include "localip.h" -static void addNewIp(FFlist* list, const char* name, const char* value, int type, bool newIp, bool defaultRoute) +static void addNewIp(FFlist* list, const char* name, const char* addr, int type, bool newIp, bool defaultRoute) { FFLocalIpResult* ip = NULL; @@ -27,13 +27,15 @@ static void addNewIp(FFlist* list, const char* name, const char* value, int type switch (type) { case AF_INET: - ffStrbufSetS(&ip->ipv4, value); + if (ip->ipv4.length) ffStrbufAppendC(&ip->ipv4, ','); + ffStrbufAppendS(&ip->ipv4, addr); break; case AF_INET6: - ffStrbufSetS(&ip->ipv6, value); + if (ip->ipv6.length) ffStrbufAppendC(&ip->ipv6, ','); + ffStrbufAppendS(&ip->ipv6, addr); break; case -1: - ffStrbufSetS(&ip->mac, value); + ffStrbufSetS(&ip->mac, addr); break; } } @@ -108,7 +110,7 @@ const char* ffDetectLocalIps(const FFLocalIpOptions* options, FFlist* results) char addressBuffer[INET_ADDRSTRLEN + 4]; inet_ntop(AF_INET, &ipv4->sin_addr, addressBuffer, INET_ADDRSTRLEN); - if (ifa->OnLinkPrefixLength) + if ((options->showType & FF_LOCALIP_TYPE_PREFIX_LEN_BIT) && ifa->OnLinkPrefixLength) { size_t len = strlen(addressBuffer); snprintf(addressBuffer + len, 4, "/%u", (unsigned) ifa->OnLinkPrefixLength); @@ -120,8 +122,15 @@ const char* ffDetectLocalIps(const FFLocalIpOptions* options, FFlist* results) else if (ifa->Address.lpSockaddr->sa_family == AF_INET6) { SOCKADDR_IN6* ipv6 = (SOCKADDR_IN6*) ifa->Address.lpSockaddr; - char addressBuffer[INET6_ADDRSTRLEN]; + char addressBuffer[INET6_ADDRSTRLEN + 4]; inet_ntop(AF_INET6, &ipv6->sin6_addr, addressBuffer, INET6_ADDRSTRLEN); + + if ((options->showType & FF_LOCALIP_TYPE_PREFIX_LEN_BIT) && ifa->OnLinkPrefixLength) + { + size_t len = strlen(addressBuffer); + snprintf(addressBuffer + len, 4, "/%u", (unsigned) ifa->OnLinkPrefixLength); + } + addNewIp(results, name, addressBuffer, AF_INET6, newIp, isDefaultRoute); newIp = false; } diff --git a/src/detection/packages/packages.h b/src/detection/packages/packages.h index 88df483b4..87c497ce0 100644 --- a/src/detection/packages/packages.h +++ b/src/detection/packages/packages.h @@ -4,6 +4,7 @@ typedef struct FFPackagesResult { + uint32_t am; uint32_t apk; uint32_t brew; uint32_t brewCask; diff --git a/src/detection/packages/packages_linux.c b/src/detection/packages/packages_linux.c index 194330fa5..9f5b3c307 100644 --- a/src/detection/packages/packages_linux.c +++ b/src/detection/packages/packages_linux.c @@ -253,6 +253,43 @@ static uint32_t getRpmFromLibrpm(void) #endif //FF_HAVE_RPM +static uint32_t getAM(FFstrbuf* baseDir) +{ + // #771 + uint32_t baseDirLength = baseDir->length; + + ffStrbufAppendS(baseDir, "/opt"); + uint32_t optDirLength = baseDir->length; + + uint32_t result = 0; + + ffStrbufAppendS(baseDir, "/am/APP-MANAGER"); + if (ffPathExists(baseDir->chars, FF_PATHTYPE_FILE)) + { + ++result; // `am` itself is counted as a package too + ffStrbufSubstrBefore(baseDir, optDirLength); + FF_AUTO_CLOSE_DIR DIR* dirp = opendir(baseDir->chars); + if(dirp) + { + struct dirent *entry; + while ((entry = readdir(dirp)) != NULL) + { + if (entry->d_name[0] == '.') continue; + if (entry->d_type == DT_DIR) + { + ffStrbufAppendF(baseDir, "/%s/AM-updater", entry->d_name); + if (ffPathExists(baseDir->chars, FF_PATHTYPE_FILE)) + ++result; + ffStrbufSubstrBefore(baseDir, optDirLength); + } + } + } + } + + ffStrbufSubstrBefore(baseDir, baseDirLength); + return result; +} + static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts, FFPackagesOptions* options) { if (!(options->disabled & FF_PACKAGES_FLAG_APK_BIT)) packageCounts->apk += getNumStrings(baseDir, "/lib/apk/db/installed", "C:Q"); @@ -277,6 +314,7 @@ static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts, } if (!(options->disabled & FF_PACKAGES_FLAG_PALUDIS_BIT)) packageCounts->paludis += countFilesRecursive(baseDir, "/var/db/paludis/repositories", "environment.bz2"); if (!(options->disabled & FF_PACKAGES_FLAG_OPKG_BIT)) packageCounts->opkg += getNumStrings(baseDir, "/usr/lib/opkg/status", "Package:"); // openwrt + if (!(options->disabled & FF_PACKAGES_FLAG_AM_BIT)) packageCounts->am = getAM(baseDir); } static void getPackageCountsRegular(FFstrbuf* baseDir, FFPackagesResult* packageCounts, FFPackagesOptions* options) diff --git a/src/detection/terminalfont/terminalfont_linux.c b/src/detection/terminalfont/terminalfont_linux.c index b843465cb..3a6ac9086 100644 --- a/src/detection/terminalfont/terminalfont_linux.c +++ b/src/detection/terminalfont/terminalfont_linux.c @@ -145,13 +145,7 @@ static void detectXFCETerminal(FFTerminalFontResult* terminalFont) }); } - if (!configFound) - { - ffStrbufSetStatic(&terminalFont->error, "Couldn't find xfce4/xfconf/xfce-perchannel-xml/xfce4-terminal.xml or xfce4/terminal/terminalrc"); - return; - } - - if(useSysFont.length == 0 || ffStrbufIgnCaseCompS(&useSysFont, "false") == 0) + if(configFound && (useSysFont.length == 0 || ffStrbufIgnCaseCompS(&useSysFont, "false") == 0)) { if(fontName.length == 0) ffStrbufAppendF(&terminalFont->error, "Couldn't find FontName in %s", path); diff --git a/src/detection/terminalshell/terminalshell.c b/src/detection/terminalshell/terminalshell.c index 8fc56d34b..40f5129d3 100644 --- a/src/detection/terminalshell/terminalshell.c +++ b/src/detection/terminalshell/terminalshell.c @@ -400,6 +400,29 @@ FF_MAYBE_UNUSED static bool getTerminalVersionSt(FF_MAYBE_UNUSED FFstrbuf* exe, return version->length > 0; } +FF_MAYBE_UNUSED static bool getTerminalVersionLxterminal(FFstrbuf* exe, FFstrbuf* version) +{ + if(!getExeVersionRaw(exe, version)) return false; + // lxterminal 0.3.2 + ffStrbufSubstrAfterFirstC(version, ' '); + return version->length > 0; +} + +FF_MAYBE_UNUSED static bool getTerminalVersionWeston(FF_MAYBE_UNUSED FFstrbuf* exe, FFstrbuf* version) +{ + // weston-terminal doesn't report a version, use weston version instead + if(ffProcessAppendStdOut(version, (char* const[]){ + "weston", + "--version", + NULL + })) return false; + + //weston 8.0.0 + ffStrbufSubstrAfterFirstC(version, ' '); + + return version->length > 0; +} + static bool getTerminalVersionContour(FFstrbuf* exe, FFstrbuf* version) { const char* env = getenv("TERMINAL_VERSION_STRING"); @@ -410,7 +433,7 @@ static bool getTerminalVersionContour(FFstrbuf* exe, FFstrbuf* version) } if(!getExeVersionRaw(exe, version)) return false; // Contour Terminal Emulator 0.3.12.262 - ffStrbufSubstrAfterFirstC(version, ' '); + ffStrbufSubstrAfterLastC(version, ' '); return version->length > 0; } @@ -525,6 +548,12 @@ bool fftsGetTerminalVersion(FFstrbuf* processName, FF_MAYBE_UNUSED FFstrbuf* exe if(ffStrbufIgnCaseEqualS(processName, "st")) return getTerminalVersionSt(exe, version); + if(ffStrbufIgnCaseEqualS(processName, "lxterminal")) + return getTerminalVersionLxterminal(exe, version); + + if(ffStrbufIgnCaseEqualS(processName, "weston-terminal")) + return getTerminalVersionWeston(exe, version); + if(ffStrbufIgnCaseEqualS(processName, "urxvt") || ffStrbufIgnCaseEqualS(processName, "urxvtd") || ffStrbufIgnCaseEqualS(processName, "rxvt") || diff --git a/src/detection/version/version.c b/src/detection/version/version.c index 202c10ca2..3bb4f2f8a 100644 --- a/src/detection/version/version.c +++ b/src/detection/version/version.c @@ -32,7 +32,21 @@ void ffDetectVersion(FFVersionResult* version) version->cmakeBuiltType = FASTFETCH_PROJECT_CMAKE_BUILD_TYPE; version->compileTime = __DATE__ ", " __TIME__; #ifdef __clang__ - version->compiler = "clang " FF_STR(__clang_major__) "." FF_STR(__clang_minor__) "." FF_STR(__clang_patchlevel__); + version->compiler = + #ifdef _MSC_VER + "clang-cl " ; + #elif defined(__APPLE__) && defined(__apple_build_version__) + "Apple clang " + #else + "clang " + #endif + + FF_STR(__clang_major__) "." FF_STR(__clang_minor__) "." FF_STR(__clang_patchlevel__) + + #if defined(__APPLE__) && defined(__apple_build_version__) + " (" FF_STR(__apple_build_version__) ")" + #endif + ; #elif defined(__GNUC__) version->compiler = "gcc " FF_STR(__GNUC__) "." FF_STR(__GNUC_MINOR__) "." FF_STR(__GNUC_PATCHLEVEL__); #elif defined(_MSC_VER) diff --git a/src/fastfetch.c b/src/fastfetch.c index 0109c2717..20f316d0e 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -821,6 +821,7 @@ static void run(FFdata* data) if (instance.state.resultDoc) { yyjson_mut_write_fp(stdout, instance.state.resultDoc, YYJSON_WRITE_INF_AND_NAN_AS_NULL | YYJSON_WRITE_PRETTY_TWO_SPACES, NULL, NULL); + //TODO should use YYJSON_WRITE_NEWLINE_AT_END when it is available putchar('\n'); } else @@ -840,24 +841,23 @@ static void writeConfigFile(FFdata* data, const FFstrbuf* filename) ffOptionsGenerateLibraryJsonConfig(&instance.config.library, doc); ffMigrateCommandOptionToJsonc(data, doc); - if (ffStrbufEqualS(filename, "-")) - yyjson_mut_write_fp(stdout, doc, YYJSON_WRITE_INF_AND_NAN_AS_NULL | YYJSON_WRITE_PRETTY_TWO_SPACES, NULL, NULL); - else + FILE *fp = stdout; + bool writeToStdout = ffStrbufEqualS(filename, "-"); + if (!writeToStdout) + fp = fopen(filename->chars, "w"); + + bool ok = yyjson_mut_write_fp(fp, doc, YYJSON_WRITE_INF_AND_NAN_AS_NULL | YYJSON_WRITE_PRETTY_TWO_SPACES, NULL, NULL); + //TODO should use YYJSON_WRITE_NEWLINE_AT_END when it is available + fputc('\n', fp); + if (!ok) { - size_t len; - FF_AUTO_FREE const char* str = yyjson_mut_write(doc, YYJSON_WRITE_INF_AND_NAN_AS_NULL | YYJSON_WRITE_PRETTY_TWO_SPACES, &len); - if (!str) - { - printf("Error: failed to generate config file\n"); - exit(1); - } - if (ffWriteFileData(filename->chars, len, str)) - printf("The generated config file has been written in `%s`\n", filename->chars); - else - { - printf("Error: failed to write file in `%s`\n", filename->chars); - exit(1); - } + fprintf(stderr, "Error: failed to generate config in `%s`\n", writeToStdout ? "stdout" : filename->chars); + exit(1); + } + if (ok && !writeToStdout) + { + fclose(fp); + printf("The generated config file has been written in `%s`\n", filename->chars); } yyjson_mut_doc_free(doc); diff --git a/src/flashfetch.c b/src/flashfetch.c index 3ec690bdb..2ec8f21bb 100644 --- a/src/flashfetch.c +++ b/src/flashfetch.c @@ -21,6 +21,7 @@ int main(void) &options->title, &options->separator, &options->os, + &options->host, &options->kernel, &options->uptime, &options->packages, diff --git a/src/modules/localip/localip.c b/src/modules/localip/localip.c index 4541154e1..f301c7e9d 100644 --- a/src/modules/localip/localip.c +++ b/src/modules/localip/localip.c @@ -174,6 +174,15 @@ bool ffParseLocalIpCommandOptions(FFLocalIpOptions* options, const char* key, co return true; } + if (ffStrEqualsIgnCase(subKey, "show-prefix-len")) + { + if (ffOptionParseBoolean(value)) + options->showType |= FF_LOCALIP_TYPE_PREFIX_LEN_BIT; + else + options->showType &= ~FF_LOCALIP_TYPE_PREFIX_LEN_BIT; + return true; + } + if(ffStrEqualsIgnCase(subKey, "compact")) { if (ffOptionParseBoolean(value)) @@ -247,6 +256,15 @@ void ffParseLocalIpJsonObject(FFLocalIpOptions* options, yyjson_val* module) continue; } + if (ffStrEqualsIgnCase(key, "showPrefixLen")) + { + if (yyjson_get_bool(val)) + options->showType |= FF_LOCALIP_TYPE_PREFIX_LEN_BIT; + else + options->showType &= ~FF_LOCALIP_TYPE_PREFIX_LEN_BIT; + continue; + } + if (ffStrEqualsIgnCase(key, "compact")) { if (yyjson_get_bool(val)) @@ -293,6 +311,9 @@ void ffGenerateLocalIpJsonConfig(FFLocalIpOptions* options, yyjson_mut_doc* doc, if (options->showType & FF_LOCALIP_TYPE_LOOP_BIT) yyjson_mut_obj_add_bool(doc, module, "showLoop", true); + if (options->showType & FF_LOCALIP_TYPE_PREFIX_LEN_BIT) + yyjson_mut_obj_add_bool(doc, module, "showPrefixLen", true); + if (options->showType & FF_LOCALIP_TYPE_COMPACT_BIT) yyjson_mut_obj_add_bool(doc, module, "compact", true); } @@ -369,7 +390,7 @@ void ffInitLocalIpOptions(FFLocalIpOptions* options) ); ffOptionInitModuleArg(&options->moduleArgs); - options->showType = FF_LOCALIP_TYPE_IPV4_BIT; + options->showType = FF_LOCALIP_TYPE_IPV4_BIT | FF_LOCALIP_TYPE_PREFIX_LEN_BIT; ffStrbufInit(&options->namePrefix); options->defaultRouteOnly = #ifdef __ANDROID__ diff --git a/src/modules/localip/option.h b/src/modules/localip/option.h index e2bdda0e3..56092e98d 100644 --- a/src/modules/localip/option.h +++ b/src/modules/localip/option.h @@ -7,12 +7,13 @@ typedef enum FFLocalIpType { FF_LOCALIP_TYPE_NONE, - FF_LOCALIP_TYPE_LOOP_BIT = 1 << 0, - FF_LOCALIP_TYPE_IPV4_BIT = 1 << 1, - FF_LOCALIP_TYPE_IPV6_BIT = 1 << 2, - FF_LOCALIP_TYPE_MAC_BIT = 1 << 3, + FF_LOCALIP_TYPE_LOOP_BIT = 1 << 0, + FF_LOCALIP_TYPE_IPV4_BIT = 1 << 1, + FF_LOCALIP_TYPE_IPV6_BIT = 1 << 2, + FF_LOCALIP_TYPE_MAC_BIT = 1 << 3, + FF_LOCALIP_TYPE_PREFIX_LEN_BIT = 1 << 4, - FF_LOCALIP_TYPE_COMPACT_BIT = 1 << 10, + FF_LOCALIP_TYPE_COMPACT_BIT = 1 << 10, } FFLocalIpType; typedef struct FFLocalIpOptions diff --git a/src/modules/packages/option.h b/src/modules/packages/option.h index 81b5a01b7..315ff0dc3 100644 --- a/src/modules/packages/option.h +++ b/src/modules/packages/option.h @@ -26,6 +26,7 @@ typedef enum FFPackagesFlags FF_PACKAGES_FLAG_SNAP_BIT = 1 << 16, FF_PACKAGES_FLAG_WINGET_BIT = 1 << 17, FF_PACKAGES_FLAG_XBPS_BIT = 1 << 18, + FF_PACKAGES_FLAG_AM_BIT = 1 << 19, } FFPackagesFlags; typedef struct FFPackagesOptions diff --git a/src/modules/packages/packages.c b/src/modules/packages/packages.c index b81cd3b2c..9107624de 100644 --- a/src/modules/packages/packages.c +++ b/src/modules/packages/packages.c @@ -4,7 +4,7 @@ #include "modules/packages/packages.h" #include "util/stringUtils.h" -#define FF_PACKAGES_NUM_FORMAT_ARGS 25 +#define FF_PACKAGES_NUM_FORMAT_ARGS 26 void ffPrintPackages(FFPackagesOptions* options) { @@ -64,6 +64,7 @@ void ffPrintPackages(FFPackagesOptions* options) FF_PRINT_PACKAGE(paludis) FF_PRINT_PACKAGE(winget) FF_PRINT_PACKAGE(opkg) + FF_PRINT_PACKAGE(am) putchar('\n'); } @@ -95,6 +96,7 @@ void ffPrintPackages(FFPackagesOptions* options) {FF_FORMAT_ARG_TYPE_UINT, &counts.paludis}, {FF_FORMAT_ARG_TYPE_UINT, &counts.winget}, {FF_FORMAT_ARG_TYPE_UINT, &counts.opkg}, + {FF_FORMAT_ARG_TYPE_UINT, &counts.am}, })); } @@ -141,6 +143,7 @@ bool ffParsePackagesCommandOptions(FFPackagesOptions* options, const char* key, FF_TEST_PACKAGE_NAME(SNAP) FF_TEST_PACKAGE_NAME(WINGET) FF_TEST_PACKAGE_NAME(XBPS) + FF_TEST_PACKAGE_NAME(AM) #undef FF_TEST_PACKAGE_NAME if (end) @@ -210,6 +213,7 @@ void ffParsePackagesJsonObject(FFPackagesOptions* options, yyjson_val* module) FF_TEST_PACKAGE_NAME(SNAP) FF_TEST_PACKAGE_NAME(WINGET) FF_TEST_PACKAGE_NAME(XBPS) + FF_TEST_PACKAGE_NAME(AM) #undef FF_TEST_PACKAGE_NAME } } @@ -250,6 +254,7 @@ void ffGeneratePackagesJsonConfig(FFPackagesOptions* options, yyjson_mut_doc* do FF_TEST_PACKAGE_NAME(SNAP) FF_TEST_PACKAGE_NAME(WINGET) FF_TEST_PACKAGE_NAME(XBPS) + FF_TEST_PACKAGE_NAME(AM) #undef FF_TEST_PACKAGE_NAME } } @@ -295,6 +300,7 @@ void ffGeneratePackagesJsonResult(FF_MAYBE_UNUSED FFPackagesOptions* options, yy FF_APPEND_PACKAGE_COUNT(winget) FF_APPEND_PACKAGE_COUNT(xbps) FF_APPEND_PACKAGE_COUNT(opkg) + FF_APPEND_PACKAGE_COUNT(am) yyjson_mut_obj_add_strbuf(doc, obj, "pacmanBranch", &counts.pacmanBranch); } @@ -325,7 +331,8 @@ void ffPrintPackagesHelpFormat(void) "Number of pkgtool packages", "Number of paludis packages", "Number of winget packages", - "Number of opkg packages" + "Number of opkg packages", + "Number of am packages", })); }