[ruby/yarp] remove reallocs preparing for custom memory management

https://github.com/ruby/yarp/commit/bd0b421504
This commit is contained in:
HParker 2023-08-31 15:36:57 -07:00 committed by git
parent 570ebeaee2
commit d617b1b630
2 changed files with 9 additions and 2 deletions

View File

@ -25,8 +25,12 @@ yp_newline_list_init(yp_newline_list_t *list, const uint8_t *start, size_t capac
bool bool
yp_newline_list_append(yp_newline_list_t *list, const uint8_t *cursor) { yp_newline_list_append(yp_newline_list_t *list, const uint8_t *cursor) {
if (list->size == list->capacity) { if (list->size == list->capacity) {
size_t * original_offsets = list->offsets;
list->capacity = (list->capacity * 3) / 2; list->capacity = (list->capacity * 3) / 2;
list->offsets = (size_t *) realloc(list->offsets, list->capacity * sizeof(size_t)); list->offsets = (size_t *) calloc(list->capacity, sizeof(size_t));
memcpy(list->offsets, original_offsets, list->size * sizeof(size_t));
free(original_offsets);
if (list->offsets == NULL) return false; if (list->offsets == NULL) return false;
} }

View File

@ -12,8 +12,11 @@ yp_string_list_init(yp_string_list_t *string_list) {
void void
yp_string_list_append(yp_string_list_t *string_list, yp_string_t *string) { yp_string_list_append(yp_string_list_t *string_list, yp_string_t *string) {
if (string_list->length + 1 > string_list->capacity) { if (string_list->length + 1 > string_list->capacity) {
yp_string_t * original_string = string_list->strings;
string_list->capacity *= 2; string_list->capacity *= 2;
string_list->strings = (yp_string_t *) realloc(string_list->strings, string_list->capacity * sizeof(yp_string_t)); string_list->strings = (yp_string_t *) malloc(string_list->capacity * sizeof(yp_string_t));
memcpy(string_list->strings, original_string, (string_list->length) * sizeof(yp_string_t));
free(original_string);
} }
string_list->strings[string_list->length++] = *string; string_list->strings[string_list->length++] = *string;