aboutsummaryrefslogtreecommitdiffstats
path: root/sdk/other/mempool.c
diff options
context:
space:
mode:
Diffstat (limited to 'sdk/other/mempool.c')
-rw-r--r--sdk/other/mempool.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/sdk/other/mempool.c b/sdk/other/mempool.c
new file mode 100644
index 0000000..ef27638
--- /dev/null
+++ b/sdk/other/mempool.c
@@ -0,0 +1,49 @@
+/*
+ * Memory pool creation.
+ * $Id$
+ * Copyright (c) 1997 by Tycho Softworks.
+ * For conditions of distribution and reuse see product license.
+ */
+
+#include <other/memory.h>
+#include <std/files.h>
+#include <std/math.h>
+#include <std/process.h>
+
+static void *fault(MEMPOOL *mem, int request)
+{
+ fputs("* mempool: memory pool exhausted\n", stderr);
+ exit(EX_SOFTWARE);
+}
+
+MEMPOOL *mempool(int psize, int pcount)
+{
+ char *page;
+ MEMPAGE *first;
+ MEMPOOL *pool;
+
+ psize = align(psize, __MEMALIGN);
+ if(NULL == (page = (char *)malloc(psize)))
+ return NULL;
+
+ first = (MEMPAGE *)page;
+ pool = (MEMPOOL *)(page + sizeof(MEMPAGE));
+
+ first->page_next = NULL;
+ first->page_used = sizeof(MEMPOOL);
+
+ pool->mem_psize = psize - sizeof(MEMPAGE);
+ pool->mem_pcount = pcount;
+ pool->mem_pused = 1;
+ pool->mem_pfault = fault;
+ pool->mem_reuse = NULL;
+ pool->mem_last = first;
+ pool->mem_free = NULL;
+ return pool;
+}
+
+
+
+
+
+