Loading...
--- xnu/xnu-3248.50.21/libkern/c++/OSDictionary.cpp
+++ xnu/xnu-3789.51.2/libkern/c++/OSDictionary.cpp
@@ -269,7 +269,8 @@
unsigned int OSDictionary::ensureCapacity(unsigned int newCapacity)
{
dictEntry *newDict;
- unsigned int finalCapacity, oldSize, newSize;
+ unsigned int finalCapacity;
+ vm_size_t oldSize, newSize;
if (newCapacity <= capacity)
return capacity;
@@ -284,8 +285,11 @@
newSize = sizeof(dictEntry) * finalCapacity;
- newDict = (dictEntry *) kalloc_container(newSize);
+ newDict = (dictEntry *) kallocp_container(&newSize);
if (newDict) {
+ // use all of the actual allocation size
+ finalCapacity = newSize / sizeof(dictEntry);
+
oldSize = sizeof(dictEntry) * capacity;
bcopy(dictionary, newDict, oldSize);
@@ -701,3 +705,21 @@
return ret;
}
+OSArray * OSDictionary::copyKeys(void)
+{
+ OSArray * array;
+
+ array = OSArray::withCapacity(count);
+ if (!array) return (0);
+
+ for (unsigned int i = 0; i < count; i++)
+ {
+ if (!array->setObject(i, dictionary[i].key))
+ {
+ array->release();
+ array = 0;
+ break;
+ }
+ }
+ return (array);
+}