diff options
Diffstat (limited to 'libc/stdlib')
| -rw-r--r-- | libc/stdlib/malloc/malloc.c | 25 | 
1 files changed, 14 insertions, 11 deletions
| diff --git a/libc/stdlib/malloc/malloc.c b/libc/stdlib/malloc/malloc.c index 98ac41cd7..5ba552d25 100644 --- a/libc/stdlib/malloc/malloc.c +++ b/libc/stdlib/malloc/malloc.c @@ -186,23 +186,26 @@ malloc (size_t size)      __heap_check (&__malloc_heap, "malloc");  #endif -#if defined(__MALLOC_GLIBC_COMPAT__) -  if (unlikely(size == 0)) -      size++; +#ifdef __MALLOC_GLIBC_COMPAT__ +  if (unlikely (size == 0)) +    size++;  #else    /* Some programs will call malloc (0).  Lets be strict and return NULL */ -  if (unlikely(size == 0)) -      goto oom; +  if (unlikely (size == 0)) +    return 0;  #endif +    /* Check if they are doing something dumb like malloc(-1) */    if (unlikely(((unsigned long)size > (unsigned long)(MALLOC_HEADER_SIZE*-2)))) -      goto oom; +    goto oom;    mem = malloc_from_heap (size, &__malloc_heap); -  if (unlikely(!mem)) { -oom: -      __set_errno(ENOMEM); -      return NULL; -  } +  if (unlikely (!mem)) +    { +    oom: +      __set_errno (ENOMEM); +      return 0; +    } +    return mem;  } | 
