X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=qemu-malloc.c;h=295d1856efa235ef6a08e2bee43f016aa77406a6;hb=00070396b06392fadcee0e19d499a43b81c63c45;hp=8ad616847a04930931ba8510f91cf4ca9f2065ad;hpb=363a37d52016e0a16e3599d690f610346fc6898a;p=qemu diff --git a/qemu-malloc.c b/qemu-malloc.c index 8ad6168..295d185 100644 --- a/qemu-malloc.c +++ b/qemu-malloc.c @@ -22,6 +22,15 @@ * THE SOFTWARE. */ #include "qemu-common.h" +#include + +static void *oom_check(void *ptr) +{ + if (ptr == NULL) { + abort(); + } + return ptr; +} void *get_mmap_addr(unsigned long size) { @@ -35,20 +44,28 @@ void qemu_free(void *ptr) void *qemu_malloc(size_t size) { - return malloc(size); + if (!size) { + abort(); + } + return oom_check(malloc(size)); } void *qemu_realloc(void *ptr, size_t size) { - return realloc(ptr, size); + if (size) { + return oom_check(realloc(ptr, size)); + } else { + if (ptr) { + return realloc(ptr, size); + } + } + abort(); } void *qemu_mallocz(size_t size) { void *ptr; ptr = qemu_malloc(size); - if (!ptr) - return NULL; memset(ptr, 0, size); return ptr; } @@ -58,8 +75,21 @@ char *qemu_strdup(const char *str) char *ptr; size_t len = strlen(str); ptr = qemu_malloc(len + 1); - if (!ptr) - return NULL; - pstrcpy(ptr, len, str); + memcpy(ptr, str, len + 1); return ptr; } + +char *qemu_strndup(const char *str, size_t size) +{ + const char *end = memchr(str, 0, size); + char *new; + + if (end) { + size = end - str; + } + + new = qemu_malloc(size + 1); + new[size] = 0; + + return memcpy(new, str, size); +}