| Index: fusl/src/malloc/lite_malloc.c
|
| diff --git a/fusl/src/malloc/lite_malloc.c b/fusl/src/malloc/lite_malloc.c
|
| index a7e4a9f7b511bdbf2db4d5018e5088c19ed38570..65643514f35e4221e7f3f3dfd83241aecb4062b0 100644
|
| --- a/fusl/src/malloc/lite_malloc.c
|
| +++ b/fusl/src/malloc/lite_malloc.c
|
| @@ -6,44 +6,45 @@
|
|
|
| #define ALIGN 16
|
|
|
| -void *__expand_heap(size_t *);
|
| -
|
| -static void *__simple_malloc(size_t n)
|
| -{
|
| - static char *cur, *end;
|
| - static volatile int lock[2];
|
| - size_t align=1, pad;
|
| - void *p;
|
| -
|
| - if (!n) n++;
|
| - while (align<n && align<ALIGN)
|
| - align += align;
|
| -
|
| - LOCK(lock);
|
| -
|
| - pad = -(uintptr_t)cur & align-1;
|
| -
|
| - if (n <= SIZE_MAX/2 + ALIGN) n += pad;
|
| -
|
| - if (n > end-cur) {
|
| - size_t m = n;
|
| - char *new = __expand_heap(&m);
|
| - if (!new) {
|
| - UNLOCK(lock);
|
| - return 0;
|
| - }
|
| - if (new != end) {
|
| - cur = new;
|
| - n -= pad;
|
| - pad = 0;
|
| - }
|
| - end = new + m;
|
| - }
|
| -
|
| - p = cur + pad;
|
| - cur += n;
|
| - UNLOCK(lock);
|
| - return p;
|
| +void* __expand_heap(size_t*);
|
| +
|
| +static void* __simple_malloc(size_t n) {
|
| + static char *cur, *end;
|
| + static volatile int lock[2];
|
| + size_t align = 1, pad;
|
| + void* p;
|
| +
|
| + if (!n)
|
| + n++;
|
| + while (align < n && align < ALIGN)
|
| + align += align;
|
| +
|
| + LOCK(lock);
|
| +
|
| + pad = -(uintptr_t)cur & align - 1;
|
| +
|
| + if (n <= SIZE_MAX / 2 + ALIGN)
|
| + n += pad;
|
| +
|
| + if (n > end - cur) {
|
| + size_t m = n;
|
| + char* new = __expand_heap(&m);
|
| + if (!new) {
|
| + UNLOCK(lock);
|
| + return 0;
|
| + }
|
| + if (new != end) {
|
| + cur = new;
|
| + n -= pad;
|
| + pad = 0;
|
| + }
|
| + end = new + m;
|
| + }
|
| +
|
| + p = cur + pad;
|
| + cur += n;
|
| + UNLOCK(lock);
|
| + return p;
|
| }
|
|
|
| weak_alias(__simple_malloc, malloc);
|
|
|