mirror of
https://git.musl-libc.org/git/musl
synced 2025-01-22 22:22:05 +03:00
make malloc(0) return unique pointers rather than NULL
this change is made with some reluctance, but i think it's for the best. correct programs must handle either behavior, so there is little advantage to having malloc(0) return NULL. and i managed to actually make the malloc code slightly smaller with this change.
This commit is contained in:
parent
598a0147cd
commit
26031da0f8
@ -15,7 +15,7 @@ void *__simple_malloc(size_t n)
|
||||
static int lock;
|
||||
size_t align=1;
|
||||
|
||||
if (!n) return 0;
|
||||
if (!n) n++;
|
||||
if (n > SIZE_MAX/2) goto toobig;
|
||||
|
||||
while (align<n && align<ALIGN)
|
||||
|
@ -216,9 +216,14 @@ static int init_malloc()
|
||||
static int adjust_size(size_t *n)
|
||||
{
|
||||
/* Result of pointer difference must fit in ptrdiff_t. */
|
||||
if (*n > PTRDIFF_MAX - SIZE_ALIGN - PAGE_SIZE) {
|
||||
errno = ENOMEM;
|
||||
return -1;
|
||||
if (*n-1 > PTRDIFF_MAX - SIZE_ALIGN - PAGE_SIZE) {
|
||||
if (*n) {
|
||||
errno = ENOMEM;
|
||||
return -1;
|
||||
} else {
|
||||
*n = SIZE_ALIGN;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
*n = (*n + OVERHEAD + SIZE_ALIGN - 1) & SIZE_MASK;
|
||||
return 0;
|
||||
@ -325,7 +330,7 @@ void *malloc(size_t n)
|
||||
struct chunk *c;
|
||||
int i, j;
|
||||
|
||||
if (!n || adjust_size(&n) < 0) return 0;
|
||||
if (adjust_size(&n) < 0) return 0;
|
||||
|
||||
if (n > MMAP_THRESHOLD) {
|
||||
size_t len = n + PAGE_SIZE - 1 & -PAGE_SIZE;
|
||||
@ -377,7 +382,6 @@ void *realloc(void *p, size_t n)
|
||||
void *new;
|
||||
|
||||
if (!p) return malloc(n);
|
||||
else if (!n) return free(p), (void *)0;
|
||||
|
||||
if (adjust_size(&n) < 0) return 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user