ref: addb36ee488757125c43c02076006dba8c9e69bc
parent: a375c9ac38e72dc5b0a6710c8da89245d154b435
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Fri May 10 08:10:02 EDT 2019
ape: fix malloc to deal with more than 4GB of memory on 64 bit systems
--- a/sys/src/ape/lib/ap/plan9/malloc.c
+++ b/sys/src/ape/lib/ap/plan9/malloc.c
@@ -1,10 +1,9 @@
+#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <lock.h>
-typedef unsigned int uint;
-
enum
{
MAGIC = 0xbada110c,
@@ -38,7 +37,7 @@
void*
malloc(size_t size)
{
- uint next;
+ uintptr_t next;
int pow, n;
Bucket *bp, *nbp;
@@ -70,16 +69,16 @@
if(pow < CUTOFF) {
n = (CUTOFF-pow)+2;
bp = sbrk(size*n);
- if((int)bp < 0){
+ if(bp == (void*)-1){
unlock(&arena);
return nil;
}
- next = (uint)bp+size;
+ next = (uintptr_t)bp+size;
nbp = (Bucket*)next;
arena.btab[pow] = nbp;
for(n -= 2; n; n--) {
- next = (uint)nbp+size;
+ next = (uintptr_t)nbp+size;
nbp->next = (Bucket*)next;
nbp->size = pow;
nbp = nbp->next;
@@ -88,7 +87,7 @@
}
else {
bp = sbrk(size);
- if((int)bp < 0){
+ if(bp == (void*)-1){
unlock(&arena);
return nil;
}
@@ -110,7 +109,7 @@
return;
/* Find the start of the structure */
- bp = (Bucket*)((uint)ptr - datoff);
+ bp = (Bucket*)((uintptr_t)ptr - datoff);
if(bp->magic != MAGIC)
abort();
@@ -127,7 +126,7 @@
realloc(void *ptr, size_t n)
{
void *new;
- uint osize;
+ size_t osize;
Bucket *bp;
if(ptr == nil)
@@ -134,7 +133,7 @@
return malloc(n);
/* Find the start of the structure */
- bp = (Bucket*)((uint)ptr - datoff);
+ bp = (Bucket*)((uintptr_t)ptr - datoff);
if(bp->magic != MAGIC)
abort();