From: Matteo Bruni Subject: [PATCH vkd3d v3 2/2] vkd3d-shader: Allocate memory for a string buffer at init time. Message-Id: <20210915081901.3892850-2-mbruni@codeweavers.com> Date: Wed, 15 Sep 2021 10:19:01 +0200 In-Reply-To: <20210915081901.3892850-1-mbruni@codeweavers.com> References: <20210915081901.3892850-1-mbruni@codeweavers.com> Signed-off-by: Matteo Bruni --- It turns out that the solution in v2 didn't quite work because preproc_add_macro() (and possibly others) copies a struct vkd3d_string_buffer around. Rather than making that invalid, let's go entirely the other way: always allocate a small buffer at init time and, if that fails, simply crash: the situation is hopeless. libs/vkd3d-shader/vkd3d_shader_main.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c index e7afbdfc..79bb9023 100644 --- a/libs/vkd3d-shader/vkd3d_shader_main.c +++ b/libs/vkd3d-shader/vkd3d_shader_main.c @@ -25,7 +25,11 @@ VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG"); void vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer) { - memset(buffer, 0, sizeof(*buffer)); + buffer->buffer_size = 16; + buffer->content_size = 0; + buffer->buffer = vkd3d_malloc(buffer->buffer_size); + assert(buffer->buffer); + memset(buffer->buffer, 0, buffer->buffer_size); } void vkd3d_string_buffer_cleanup(struct vkd3d_string_buffer *buffer) @@ -58,9 +62,6 @@ int vkd3d_string_buffer_vprintf(struct vkd3d_string_buffer *buffer, const char * va_list a; int rc; - if (!buffer->content_size && !vkd3d_string_buffer_resize(buffer, 32)) - return -1; - for (;;) { rem = buffer->buffer_size - buffer->content_size; @@ -139,11 +140,6 @@ struct vkd3d_string_buffer *vkd3d_string_buffer_get(struct vkd3d_string_buffer_c if (!(buffer = vkd3d_malloc(sizeof(*buffer)))) return NULL; vkd3d_string_buffer_init(buffer); - if (!vkd3d_string_buffer_resize(buffer, 1)) - { - vkd3d_free(buffer); - return NULL; - } } else { -- 2.26.3