diff --git a/src/util/kmod.c b/src/util/kmod.c index c3579c95a..60d1889bf 100644 --- a/src/util/kmod.c +++ b/src/util/kmod.c @@ -31,6 +31,19 @@ bool ffKmodLoaded(const char* modName) { return modfind(modName) >= 0; } +#elif __APPLE__ +#include "util/apple/cf_helpers.h" +#include +#include + +bool ffKmodLoaded(const char* modName) +{ + FF_CFTYPE_AUTO_RELEASE CFStringRef name = CFStringCreateWithCString(kCFAllocatorDefault, modName, kCFStringEncodingUTF8); + FF_CFTYPE_AUTO_RELEASE CFArrayRef identifiers = CFArrayCreate(kCFAllocatorDefault, (const void**) &name, 1, &kCFTypeArrayCallBacks); + FF_CFTYPE_AUTO_RELEASE CFArrayRef keys = CFArrayCreate(kCFAllocatorDefault, NULL, 0, NULL); + FF_CFTYPE_AUTO_RELEASE CFDictionaryRef kextInfo = KextManagerCopyLoadedKextInfo(identifiers, keys); + return CFDictionaryContainsKey(kextInfo, name); +} #else bool ffKmodLoaded(FF_MAYBE_UNUSED const char* modName) {