From: cuz Date: Sat, 17 Jul 2004 12:05:36 +0000 (+0000) Subject: New function heapblocksize() X-Git-Tag: V2.12.0~676 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=16f291890228bc68be4c16448f4d5260348c4773;p=cc65 New function heapblocksize() git-svn-id: svn://svn.cc65.org/cc65/trunk@3157 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/include/stdlib.h b/include/stdlib.h index eae186736..f18421a41 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -65,12 +65,16 @@ void __fastcall__ free (void* block); void __fastcall__ _heapadd (void* mem, size_t size); /* Add a block to the heap */ +size_t __fastcall__ _heapblocksize (const void* block); +/* Return the size of an allocated block */ + size_t __fastcall__ _heapmemavail (void); /* Return the total free heap space */ size_t __fastcall__ _heapmaxavail (void); /* Return the size of the largest free block on the heap */ + /* Random numbers */ #define RAND_MAX 0x7FFF int rand (void); diff --git a/libsrc/common/Makefile b/libsrc/common/Makefile index 63e5a5b2c..312e6bf6a 100644 --- a/libsrc/common/Makefile +++ b/libsrc/common/Makefile @@ -63,6 +63,7 @@ S_OBJS = _cwd.o \ _fopen.o \ _heap.o \ _heapadd.o \ + _heapblocksize.o\ _heapmaxavail.o \ _heapmemavail.o \ _oserror.o \ diff --git a/libsrc/common/_heapblocksize.s b/libsrc/common/_heapblocksize.s new file mode 100644 index 000000000..8db62e0b9 --- /dev/null +++ b/libsrc/common/_heapblocksize.s @@ -0,0 +1,39 @@ +; +; Ullrich von Bassewitz, 2004-07-17 +; +; size_t __fastcall__ _heapblocksize (const void* ptr); +; +; Return the size of an allocated block. +; + + .importzp ptr1 + .export __heapblocksize + + .include "_heap.inc" + +;----------------------------------------------------------------------------- +; Code + +__heapblocksize: + +; Decrement the block pointer so it points to the admin data + + sec + sbc #HEAP_ADMIN_SPACE ; Assume it's less than 256 + bcs L1 + dex +L1: sta ptr1 + stx ptr1+1 + +; Load the size from the given block + + ldy #1 + lda (ptr1),y + tax + dey + lda (ptr1),y + +; Done + + rts +