From 01e78e2179ec391f3a4371de4dc62fe5ae63d7c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Sun, 2 Mar 2025 20:29:55 +0800 Subject: [PATCH] Kmod (NetBSD): add support --- src/util/kmod.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/util/kmod.c b/src/util/kmod.c index 60d1889bf..defc0ca29 100644 --- a/src/util/kmod.c +++ b/src/util/kmod.c @@ -31,6 +31,50 @@ bool ffKmodLoaded(const char* modName) { return modfind(modName) >= 0; } +#elif __NetBSD__ +#include "util/stringUtils.h" + +#include +#include + +typedef struct FFNbsdModList +{ + int len; + modstat_t mods[]; +} FFNbsdModList; + +bool ffKmodLoaded(const char* modName) +{ + static FFNbsdModList* list = NULL; + + if (list == NULL) + { + struct iovec iov = {}; + + // 初始尝试分配的内存大小 + for (size_t len = 8192;; len = iov.iov_len) + { + iov.iov_len = len; + iov.iov_base = realloc(iov.iov_base, len); + if (modctl(MODCTL_STAT, &iov) < 0) + { + free(iov.iov_base); + return true; // ignore errors + } + + if (len >= iov.iov_len) break; + } + list = (FFNbsdModList*) iov.iov_base; + } + + for (int i = 0; i < list->len; i++) + { + if (ffStrEquals(list->mods[i].ms_name, modName)) + return true; + } + + return false; +} #elif __APPLE__ #include "util/apple/cf_helpers.h" #include