diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2024-12-26 06:27:31 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2024-12-26 12:45:41 +0100 |
commit | 1a40b793adbdd7c8718b9f383eadd1ab0bb02cf0 (patch) | |
tree | 0717bf60c8636dc317148b86ad508c412ad24b5f /compat/process-list.hpp | |
parent | 53ae9919b5023c8192821095ed60a6ee229b154d (diff) |
compat: fix Linux process list
`procps-ng` silently broke API compatibility in a patch release.
Reported-by: @DoomSlinger
Fix-by: @thorger
Fixes: #1970
Diffstat (limited to 'compat/process-list.hpp')
-rw-r--r-- | compat/process-list.hpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/compat/process-list.hpp b/compat/process-list.hpp index 6d960610..34d65a75 100644 --- a/compat/process-list.hpp +++ b/compat/process-list.hpp @@ -148,9 +148,22 @@ QStringList get_all_executable_names() procps_pids_new(&info, items, 3); + // procps-ng version 4.0.5 removed an unused argument in PIDS_VAL() macro. + // cf. https://gitlab.com/procps-ng/procps/-/commit/967fdcfb06e20aad0f3 + + // Although the emitted machine code is identical, backward API + // compatibility was silently broken in the patch with no upgrade path + // (e.g. deprecating PIDS_VAL() while introducing PIDS_VAL2()). + + // Unfortunately, procps-ng doesn't include a #define for identifying its + // version. For these reasons the code below depends on undocumented ABI + // compatibility between procps-ng versions.. -sh 20241226 + +#define OPENTRACK_PIDS_VAL(i, type, stack) stack->head[i].result.type + while ((stack = procps_pids_get(info, PIDS_FETCH_TASKS_ONLY))) { - char **p_cmdline = PIDS_VAL(rel_cmdline, strv, stack, info); + char **p_cmdline = OPENTRACK_PIDS_VAL(rel_cmdline, strv, stack); // note, wine sets argv[0] so no parsing like in OSX case if (p_cmdline && p_cmdline[0] && p_cmdline[0][0] && |