diff options
author | William Harrington <kb0iic@berzerkula.org> | 2025-01-14 16:06:02 -0600 |
---|---|---|
committer | William Harrington <kb0iic@berzerkula.org> | 2025-01-14 16:06:02 -0600 |
commit | 0cc9b20c15460213e488bf5e70963b941482f628 (patch) | |
tree | bb0143245583ec846630f39bfa2258dba640ccd7 /sdk/other/mempool.c | |
parent | 0e084ade5069756d487b5c948c48b777e37c00c9 (diff) |
Add source.
Diffstat (limited to 'sdk/other/mempool.c')
-rw-r--r-- | sdk/other/mempool.c | 49 |
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; +} + + + + + + |