summaryrefslogtreecommitdiffstats
path: root/Mac/mwerks/malloc/malloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/mwerks/malloc/malloc.c')
-rw-r--r--Mac/mwerks/malloc/malloc.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/Mac/mwerks/malloc/malloc.c b/Mac/mwerks/malloc/malloc.c
index 5b644d7..754b1f7 100644
--- a/Mac/mwerks/malloc/malloc.c
+++ b/Mac/mwerks/malloc/malloc.c
@@ -333,8 +333,21 @@ realloc(cp, nbytes)
*/
expensive = 0;
if ( i == 0xff ) {
- expensive = 1;
+ /* Big block. See if it has to stay big */
+ if (nbytes+OVERHEAD > MAXMALLOC) {
+ /* Yup, try to resize it first */
+ SetPtrSize((Ptr)op, nbytes+OVERHEAD);
+ if ( MemError() == 0 ) {
+#ifdef RCHECK
+ op->ov_size = (nbytes + RSLOP - 1) & ~(RSLOP - 1);
+ *(u_short *)((caddr_t)(op + 1) + op->ov_size) = RMAGIC;
+#endif
+ return cp;
+ }
+ /* Nope, failed. Take the long way */
+ }
maxsize = GetPtrSize((Ptr)op);
+ expensive = 1;
} else {
maxsize = 1 << (i+3);
if ( nbytes + OVERHEAD > maxsize )