master ohmu/fastfetch-openbsd / src / detection / processes / processes_gnu.c
ohmu  ·  2026-10-15
 1#include "processes.h"
 2
 3#include <hurd.h>
 4#include <ps.h>
 5
 6const char* ffDetectProcesses(const FFProcessesOptions* options, FFProcessesResult* result) {
 7    struct ps_context* context = nullptr;
 8    if (ps_context_create(getproc(), &context) != 0) {
 9        return "ps_context_create(getproc()) failed";
10    }
11
12    const char* error = nullptr;
13    struct proc_stat_list* list = nullptr;
14    if (proc_stat_list_create(context, &list) != 0) {
15        error = "proc_stat_list_create() failed";
16        goto done;
17    }
18
19    if (proc_stat_list_add_all(list, nullptr, nullptr) != 0) {
20        error = "proc_stat_list_add_all() failed";
21        goto done;
22    }
23
24    proc_stat_list_set_flags(list, PSTAT_NUM_THREADS);
25
26    for (uint32_t i = 0; i < list->num_procs; i++) {
27        struct proc_stat* stat = list->proc_stats[i];
28        if (!options->countKprocs && proc_stat_pid(stat) == 2) { // Kernel Task
29            continue;
30        }
31
32        ++result->processes;
33        if (proc_stat_has(stat, PSTAT_NUM_THREADS)) {
34            result->threads += proc_stat_num_threads(stat);
35        }
36    }
37
38done:
39    if (list) {
40        proc_stat_list_free(list);
41    }
42    ps_context_free(context);
43    return error;
44}