2 * Copyright (c) 1995, Index Data.
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.1 1995-11-13 09:27:52 quinn
8 * Fiddling with the variant stuff.
14 * This is a simple and fairly wasteful little module for nibble memory
15 * allocation. Evemtually we'll put in something better.
21 #define NMEM_CHUNK (10*1024)
23 typedef struct nmem_block
25 char *buf; /* memory allocated in this block */
26 int size; /* size of buf */
27 int top; /* top of buffer */
28 struct nmem_block *next;
31 typedef struct nmem_control
37 static nmem_block *freelist = 0; /* global freelist */
39 static void free_block(nmem_block *p)
46 * acquire a block with a minimum of size free bytes.
48 static nmem_block *get_block(int size)
52 for (r = freelist, l = 0; r; l = r, r = r->next)
66 r = xmalloc(sizeof(*r));
67 r->buf = xmalloc(r->size = get);
73 void nmem_reset(NMEM n)
82 n->blocks = n->blocks->next;
88 void *nmem_malloc(NMEM n, int size)
96 if (!p || p->size - p->top < size)
104 p->top += (size + (sizeof(long) - 1)) & ~(sizeof(long) - 1);
109 int nmem_total(NMEM n)
114 NMEM nmem_create(void)
116 NMEM r = xmalloc(sizeof(*r));
123 void nmem_destroy(NMEM n)