summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHParker <HParker@github.com>2023-08-31 15:36:57 -0700
committergit <svn-admin@ruby-lang.org>2023-09-01 20:59:39 +0000
commitd617b1b6309ad974a2fb2169740f3a2969ededa0 (patch)
treec36af91834aca1c57bab7519e7b6bae5f7a99fad
parent570ebeaee2650d61887438a7f44844461dae1a2c (diff)
[ruby/yarp] remove reallocs preparing for custom memory management
https://github.com/ruby/yarp/commit/bd0b421504
-rw-r--r--yarp/util/yp_newline_list.c6
-rw-r--r--yarp/util/yp_string_list.c5
2 files changed, 9 insertions, 2 deletions
diff --git a/yarp/util/yp_newline_list.c b/yarp/util/yp_newline_list.c
index 0a2050df05..324d77de0b 100644
--- a/yarp/util/yp_newline_list.c
+++ b/yarp/util/yp_newline_list.c
@@ -25,8 +25,12 @@ yp_newline_list_init(yp_newline_list_t *list, const uint8_t *start, size_t capac
bool
yp_newline_list_append(yp_newline_list_t *list, const uint8_t *cursor) {
if (list->size == list->capacity) {
+ size_t * original_offsets = list->offsets;
+
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;
}
diff --git a/yarp/util/yp_string_list.c b/yarp/util/yp_string_list.c
index b03a3d259b..9f58d8a186 100644
--- a/yarp/util/yp_string_list.c
+++ b/yarp/util/yp_string_list.c
@@ -12,8 +12,11 @@ yp_string_list_init(yp_string_list_t *string_list) {
void
yp_string_list_append(yp_string_list_t *string_list, yp_string_t *string) {
if (string_list->length + 1 > string_list->capacity) {
+ yp_string_t * original_string = string_list->strings;
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;