| 56 | } |
| 57 | |
| 58 | void *cbm_arena_alloc(CBMArena *a, size_t n) { |
| 59 | if (!a || n == 0) { |
| 60 | return NULL; |
| 61 | } |
| 62 | /* 8-byte alignment */ |
| 63 | n = (n + ARENA_ALIGN) & ~(size_t)ARENA_ALIGN; |
| 64 | if (a->nblocks == 0) { |
| 65 | return NULL; |
| 66 | } |
| 67 | if (a->used + n > a->block_size) { |
| 68 | if (!arena_grow(a, n)) { |
| 69 | return NULL; |
| 70 | } |
| 71 | } |
| 72 | char *ptr = a->blocks[a->nblocks - SKIP_ONE] + a->used; |
| 73 | a->used += n; |
| 74 | a->total_alloc += n; |
| 75 | return ptr; |
| 76 | } |
| 77 | |
| 78 | void *cbm_arena_calloc(CBMArena *a, size_t n) { |
| 79 | void *p = cbm_arena_alloc(a, n); |
no test coverage detected