Skip to content

Commit 7743167

Browse files
committed
Packages (Linux): add am support
Fix: #771
1 parent 4430b71 commit 7743167

File tree

4 files changed

+49
-2
lines changed

4 files changed

+49
-2
lines changed

src/detection/packages/packages.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
typedef struct FFPackagesResult
66
{
7+
uint32_t am;
78
uint32_t apk;
89
uint32_t brew;
910
uint32_t brewCask;

src/detection/packages/packages_linux.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,43 @@ static uint32_t getRpmFromLibrpm(void)
253253

254254
#endif //FF_HAVE_RPM
255255

256+
static uint32_t getAM(FFstrbuf* baseDir)
257+
{
258+
// #771
259+
uint32_t baseDirLength = baseDir->length;
260+
261+
ffStrbufAppendS(baseDir, "/opt");
262+
uint32_t optDirLength = baseDir->length;
263+
264+
uint32_t result = 0;
265+
266+
ffStrbufAppendS(baseDir, "/am/APP-MANAGER");
267+
if (ffPathExists(baseDir->chars, FF_PATHTYPE_FILE))
268+
{
269+
++result; // `am` itself is counted as a package too
270+
ffStrbufSubstrBefore(baseDir, optDirLength);
271+
FF_AUTO_CLOSE_DIR DIR* dirp = opendir(baseDir->chars);
272+
if(dirp)
273+
{
274+
struct dirent *entry;
275+
while ((entry = readdir(dirp)) != NULL)
276+
{
277+
if (entry->d_name[0] == '.') continue;
278+
if (entry->d_type == DT_DIR)
279+
{
280+
ffStrbufAppendF(baseDir, "/%s/AM-updater", entry->d_name);
281+
if (ffPathExists(baseDir->chars, FF_PATHTYPE_FILE))
282+
++result;
283+
ffStrbufSubstrBefore(baseDir, optDirLength);
284+
}
285+
}
286+
}
287+
}
288+
289+
ffStrbufSubstrBefore(baseDir, baseDirLength);
290+
return result;
291+
}
292+
256293
static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts, FFPackagesOptions* options)
257294
{
258295
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,
277314
}
278315
if (!(options->disabled & FF_PACKAGES_FLAG_PALUDIS_BIT)) packageCounts->paludis += countFilesRecursive(baseDir, "/var/db/paludis/repositories", "environment.bz2");
279316
if (!(options->disabled & FF_PACKAGES_FLAG_OPKG_BIT)) packageCounts->opkg += getNumStrings(baseDir, "/usr/lib/opkg/status", "Package:"); // openwrt
317+
if (!(options->disabled & FF_PACKAGES_FLAG_AM_BIT)) packageCounts->am = getAM(baseDir);
280318
}
281319

282320
static void getPackageCountsRegular(FFstrbuf* baseDir, FFPackagesResult* packageCounts, FFPackagesOptions* options)

src/modules/packages/option.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ typedef enum FFPackagesFlags
2626
FF_PACKAGES_FLAG_SNAP_BIT = 1 << 16,
2727
FF_PACKAGES_FLAG_WINGET_BIT = 1 << 17,
2828
FF_PACKAGES_FLAG_XBPS_BIT = 1 << 18,
29+
FF_PACKAGES_FLAG_AM_BIT = 1 << 19,
2930
} FFPackagesFlags;
3031

3132
typedef struct FFPackagesOptions

src/modules/packages/packages.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include "modules/packages/packages.h"
55
#include "util/stringUtils.h"
66

7-
#define FF_PACKAGES_NUM_FORMAT_ARGS 25
7+
#define FF_PACKAGES_NUM_FORMAT_ARGS 26
88

99
void ffPrintPackages(FFPackagesOptions* options)
1010
{
@@ -64,6 +64,7 @@ void ffPrintPackages(FFPackagesOptions* options)
6464
FF_PRINT_PACKAGE(paludis)
6565
FF_PRINT_PACKAGE(winget)
6666
FF_PRINT_PACKAGE(opkg)
67+
FF_PRINT_PACKAGE(am)
6768

6869
putchar('\n');
6970
}
@@ -95,6 +96,7 @@ void ffPrintPackages(FFPackagesOptions* options)
9596
{FF_FORMAT_ARG_TYPE_UINT, &counts.paludis},
9697
{FF_FORMAT_ARG_TYPE_UINT, &counts.winget},
9798
{FF_FORMAT_ARG_TYPE_UINT, &counts.opkg},
99+
{FF_FORMAT_ARG_TYPE_UINT, &counts.am},
98100
}));
99101
}
100102

@@ -141,6 +143,7 @@ bool ffParsePackagesCommandOptions(FFPackagesOptions* options, const char* key,
141143
FF_TEST_PACKAGE_NAME(SNAP)
142144
FF_TEST_PACKAGE_NAME(WINGET)
143145
FF_TEST_PACKAGE_NAME(XBPS)
146+
FF_TEST_PACKAGE_NAME(AM)
144147
#undef FF_TEST_PACKAGE_NAME
145148

146149
if (end)
@@ -210,6 +213,7 @@ void ffParsePackagesJsonObject(FFPackagesOptions* options, yyjson_val* module)
210213
FF_TEST_PACKAGE_NAME(SNAP)
211214
FF_TEST_PACKAGE_NAME(WINGET)
212215
FF_TEST_PACKAGE_NAME(XBPS)
216+
FF_TEST_PACKAGE_NAME(AM)
213217
#undef FF_TEST_PACKAGE_NAME
214218
}
215219
}
@@ -250,6 +254,7 @@ void ffGeneratePackagesJsonConfig(FFPackagesOptions* options, yyjson_mut_doc* do
250254
FF_TEST_PACKAGE_NAME(SNAP)
251255
FF_TEST_PACKAGE_NAME(WINGET)
252256
FF_TEST_PACKAGE_NAME(XBPS)
257+
FF_TEST_PACKAGE_NAME(AM)
253258
#undef FF_TEST_PACKAGE_NAME
254259
}
255260
}
@@ -295,6 +300,7 @@ void ffGeneratePackagesJsonResult(FF_MAYBE_UNUSED FFPackagesOptions* options, yy
295300
FF_APPEND_PACKAGE_COUNT(winget)
296301
FF_APPEND_PACKAGE_COUNT(xbps)
297302
FF_APPEND_PACKAGE_COUNT(opkg)
303+
FF_APPEND_PACKAGE_COUNT(am)
298304
yyjson_mut_obj_add_strbuf(doc, obj, "pacmanBranch", &counts.pacmanBranch);
299305
}
300306

@@ -325,7 +331,8 @@ void ffPrintPackagesHelpFormat(void)
325331
"Number of pkgtool packages",
326332
"Number of paludis packages",
327333
"Number of winget packages",
328-
"Number of opkg packages"
334+
"Number of opkg packages",
335+
"Number of am packages",
329336
}));
330337
}
331338

0 commit comments

Comments
 (0)