From 21ed0edce32b8a0b195bcac3e952e6636b046fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Thu, 19 Feb 1998 16:53:29 -0800 Subject: [PATCH] new file to facilitate DEBUG_MALLOC (and other things) Rev: src/block_alloc.h:1.1 --- src/block_alloc.h | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/block_alloc.h diff --git a/src/block_alloc.h b/src/block_alloc.h new file mode 100644 index 0000000000..f2b41ead34 --- /dev/null +++ b/src/block_alloc.h @@ -0,0 +1,60 @@ +#define INIT_BLOCK(X) +#define EXIT_BLOCK(X) +#define BLOCK_ALLOC(DATA,BSIZE) \ + \ +struct PIKE_CONCAT(DATA,_block) \ +{ \ + struct PIKE_CONCAT(DATA,_block) *next; \ + struct DATA x[BSIZE]; \ +}; \ + \ +static struct PIKE_CONCAT(DATA,_block) *PIKE_CONCAT(DATA,_blocks)=0; \ +static struct DATA *PIKE_CONCAT3(free_,DATA,s)=0; \ + \ +struct DATA *PIKE_CONCAT(alloc_,DATA)(void) \ +{ \ + struct DATA *tmp; \ + if(!PIKE_CONCAT3(free_,DATA,s)) \ + { \ + struct PIKE_CONCAT(DATA,_block) *n; \ + int e; \ + n=(struct PIKE_CONCAT(DATA,_block) *)malloc(sizeof(struct PIKE_CONCAT(DATA,_block))); \ + if(!n) \ + { \ + fprintf(stderr,"Fatal: out of memory.\n"); \ + exit(17); \ + } \ + n->next=PIKE_CONCAT(DATA,_blocks); \ + PIKE_CONCAT(DATA,_blocks)=n; \ + \ + for(e=0;e<BSIZE;e++) \ + { \ + n->x[e].next=PIKE_CONCAT3(free_,DATA,s); \ + PIKE_CONCAT3(free_,DATA,s)=n->x+e; \ + } \ + } \ + \ + tmp=PIKE_CONCAT3(free_,DATA,s); \ + PIKE_CONCAT3(free_,DATA,s)=tmp->next; \ + INIT_BLOCK(tmp); \ + return tmp; \ +} \ + \ +inline void PIKE_CONCAT(free_,DATA)(struct DATA *d) \ +{ \ + EXIT_BLOCK(d); \ + d->next=PIKE_CONCAT3(free_,DATA,s); \ + PIKE_CONCAT3(free_,DATA,s)=d; \ +} \ + \ +void PIKE_CONCAT3(free_all_,DATA,_blocks)(void) \ +{ \ + struct PIKE_CONCAT(DATA,_block) *tmp; \ + while((tmp=PIKE_CONCAT(DATA,_blocks))) \ + { \ + PIKE_CONCAT(DATA,_blocks)=tmp->next; \ + free((char *)tmp); \ + } \ + PIKE_CONCAT(DATA,_blocks)=0; \ +} \ + -- GitLab