Loading...
libkern/c++/OSArray.cpp xnu-8019.41.5 xnu-8792.61.2
--- xnu/xnu-8019.41.5/libkern/c++/OSArray.cpp
+++ xnu/xnu-8792.61.2/libkern/c++/OSArray.cpp
@@ -64,8 +64,7 @@
 		return false;
 	}
 
-	array = kalloc_type_tag_bt(ArrayPtrType, inCapacity, Z_WAITOK_ZERO,
-	    VM_KERN_MEMORY_LIBKERN);
+	array = kallocp_type_container(ArrayPtrType, &inCapacity, Z_WAITOK_ZERO);
 	if (!array) {
 		return false;
 	}
@@ -73,8 +72,6 @@
 	count = 0;
 	capacity = inCapacity;
 	capacityIncrement = (inCapacity)? inCapacity : 16;
-
-	os::uninitialized_value_construct(array, array + capacity);
 	OSCONTAINER_ACCUMSIZE(sizeof(*array) * inCapacity);
 
 	return true;
@@ -208,7 +205,7 @@
 OSArray::ensureCapacity(unsigned int newCapacity)
 {
 	ArraySharedPtrType *newArray;
-	vm_size_t    finalCapacity;
+	unsigned int        finalCapacity;
 
 	if (newCapacity <= capacity) {
 		return capacity;
@@ -223,24 +220,12 @@
 		return capacity;
 	}
 
-	newArray = kallocp_type_tag_bt(ArrayPtrType, &finalCapacity,
-	    Z_WAITOK, VM_KERN_MEMORY_LIBKERN);
+	newArray = kreallocp_type_container(ArrayPtrType, array,
+	    capacity, &finalCapacity, Z_WAITOK_ZERO);
 	if (newArray) {
-		// use all of the actual allocation size
-		if (finalCapacity > UINT_MAX) {
-			// failure, too large
-			kfree_type(ArrayPtrType, finalCapacity, newArray);
-			return capacity;
-		}
-
 		OSCONTAINER_ACCUMSIZE(sizeof(*array) * (finalCapacity - capacity));
-
-		os::uninitialized_move(array, array + capacity, newArray);
-		os::uninitialized_value_construct(newArray + capacity, newArray + finalCapacity);
-		os::destroy(array, array + capacity);
-		kfree_type(ArrayPtrType, capacity, array);
 		array = newArray;
-		capacity = (unsigned int) finalCapacity;
+		capacity = finalCapacity;
 	}
 
 	return capacity;