aboutsummaryrefslogtreecommitdiffstats
path: root/sdk/other/memalloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sdk/other/memalloc.c')
-rw-r--r--sdk/other/memalloc.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/sdk/other/memalloc.c b/sdk/other/memalloc.c
new file mode 100644
index 0000000..6d31108
--- /dev/null
+++ b/sdk/other/memalloc.c
@@ -0,0 +1,35 @@
+/*
+ * Advanced memory pool allocation scheme.
+ * $Id$
+ * Copyright (c) 1997 by Tycho Softworks.
+ * For conditions of distribution and reuse consult product license.
+ */
+
+#include <other/memory.h>
+#include <std/math.h>
+
+void *memalloc(MEMPOOL *mem, int len)
+{
+ _MEMFREE *free = mem->mem_free;
+ _MEMCELL *cell = NULL;
+
+ len = align(len, __OBJALIGN);
+
+ while(free)
+ {
+ if(free->size == len)
+ {
+ cell = free->list;
+ break;
+ }
+ free = free->next;
+ }
+
+ if(cell)
+ {
+ free->list = cell->next;
+ return cell;
+ }
+
+ return memreq(mem, len);
+}