about summary refs log tree commit diff
path: root/src/malloc/__simple_malloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/malloc/__simple_malloc.c')
-rw-r--r--src/malloc/__simple_malloc.c46
1 files changed, 0 insertions, 46 deletions
diff --git a/src/malloc/__simple_malloc.c b/src/malloc/__simple_malloc.c
deleted file mode 100644
index c8293908..00000000
--- a/src/malloc/__simple_malloc.c
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <stdlib.h>
-#include <stdint.h>
-#include <limits.h>
-#include <errno.h>
-#include "libc.h"
-
-uintptr_t __brk(uintptr_t);
-
-#define ALIGN 16
-
-void *__simple_malloc(size_t n)
-{
-	static uintptr_t cur, brk;
-	uintptr_t base, new;
-	static int lock;
-	size_t align=1;
-
-	if (!n) n++;
-	if (n > SIZE_MAX/2) goto toobig;
-
-	while (align<n && align<ALIGN)
-		align += align;
-	n = n + align - 1 & -align;
-
-	LOCK(&lock);
-	if (!cur) cur = brk = __brk(0)+16;
-	base = cur + align-1 & -align;
-	if (n > SIZE_MAX - PAGE_SIZE - base) goto fail;
-	if (base+n > brk) {
-		new = base+n + PAGE_SIZE-1 & -PAGE_SIZE;
-		if (__brk(new) != new) goto fail;
-		brk = new;
-	}
-	cur = base+n;
-	UNLOCK(&lock);
-
-	return (void *)base;
-
-fail:
-	UNLOCK(&lock);
-toobig:
-	errno = ENOMEM;
-	return 0;
-}
-
-weak_alias(__simple_malloc, malloc);