summaryrefslogtreecommitdiffstats
path: root/src/common/impl/kmod_sunos.c
blob: da392e26b53d171f69a079cc69abd20f8bd8c510 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "common/kmod.h"
#include "common/strutil.h"

#include <sys/modctl.h>
#include <errno.h>

bool ffKmodLoaded(const char* modName) {
    struct modinfo modinfo = {
        .mi_id = -1,
        .mi_nextid = -1,
        .mi_info = MI_INFO_ALL,
    };

    for (int id = -1; modctl(MODINFO, id, &modinfo) == 0; id = modinfo.mi_id) {
        modinfo.mi_name[MODMAXNAMELEN - 1] = '\0';

        if (ffStrEquals(modinfo.mi_name, modName)) {
            return true;
        }
    }

    return !(errno == EINVAL || errno == ENOENT);
}