2 * Copyright (C) 1994, Index Data I/S
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.2 1995-03-17 10:17:52 quinn
8 * Added memory management.
10 * Revision 1.1 1995/03/14 10:27:40 quinn
11 * Modified makefile to use common lib
12 * Beginning to add memory management to odr
19 #define ODR_MEM_CHUNK (10*1024)
21 typedef struct odr_memblock
26 struct odr_memblock *next;
29 static odr_memblock *freelist = 0;
31 static void free_block(odr_memblock *p)
37 static odr_memblock *get_block(int size)
41 for (r = freelist, l = 0; r; l = r, r = r->next)
51 int get = ODR_MEM_CHUNK;
55 if (!(r = malloc(sizeof(*r))))
57 if (!(r->buf = malloc(r->size = get)))
64 void odr_release_mem(odr_memblock *p)
76 void *odr_malloc(ODR o, int size)
78 struct odr_memblock *p = o->mem;
81 if (!p || p->size - p->top < size)
82 if (!(p = get_block(size)))
93 p->top += (size + (sizeof(long) - 1)) & ~(sizeof(long) - 1);