[PATCH vkd3d v3 2/2] vkd3d-shader: Allocate memory for a string buffer at init time.
Matteo Bruni
mbruni at codeweavers.com
Wed Sep 15 03:19:01 CDT 2021
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
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
More information about the wine-devel
mailing list