- /*****
- * Declare the fake kmod_info structs for built-in components
- * that must be tracked as independent units for dependencies.
- */
- fakeKmods = OSDynamicCast(OSDictionary,
- OSUnserialize(gIOKernelKmods, &errorString));
-
- if (!fakeKmods) {
- if (errorString) {
- panic("Kernel kmod list syntax error: %s\n",
- errorString->getCStringNoCopy());
- errorString->release();
- } else {
- panic("Error loading kernel kmod list.\n");
- }
- }
-
- kmodIter = OSCollectionIterator::withCollection(fakeKmods);
- if (!kmodIter) {
- panic("Can't declare in-kernel kmods.\n");
- }
- while ((kmodName = OSDynamicCast(OSString, kmodIter->getNextObject()))) {
-
- OSString * kmodVersion = OSDynamicCast(OSString,
- fakeKmods->getObject(kmodName));
- if (!kmodVersion) {
- panic("Can't declare in-kernel kmod; \"%s\" has "
- "an invalid version.\n",
- kmodName->getCStringNoCopy());
- }
-
- // empty version strings get replaced with current kernel version
- const char *vers = (strlen(kmodVersion->getCStringNoCopy())
- ? kmodVersion->getCStringNoCopy()
- : osrelease);
-
- if (KERN_SUCCESS != kmod_create_fake(kmodName->getCStringNoCopy(), vers)) {
- panic("Failure declaring in-kernel kmod \"%s\".\n",
- kmodName->getCStringNoCopy());
- }
- }
-
- kmodIter->release();
- fakeKmods->release();
-