mempool-alloconly.c revision 0881f33a9a8a8e2f0623fad250d9813906fd24ce
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk/* Copyright (c) 2002-2003 Timo Sirainen */
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk/* @UNSAFE: whole file */
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk const char *name;
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk /* unsigned char data[]; */
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk#define SIZEOF_POOLBLOCK (MEM_ALIGN(sizeof(struct pool_block)))
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volkstatic const char *pool_alloconly_get_name(pool_t pool);
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volkstatic void *pool_alloconly_malloc(pool_t pool, size_t size);
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volkstatic void pool_alloconly_free(pool_t pool, void *mem);
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volkstatic void *pool_alloconly_realloc(pool_t pool, void *mem,
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volkstatic size_t pool_alloconly_get_max_easy_alloc_size(pool_t pool);
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volkstatic void block_alloc(struct alloconly_pool *pool, size_t size);
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volkpool_t pool_alloconly_create(const char *name, size_t size)
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk size_t min_alloc = sizeof(struct alloconly_pool) + SIZEOF_POOLBLOCK;
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk /* create a fake alloconly_pool so we can call block_alloc() */
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk /* now allocate the actual alloconly_pool from the created block */
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk new_apool = p_new(&apool.pool, struct alloconly_pool, 1);
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk new_apool->name = p_strdup(&new_apool->pool, name);
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk /* set base_size so p_clear() doesn't trash alloconly_pool structure. */
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk new_apool->base_size = new_apool->block->size - new_apool->block->left;
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volkstatic void pool_alloconly_destroy(struct alloconly_pool *apool)
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk /* destroy all but the last block */
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk /* destroy the last block */
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk memset(block, 0xde, SIZEOF_POOLBLOCK + apool->block->size);
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volkstatic const char *pool_alloconly_get_name(pool_t pool)
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk struct alloconly_pool *apool = (struct alloconly_pool *) pool;
42fb278a57f1c6d7d5d0c7bd2318edb721dc0ec0Pascal Volk return "alloconly";
#ifdef DEBUG
#ifndef USE_GC
void *mem;
return mem;
return TRUE;
return FALSE;
unsigned char *new_mem;
return mem;
return mem;
#ifdef DEBUG
#ifndef USE_GC