From: Matteo Bruni Subject: [PATCH vkd3d v3 1/2] vkd3d-shader: Don't resize the buffer when there is enough free space. Message-Id: <20210915081901.3892850-1-mbruni@codeweavers.com> Date: Wed, 15 Sep 2021 10:19:00 +0200 Signed-off-by: Matteo Bruni --- v2: Handle rc < 0 case, use vkd3d_array_reserve(). v3: Fully make use of vkd3d_array_reserve() (thanks Henri). libs/vkd3d-shader/vkd3d_shader_main.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c index 5d7cdf01..e7afbdfc 100644 --- a/libs/vkd3d-shader/vkd3d_shader_main.c +++ b/libs/vkd3d-shader/vkd3d_shader_main.c @@ -41,20 +41,14 @@ static void vkd3d_string_buffer_clear(struct vkd3d_string_buffer *buffer) static bool vkd3d_string_buffer_resize(struct vkd3d_string_buffer *buffer, int rc) { - unsigned int new_buffer_size = buffer->buffer_size * 2; - char *new_buffer; + unsigned int new_buffer_size = rc >= 0 ? buffer->content_size + rc + 1 : max(buffer->buffer_size * 2, 32); - new_buffer_size = max(new_buffer_size, 32); - while (rc > 0 && (unsigned int)rc >= new_buffer_size - buffer->content_size) - new_buffer_size *= 2; - if (!(new_buffer = vkd3d_realloc(buffer->buffer, new_buffer_size))) + if (!vkd3d_array_reserve((void **)&buffer->buffer, &buffer->buffer_size, new_buffer_size, 1)) { ERR("Failed to grow buffer.\n"); buffer->buffer[buffer->content_size] = '\0'; return false; } - buffer->buffer = new_buffer; - buffer->buffer_size = new_buffer_size; return true; } -- 2.26.3