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;
}
|