void *acl_dbuf_pool_alloc(ACL_DBUF_POOL *pool, int length) { void *ptr; ACL_DBUF *dbuf; if (length > pool->block_size) dbuf = acl_dbuf_alloc(pool, length); else if (pool->head == NULL) dbuf = acl_dbuf_alloc(pool, pool->block_size); else if (pool->block_size - ((char*) pool->head->ptr - (char*) pool->head->buf) < length) dbuf = acl_dbuf_alloc(pool, pool->block_size); else dbuf = pool->head; ptr = dbuf->ptr; dbuf->ptr = (char*) dbuf->ptr + length; return (ptr); }
void *acl_dbuf_pool_alloc(ACL_DBUF_POOL *pool, size_t length) { void *ptr; ACL_DBUF *dbuf; length += length % 4; if (length > pool->block_size) dbuf = acl_dbuf_alloc(pool, length); else if (pool->head == NULL) dbuf = acl_dbuf_alloc(pool, pool->block_size); else if (pool->block_size < ((char*) pool->head->ptr - (char*) pool->head->buf_addr) + length) { dbuf = acl_dbuf_alloc(pool, pool->block_size); } else dbuf = pool->head; ptr = dbuf->ptr; dbuf->ptr = (char*) dbuf->ptr + length; return ptr; }