diff options
| -rw-r--r-- | sys/src/cmd/cc/compat | 36 | ||||
| -rw-r--r-- | sys/src/cmd/cc/compat.h | 3 |
2 files changed, 20 insertions, 19 deletions
diff --git a/sys/src/cmd/cc/compat b/sys/src/cmd/cc/compat index df59f0c98..7a9eafa0f 100644 --- a/sys/src/cmd/cc/compat +++ b/sys/src/cmd/cc/compat @@ -4,12 +4,6 @@ myaccess(char *f) return access(f, AEXIST); } -void* -mysbrk(ulong size) -{ - return sbrk(size); -} - int mycreat(char *n, int p) { @@ -77,27 +71,35 @@ myfork(void) return fork(); } + /* * real allocs */ + +extern char end[]; + +char* hunk = end; +long nhunk; +uintptr thunk; + void gethunk(void) { - char *h; - ulong nh; + long nh; - nh = NHUNK; - if(thunk >= 10L*NHUNK) - nh = 10L*NHUNK; - h = (char*)mysbrk(nh); - if(h == (char*)-1) - sysfatal("out of memory"); - if(nhunk == 0) - hunk = h; + if(thunk < NHUNK) + nh = NHUNK; + else if(thunk < 1000*NHUNK) + nh = thunk; else - nh += (h - hunk) - nhunk; + nh = 1000*NHUNK; + + if(nhunk < 0) + nhunk = 0; nhunk += nh; thunk += nh; + if(brk(hunk+nhunk) < 0) + sysfatal("out of memory"); } void* diff --git a/sys/src/cmd/cc/compat.h b/sys/src/cmd/cc/compat.h index 9f056e36a..d7f3112b5 100644 --- a/sys/src/cmd/cc/compat.h +++ b/sys/src/cmd/cc/compat.h @@ -23,12 +23,11 @@ EXTERN int myexec(char*, char*[]); EXTERN int mydup(int, int); EXTERN int myfork(void); EXTERN int mypipe(int*); -EXTERN void* mysbrk(ulong); EXTERN void gethunk(void); EXTERN char* hunk; -EXTERN uintptr nhunk; +EXTERN long nhunk; EXTERN uintptr thunk; EXTERN void* alloc(long n); |
