]> git.sur5r.net Git - cc65/commitdiff
Have _heapmaxavail() work as advertised.
authorOliver Schmidt <ol.sc@web.de>
Thu, 20 Feb 2014 20:03:52 +0000 (21:03 +0100)
committerOliver Schmidt <ol.sc@web.de>
Thu, 20 Feb 2014 20:04:11 +0000 (21:04 +0100)
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.

libsrc/common/_heapmaxavail.s

index 16fc10dded81088d702296d18d822a873ca94165..4d44fadc15a7b0a7a0fcd7d9a11468fafb6fec39 100644 (file)
@@ -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