From: Oliver Schmidt
Date: Thu, 20 Feb 2014 20:03:52 +0000 (+0100)
Subject: Have _heapmaxavail() work as advertised.
X-Git-Tag: V2.15~147
X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=d001a6f1a0ec23366ab435d7673908f9690a99bb;p=cc65
Have _heapmaxavail() work as advertised.
The cc65 doc explicitly states that the return value of _heapmaxavail() can be used as parameter of malloc(). To actually allow for that the size of HEAP_ADMIN_SPACE has to be substracted from the raw size of the largest free heap block.
---
diff --git a/libsrc/common/_heapmaxavail.s b/libsrc/common/_heapmaxavail.s
index 16fc10dde..4d44fadc1 100644
--- a/libsrc/common/_heapmaxavail.s
+++ b/libsrc/common/_heapmaxavail.s
@@ -61,7 +61,7 @@ __heapmaxavail:
; F = F->next;
-@L2: iny ; Points to F->next
+@L2: iny ; Points to F->next
lda (ptr1),y
tax
iny
@@ -69,8 +69,17 @@ __heapmaxavail:
stx ptr1
jmp @L1
-; return Size;
+; if (Size < HEAP_ADMIN_SPACE) return 0;
@L3: lda ptr2
+ sub #HEAP_ADMIN_SPACE
ldx ptr2+1
+ bcs @L5
+ bne @L4
+ txa
rts
+
+; return Size - HEAP_ADMIN_SPACE;
+
+@L4: dex
+@L5: rts