]> git.proxmox.com Git - qemu.git/blobdiff - qemu-malloc.c
vnc: tight: fix rgb_prepare_row
[qemu.git] / qemu-malloc.c
index 676185786c4e17e49f2213e7abd9df75f7088b65..36b0b3641ee56a13a03f5e0479f945a9951e8843 100644 (file)
 
 static void *oom_check(void *ptr)
 {
-    if (ptr == NULL)
+    if (ptr == NULL) {
         abort();
+    }
     return ptr;
 }
 
-void *get_mmap_addr(unsigned long size)
+void qemu_free(void *ptr)
 {
-    return NULL;
+    free(ptr);
 }
 
-void qemu_free(void *ptr)
+static int allow_zero_malloc(void)
 {
-    free(ptr);
+#if defined(CONFIG_ZERO_MALLOC)
+    return 1;
+#else
+    return 0;
+#endif
 }
 
 void *qemu_malloc(size_t size)
 {
-    return oom_check(malloc(size));
+    if (!size && !allow_zero_malloc()) {
+        abort();
+    }
+    return oom_check(malloc(size ? size : 1));
 }
 
 void *qemu_realloc(void *ptr, size_t size)
 {
-    if (size)
-        return oom_check(realloc(ptr, size));
-    else
-        return realloc(ptr, size);
+    if (!size && !allow_zero_malloc()) {
+        abort();
+    }
+    return oom_check(realloc(ptr, size ? size : 1));
 }
 
 void *qemu_mallocz(size_t size)
 {
-    void *ptr;
-    ptr = qemu_malloc(size);
-    memset(ptr, 0, size);
-    return ptr;
+    if (!size && !allow_zero_malloc()) {
+        abort();
+    }
+    return oom_check(calloc(1, size ? size : 1));
 }
 
 char *qemu_strdup(const char *str)
@@ -76,8 +84,9 @@ char *qemu_strndup(const char *str, size_t size)
     const char *end = memchr(str, 0, size);
     char *new;
 
-    if (end)
+    if (end) {
         size = end - str;
+    }
 
     new = qemu_malloc(size + 1);
     new[size] = 0;