summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app-editors/emacs/files/preload.c')
-rw-r--r--app-editors/emacs/files/preload.c88
1 files changed, 0 insertions, 88 deletions
diff --git a/app-editors/emacs/files/preload.c b/app-editors/emacs/files/preload.c
deleted file mode 100644
index 65cdceff..00000000
--- a/app-editors/emacs/files/preload.c
+++ /dev/null
@@ -1,88 +0,0 @@
-// http://www.openwall.com/lists/musl/2015/02/03/1
-#include <pthread.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dlfcn.h>
-#include <unistd.h>
-#include <stdio.h>
-
-static void *(*real_malloc)(size_t);
-static void *initial_brk;
-
-static pthread_once_t once_control[1];
-static void once_func()
-{
- real_malloc = dlsym(RTLD_NEXT, "malloc");
- initial_brk = sbrk(0);
-}
-
-static int cmp(const void *a, const void *b)
-{
- void *aa = *(void **)a, *bb = *(void **)b;
- return aa < bb ? -1 : aa > bb ? 1 : 0;
-}
-
-void *malloc(size_t n)
-{
- size_t i, j, k;
- pthread_once(once_control, once_func);
- if (n < 100000 || n > (size_t)-1/2) {
- void *p;
- do p = real_malloc(n);
- while (p > sbrk(0) || (p && p < initial_brk));
- return p;
- }
- size_t cnt = n/16384;
- void **list = real_malloc(sizeof *list * cnt);
- if (!list) return 0;
- for (i=0; i<cnt; i++) list[i] = 0;
- for (i=0; i<cnt; i++) {
- list[i] = real_malloc(65536 - 2*sizeof(size_t));
- if (!list[i]) goto fail;
- if (i<cnt/4) continue;
- size_t base = 0;
- qsort(list, i+1, sizeof(void *), cmp);
- for (j=0; j<i; j++) {
- char *p = list[base];
- char *s = list[j];
- char *z = list[j+1];
- if (z-s > 65536) {
- base = j+1;
- continue;
- }
- if (z-p < n+64) {
- continue;
- }
- for (k=0; k<base; k++) free(list[k]);
- *(size_t *)(p-sizeof(size_t)) = z-p | 1;
- *(size_t *)(z-2*sizeof(size_t)) = z-p | 1;
- for (k=j+1; k<i+1; k++) free(list[k]);
- free(list);
- return p;
- }
- }
-fail:
- for (i=0; i<cnt; i++) free(list[i]);
- free(list);
- return 0;
-}
-
-void *calloc(size_t n, size_t m)
-{
- if ((size_t)-1/n <= m) n *= m;
- else n = (size_t)-1;
- void *p = malloc(n);
- if (p) memset(p, 0, n);
- return p;
-}
-
-void *realloc(void *p, size_t n)
-{
- void *q = malloc(n);
- if (!q) return 0;
- size_t l = *(size_t *)((char *)p - sizeof(size_t)) & -8;
- memcpy(q, p, l<n ? l : n);
- free(p);
- return q;
-}