util/os_memory: never use os_memory_debug.h
[mesa.git] / src / util / ralloc.c
index fc35661996d77010620c1f7fa29593387d9ab6e2..f36f8bf365425a2c7a18d95865d9f912f9d21234 100644 (file)
@@ -53,7 +53,11 @@ _CRTIMP int _vscprintf(const char *format, va_list argptr);
  */
 struct
 #ifdef _MSC_VER
+#if _WIN64
+__declspec(align(16))
+#else
  __declspec(align(8))
+#endif
 #elif defined(__LP64__)
  __attribute__((aligned(16)))
 #else
@@ -197,6 +201,21 @@ reralloc_size(const void *ctx, void *ptr, size_t size)
    return resize(ptr, size);
 }
 
+void *
+rerzalloc_size(const void *ctx, void *ptr, size_t old_size, size_t new_size)
+{
+   if (unlikely(ptr == NULL))
+      return rzalloc_size(ctx, new_size);
+
+   assert(ralloc_parent(ptr) == ctx);
+   ptr = resize(ptr, new_size);
+
+   if (new_size > old_size)
+      memset((char *)ptr + old_size, 0, new_size - old_size);
+
+   return ptr;
+}
+
 void *
 ralloc_array_size(const void *ctx, size_t size, unsigned count)
 {
@@ -224,6 +243,16 @@ reralloc_array_size(const void *ctx, void *ptr, size_t size, unsigned count)
    return reralloc_size(ctx, ptr, size * count);
 }
 
+void *
+rerzalloc_array_size(const void *ctx, void *ptr, size_t size,
+                     unsigned old_count, unsigned new_count)
+{
+   if (new_count > SIZE_MAX/size)
+      return NULL;
+
+   return rerzalloc_size(ctx, ptr, size * old_count, size * new_count);
+}
+
 void
 ralloc_free(void *ptr)
 {