projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
malloc: cast size down to int in bin_index functions
[musl]
/
src
/
malloc
/
malloc.c
diff --git
a/src/malloc/malloc.c
b/src/malloc/malloc.c
index
ee6f170
..
207b6ef
100644
(file)
--- a/
src/malloc/malloc.c
+++ b/
src/malloc/malloc.c
@@
-1,3
+1,4
@@
+#define _GNU_SOURCE
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
@@
-119,14
+120,14
@@
static int bin_index(size_t x)
x = x / SIZE_ALIGN - 1;
if (x <= 32) return x;
if (x > 0x1c00) return 63;
x = x / SIZE_ALIGN - 1;
if (x <= 32) return x;
if (x > 0x1c00) return 63;
- return ((union { float v; uint32_t r; }){
x
}.r>>21) - 496;
+ return ((union { float v; uint32_t r; }){
(int)x
}.r>>21) - 496;
}
static int bin_index_up(size_t x)
{
x = x / SIZE_ALIGN - 1;
if (x <= 32) return x;
}
static int bin_index_up(size_t x)
{
x = x / SIZE_ALIGN - 1;
if (x <= 32) return x;
- return ((union { float v; uint32_t r; }){
x
}.r+0x1fffff>>21) - 496;
+ return ((union { float v; uint32_t r; }){
(int)x
}.r+0x1fffff>>21) - 496;
}
#if 0
}
#if 0
@@
-333,7
+334,7
@@
void *malloc(size_t n)
if (adjust_size(&n) < 0) return 0;
if (n > MMAP_THRESHOLD) {
if (adjust_size(&n) < 0) return 0;
if (n > MMAP_THRESHOLD) {
- size_t len = n + PAGE_SIZE - 1 & -PAGE_SIZE;
+ size_t len = n +
OVERHEAD +
PAGE_SIZE - 1 & -PAGE_SIZE;
char *base = __mmap(0, len, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
if (base == (void *)-1) return 0;
char *base = __mmap(0, len, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
if (base == (void *)-1) return 0;
@@
-394,7
+395,7
@@
void *realloc(void *p, size_t n)
size_t oldlen = n0 + extra;
size_t newlen = n + extra;
/* Crash on realloc of freed chunk */
size_t oldlen = n0 + extra;
size_t newlen = n + extra;
/* Crash on realloc of freed chunk */
- if ((uintptr_t)base < mal.brk) *(char *)0=0;
+ if ((uintptr_t)base < mal.brk) *(
volatile
char *)0=0;
if (newlen < PAGE_SIZE && (new = malloc(n))) {
memcpy(new, p, n-OVERHEAD);
free(p);
if (newlen < PAGE_SIZE && (new = malloc(n))) {
memcpy(new, p, n-OVERHEAD);
free(p);
@@
-457,7
+458,7
@@
void free(void *p)
char *base = (char *)self - extra;
size_t len = CHUNK_SIZE(self) + extra;
/* Crash on double free */
char *base = (char *)self - extra;
size_t len = CHUNK_SIZE(self) + extra;
/* Crash on double free */
- if ((uintptr_t)base < mal.brk) *(char *)0=0;
+ if ((uintptr_t)base < mal.brk) *(
volatile
char *)0=0;
__munmap(base, len);
return;
}
__munmap(base, len);
return;
}