summaryrefslogtreecommitdiffstats
path: root/src/common/impl/kmod_linux.c
blob: 204ab35857c103c5db4ffb2dd0b44719eb6cc7d7 (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
24
25
#include "common/kmod.h"
#include "common/io.h"

bool ffKmodLoaded(const char* modName) {
    static FFstrbuf modules;
    if (modules.chars == NULL) {
        ffStrbufInitS(&modules, "\n");
        ffAppendFileBuffer("/proc/modules", &modules);
    }

    if (modules.length == 0) {
        return false;
    }

    uint32_t len = (uint32_t) strlen(modName);
    if (len > 250) {
        return false;
    }

    char temp[256];
    temp[0] = '\n';
    memcpy(temp + 1, modName, len);
    temp[1 + len] = ' ';
    return memmem(modules.chars, modules.length, temp, len + 2) != NULL;
}