// // Make sure the buf has enough bytes for whatever you're up to. int cf_buf_builder_reserve_internal(cf_buf_builder **bb_r, size_t sz) { cf_buf_builder *bb = *bb_r; // see if we need more space size_t new_sz = cf_dyn_buf_get_newsize(bb->alloc_sz, bb->used_sz, sz); if (new_sz > bb->alloc_sz) { if (bb->alloc_sz - bb->used_sz < MAX_BACKOFF) { bb = cf_realloc(bb, new_sz); if (!bb) return(-1); } else { // Only possible if buffer was reset. Avoids potential expensive // copy within realloc. cf_buf_builder *_t = cf_malloc(new_sz); if (!_t) return(-1); memcpy(_t->buf, bb->buf, bb->used_sz); _t->used_sz = bb->used_sz; cf_free(bb); bb = _t; } bb->alloc_sz = new_sz - sizeof(cf_buf_builder); *bb_r = bb; } return(0); }
// // Make sure the buf has enough bytes for whatever you're up to. int cf_buf_builder_reserve_internal(cf_buf_builder **bb_r, size_t sz) { cf_buf_builder *bb = *bb_r; // see if we need more space size_t new_sz = cf_dyn_buf_get_newsize(bb->alloc_sz, bb->used_sz, sz); if (new_sz > bb->alloc_sz) { bb = cf_realloc(bb, new_sz); if (!bb) return(-1); bb->alloc_sz = new_sz - sizeof(cf_buf_builder); *bb_r = bb; } return(0); }
// // Make sure the buf has enough bytes for whatever you're up to. int cf_dyn_buf_reserve_internal(cf_dyn_buf *db, size_t sz) { // see if we need more space size_t new_sz = cf_dyn_buf_get_newsize(db->alloc_sz, db->used_sz, sz); if (new_sz > db->alloc_sz) { uint8_t *_t; if (db->is_stack) { _t = cf_malloc(new_sz); if (!_t) return(-1); memcpy(_t, db->buf, db->used_sz); db->is_stack = false; db->buf = _t; } else { _t = cf_realloc(db->buf, new_sz); if (!_t) return(-1); db->buf = _t; } db->alloc_sz = new_sz; } return(0); }