2 * Copyright (c) 1995, Index Data.
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.2 1995-12-13 13:44:37 quinn
8 * Modified Data1-system to use nmem
10 * Revision 1.1 1995/11/13 09:27:52 quinn
11 * Fiddling with the variant stuff.
17 * This is a simple and fairly wasteful little module for nibble memory
18 * allocation. Evemtually we'll put in something better.
24 #define NMEM_CHUNK (10*1024)
26 typedef struct nmem_block
28 char *buf; /* memory allocated in this block */
29 int size; /* size of buf */
30 int top; /* top of buffer */
31 struct nmem_block *next;
34 typedef struct nmem_control
38 struct nmem_control *next;
41 static nmem_block *freelist = 0; /* global freelists */
42 static nmem_control *cfreelist = 0;
44 static void free_block(nmem_block *p)
51 * acquire a block with a minimum of size free bytes.
53 static nmem_block *get_block(int size)
57 for (r = freelist, l = 0; r; l = r, r = r->next)
71 r = xmalloc(sizeof(*r));
72 r->buf = xmalloc(r->size = get);
78 void nmem_reset(NMEM n)
87 n->blocks = n->blocks->next;
93 void *nmem_malloc(NMEM n, int size)
101 if (!p || p->size - p->top < size)
109 p->top += (size + (sizeof(long) - 1)) & ~(sizeof(long) - 1);
114 int nmem_total(NMEM n)
119 NMEM nmem_create(void)
124 cfreelist = cfreelist->next;
126 r = xmalloc(sizeof(*r));
133 void nmem_destroy(NMEM n)