Loading...
libkern/c++/OSDictionary.cpp xnu-3248.50.21 xnu-2050.7.9
--- xnu/xnu-3248.50.21/libkern/c++/OSDictionary.cpp
+++ xnu/xnu-2050.7.9/libkern/c++/OSDictionary.cpp
@@ -49,6 +49,15 @@
 OSMetaClassDefineReservedUnused(OSDictionary, 6);
 OSMetaClassDefineReservedUnused(OSDictionary, 7);
 
+#if OSALLOCDEBUG
+extern "C" {
+    extern int debug_container_malloc_size;
+};
+#define ACCUMSIZE(s) do { debug_container_malloc_size += (s); } while(0)
+#else
+#define ACCUMSIZE(s)
+#endif
+
 #define EXT_CAST(obj) \
     reinterpret_cast<OSObject *>(const_cast<OSMetaClassBase *>(obj))
 
@@ -57,18 +66,16 @@
     if (!super::init())
         return false;
 
-    if (inCapacity > (UINT_MAX / sizeof(dictEntry)))
-        return false;
-
-    unsigned int size = inCapacity * sizeof(dictEntry);
+    int size = inCapacity * sizeof(dictEntry);
+
 //fOptions |= kSort;
 
-    dictionary = (dictEntry *) kalloc_container(size);
+    dictionary = (dictEntry *) kalloc(size);
     if (!dictionary)
         return false;
 
     bzero(dictionary, size);
-    OSCONTAINER_ACCUMSIZE(size);
+    ACCUMSIZE(size);
 
     count = 0;
     capacity = inCapacity;
@@ -245,7 +252,7 @@
     flushCollection();
     if (dictionary) {
         kfree(dictionary, capacity * sizeof(dictEntry));
-        OSCONTAINER_ACCUMSIZE( -(capacity * sizeof(dictEntry)) );
+        ACCUMSIZE( -(capacity * sizeof(dictEntry)) );
     }
 
     super::free();
@@ -269,33 +276,28 @@
 unsigned int OSDictionary::ensureCapacity(unsigned int newCapacity)
 {
     dictEntry *newDict;
-    unsigned int finalCapacity, oldSize, newSize;
+    int oldSize, newSize;
 
     if (newCapacity <= capacity)
         return capacity;
 
     // round up
-    finalCapacity = (((newCapacity - 1) / capacityIncrement) + 1)
+    newCapacity = (((newCapacity - 1) / capacityIncrement) + 1)
                 * capacityIncrement;
-
-    // integer overflow check
-    if (finalCapacity < newCapacity || (finalCapacity > (UINT_MAX / sizeof(dictEntry))))
-        return capacity;
-    
-    newSize = sizeof(dictEntry) * finalCapacity;
-
-    newDict = (dictEntry *) kalloc_container(newSize);
+    newSize = sizeof(dictEntry) * newCapacity;
+
+    newDict = (dictEntry *) kalloc(newSize);
     if (newDict) {
         oldSize = sizeof(dictEntry) * capacity;
 
         bcopy(dictionary, newDict, oldSize);
         bzero(&newDict[capacity], newSize - oldSize);
 
-        OSCONTAINER_ACCUMSIZE(((size_t)newSize) - ((size_t)oldSize));
+        ACCUMSIZE(newSize - oldSize);
         kfree(dictionary, oldSize);
 
         dictionary = newDict;
-        capacity = finalCapacity;
+        capacity = newCapacity;
     }
 
     return capacity;
@@ -313,7 +315,7 @@
 }
 
 bool OSDictionary::
-setObject(const OSSymbol *aKey, const OSMetaClassBase *anObject, bool onlyAdd)
+setObject(const OSSymbol *aKey, const OSMetaClassBase *anObject)
 {
     unsigned int i;
     bool exists;
@@ -331,9 +333,6 @@
     }
 
     if (exists) {
-
-	if (onlyAdd) return false;
-
 	const OSMetaClassBase *oldObject = dictionary[i].value;
     
 	haveUpdated();
@@ -360,12 +359,6 @@
     count++;
 
     return true;
-}
-
-bool OSDictionary::
-setObject(const OSSymbol *aKey, const OSMetaClassBase *anObject)
-{
-    return (setObject(aKey, anObject, false));
 }
 
 void OSDictionary::removeObject(const OSSymbol *aKey)