00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <stdlib.h>
00018
00019 #include "mem.h"
00020 #include "mem_internal.h"
00021
00022 _mem_pool_t *_mem_pool = 0;
00023
00024 void *mem_alloc(int n)
00025 {
00026 if (!_mem_pool) {
00027 if ((_mem_pool = malloc(sizeof(_mem_pool_t))) == NULL)
00028 return NULL;
00029
00030 INIT_LIST_HEAD(&(_mem_pool->list));
00031 }
00032
00033 _mem_pool_t *new;
00034
00035 if ((new = malloc(sizeof(_mem_pool_t))) == NULL)
00036 return NULL;
00037
00038 new->len = n;
00039
00040 if ((new->mem = malloc(new->len)) == NULL) {
00041 free(new);
00042 return NULL;
00043 }
00044
00045 mem_set(new->mem, 0, new->len);
00046
00047 list_add_tail(&(new->list), &(_mem_pool->list));
00048
00049 return new->mem;
00050 }