Loading...
libkern/c++/OSCollection.cpp xnu-201.42.3 xnu-792
--- xnu/xnu-201.42.3/libkern/c++/OSCollection.cpp
+++ xnu/xnu-792/libkern/c++/OSCollection.cpp
@@ -21,14 +21,20 @@
  */
 /* IOArray.h created by rsulack on Thu 11-Sep-1997 */
 
+#include <libkern/OSDebug.h>
+
 #include <libkern/c++/OSCollection.h>
-#include <libkern/c++/OSArray.h>
+#include <libkern/c++/OSDictionary.h>
+
+#include <IOKit/IOKitDebug.h>
 
 #define super OSObject
 
 OSDefineMetaClassAndAbstractStructors(OSCollection, OSObject)
-OSMetaClassDefineReservedUnused(OSCollection, 0);
-OSMetaClassDefineReservedUnused(OSCollection, 1);
+
+
+OSMetaClassDefineReservedUsed(OSCollection, 0);
+OSMetaClassDefineReservedUsed(OSCollection, 1);
 OSMetaClassDefineReservedUnused(OSCollection, 2);
 OSMetaClassDefineReservedUnused(OSCollection, 3);
 OSMetaClassDefineReservedUnused(OSCollection, 4);
@@ -45,3 +51,40 @@
 
     return true;
 }
+
+void OSCollection::haveUpdated()
+{
+    if ( (gIOKitDebug & kOSLogRegistryMods) && (fOptions & kImmutable) )
+	OSReportWithBacktrace("Trying to change a collection in the registry");
+
+    updateStamp++;
+}
+
+unsigned OSCollection::setOptions(unsigned options, unsigned mask, void *)
+{
+    unsigned old = fOptions;
+
+    if (mask)
+	fOptions = (old & ~mask) | (options & mask);
+
+    return old;
+}
+
+OSCollection *  OSCollection::copyCollection(OSDictionary *cycleDict)
+{
+    if (cycleDict) {
+	OSObject *obj = cycleDict->getObject((const OSSymbol *) this);
+	if (obj)
+	    obj->retain();
+
+	return reinterpret_cast<OSCollection *>(obj);
+    }
+    else {
+	// If we are here it means that there is a collection subclass that
+	// hasn't overridden the copyCollection method.  In which case just
+	// return a reference to ourselves.  
+	// Hopefully this collection will not be inserted into the registry
+	retain();
+	return this;
+    }
+}