struct path *varray_add(struct varray *varray, struct path path) { struct path *store; if(likely(varray->last_block_pos < blocklen)) { store = varray->blocks[varray->last_block] + varray->last_block_pos++; } else { varray->blocks = realloc_checked(varray->blocks, (++varray->last_block + 1) * sizeof(*varray->blocks)); store = varray->blocks[varray->last_block] = malloc_checked(BLOCKSIZE); varray->last_block_pos = 1; } *store = path; return store; }
static bool video_coord_array_resize(video_coord_array_t *ca, unsigned cap) { size_t base_size = sizeof(float) * cap; if (!realloc_checked((void**)&ca->coords.vertex, 2 * base_size)) return false; if (!realloc_checked((void**)&ca->coords.color, 4 * base_size)) return false; if (!realloc_checked((void**)&ca->coords.tex_coord, 2 * base_size)) return false; if (!realloc_checked((void**)&ca->coords.lut_tex_coord, 2 * base_size)) return false; ca->allocated = cap; return true; }
/******************************************************************************\ Reallocate [ptr] to [size] bytes large. Abort on error. When memory checking is enabled, this calls realloc_checked() instead. \******************************************************************************/ void *C_realloc_full(const char *file, int line, const char *function, void *ptr, size_t size) { static int inited; if (!inited) { inited = TRUE; C_var_unlatch(&c_mem_check); } if (c_mem_check.value.n) return realloc_checked(file, line, function, ptr, size); ptr = realloc(ptr, size); if (!ptr) C_error_full(file, line, function, "Out of memory, tried to allocate %u bytes", size); return ptr; }