Loading...
iokit/bsddev/IOKitBSDInit.cpp xnu-792.12.6 xnu-792.13.8
--- xnu/xnu-792.12.6/iokit/bsddev/IOKitBSDInit.cpp
+++ xnu/xnu-792.13.8/iokit/bsddev/IOKitBSDInit.cpp
@@ -473,6 +473,14 @@
 
     do {
 	if( (regEntry = IORegistryEntry::fromPath( "/chosen", gIODTPlane ))) {
+            data = OSDynamicCast(OSData, regEntry->getProperty( "root-matching" ));
+            if (data) {
+               matching = OSDynamicCast(OSDictionary, OSUnserializeXML((char *)data->getBytesNoCopy()));
+                if (matching) {
+                    continue;
+                }
+            }
+
 	    data = (OSData *) regEntry->getProperty( "boot-uuid" );
 	    if( data) {
 		uuidStr = (const char*)data->getBytesNoCopy();
@@ -572,10 +580,12 @@
 	// from OpenFirmware path
 	IOLog("From path: \"%s\", ", look);
 
-	if( forceNet || (0 == strncmp( look, "enet", strlen( "enet" ))) ) {
-            matching = IONetworkMatching( look, str, kMaxPathBuf );
-        } else {
-            matching = IODiskMatching( look, str, kMaxPathBuf );
+        if (!matching) {
+            if( forceNet || (0 == strncmp( look, "enet", strlen( "enet" ))) ) {
+                matching = IONetworkMatching( look, str, kMaxPathBuf );
+            } else {
+                matching = IODiskMatching( look, str, kMaxPathBuf );
+            }
         }
     }
     
@@ -677,7 +687,7 @@
         IOService * subservice = IOFindMatchingChild( service );
         if ( subservice ) service = subservice;
     } else if ( service && mediaProperty ) {
-        service = service->getProperty(mediaProperty);
+        service = (IOService *)service->getProperty(mediaProperty);
     }
 
     major = 0;