summaryrefslogtreecommitdiffstats
path: root/src/common/impl/kmod_sunos.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/impl/kmod_sunos.c')
-rw-r--r--src/common/impl/kmod_sunos.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/common/impl/kmod_sunos.c b/src/common/impl/kmod_sunos.c
new file mode 100644
index 0000000..da392e2
--- /dev/null
+++ b/src/common/impl/kmod_sunos.c
@@ -0,0 +1,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);
+}