static int array_list_expand_internal(struct array_list *arr, int max) { void *t; int new_size; if(max < arr->size) return 0; new_size = json_max(arr->size << 1, max); if(!(t = realloc(arr->array, new_size*sizeof(void*)))) return -1; arr->array = (void**)t; (void)memset(arr->array + arr->size, 0, (new_size-arr->size)*sizeof(void*)); arr->size = new_size; return 0; }
int printbuf_memappend(struct printbuf *p, const char *buf, int size) { char *t; if(p->size - p->bpos <= size) { int new_size = json_max(p->size * 2, p->bpos + size + 8); #ifdef PRINTBUF_DEBUG MC_DEBUG("printbuf_memappend: realloc " "bpos=%d wrsize=%d old_size=%d new_size=%d\n", p->bpos, size, p->size, new_size); #endif /* PRINTBUF_DEBUG */ if(!(t = (char*)realloc(p->buf, new_size))) return -1; p->size = new_size; p->buf = t; } memcpy(p->buf + p->bpos, buf, size); p->bpos += size; p->buf[p->bpos]= '\0'; return size; }
/** * Extend the buffer p so it has a size of at least min_size. * * If the current size is large enough, nothing is changed. * * Note: this does not check the available space! The caller * is responsible for performing those calculations. */ static int printbuf_extend(struct printbuf *p, size_t min_size) { char *t; size_t new_size; if (p->size >= min_size) return 0; new_size = json_max(p->size * 2, min_size + 8); #ifdef PRINTBUF_DEBUG MC_DEBUG("printbuf_memappend: realloc " "bpos=%d min_size=%d old_size=%d new_size=%d\n", p->bpos, min_size, p->size, new_size); #endif /* PRINTBUF_DEBUG */ if(!(t = (char*)realloc(p->buf, new_size))) return -1; p->size = new_size; p->buf = t; return 0; }