aboutsummaryrefslogtreecommitdiffstats
path: root/sdk/other/mempool.c
blob: ef27638219e1528ee11f1d57bb8eb52a5d258812 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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;
}