Index: trunk/i386/boot2/drivers.c =================================================================== --- trunk/i386/boot2/drivers.c (revision 1406) +++ trunk/i386/boot2/drivers.c (revision 1407) @@ -726,7 +726,7 @@ ParseXML( char * buffer, ModulePtr * module, TagPtr * personalities ) { long length, pos; - TagPtr moduleDict; + TagPtr moduleDict, required; ModulePtr tmpModule; pos = 0; @@ -746,28 +746,15 @@ if (length == -1) return -1; - // NOTE: This currenlt knows nothing about /Extra/. If you have a kext in there that - // does not have the required property, it will not load. - char* required = XMLCastString(XMLGetProperty(moduleDict, kPropOSBundleRequired)); - if(!required) return -2; // don't load te kext. - - // NOTE: Only valid values are - // kOSBundleRequiredConsole - Always required (for text? console) - // kOSBundleRequiredLocalRoot - Required for local disk booting - // kOSBundleRequiredNetworkRoot - required boot from network - // kOSBundleRequiredRoot - always needed - // kOSBundleRequiredSafeBoot - Only loaded for safe mode. - // Others - invalid + required = XMLGetProperty(moduleDict, kPropOSBundleRequired); + if ( (required == 0) || + (required->type != kTagTypeString) || + !strcmp(required->string, "Safe Boot")) + { + XMLFreeTag(moduleDict); + return -2; + } - - if (!(gBootMode & kBootModeSafe) && strcmp(required, "Safe Boot") == 0) - { - // Don't load Safe Boot kexts if -x not specified. - XMLFreeTag(moduleDict); - return -2; - } - - tmpModule = malloc(sizeof(Module)); if (tmpModule == 0) {