[PATCH vkd3d] vkd3d-shader: Allow a NULL buffer in vkd3d_string_buffer.
Zebediah Figura
zfigura at codeweavers.com
Mon Oct 4 12:03:12 CDT 2021
On 10/4/21 3:32 AM, Giovanni Mascellani wrote:
> Semantically, a NULL buffer is considered equivalent to the empty string.
> The accessor vkd3d_string_buffer_data implements this equivalence.
>
> The reason for this change is to avoid asserting the result of a memory
> allocation in vkd3d_string_buffer_init, while at the same time keeping
> it always successful.
Well, I guess this is one alternative to 216057. I don't dislike it.
> @@ -855,7 +856,7 @@ struct vkd3d_string_buffer *hlsl_type_to_string(struct hlsl_ctx *ctx, const stru
>
> if ((inner_string = hlsl_type_to_string(ctx, t)))
> {
> - vkd3d_string_buffer_printf(string, "%s", inner_string->buffer);
> + vkd3d_string_buffer_printf(string, "%s", vkd3d_string_buffer_data(inner_string));
> hlsl_release_string_buffer(ctx, inner_string);
> }
>
This means that here, and everywhere else, you can get rid of the NULL
check.
> diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
> index ef9eaef5..8a2dd0e3 100644
> --- a/libs/vkd3d-shader/vkd3d_shader_main.c
> +++ b/libs/vkd3d-shader/vkd3d_shader_main.c
> @@ -25,11 +25,9 @@ VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
>
> void vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer)
> {
> - buffer->buffer_size = 16;
> + buffer->buffer_size = 0;
> buffer->content_size = 0;
> - buffer->buffer = vkd3d_malloc(buffer->buffer_size);
> - assert(buffer->buffer);
> - memset(buffer->buffer, 0, buffer->buffer_size);
> + buffer->buffer = NULL;
> }
>
I'm assuming this was accidental.
> void vkd3d_string_buffer_cleanup(struct vkd3d_string_buffer *buffer)
> @@ -37,20 +35,29 @@ void vkd3d_string_buffer_cleanup(struct vkd3d_string_buffer *buffer)
> vkd3d_free(buffer->buffer);
> }
>
> +const char *vkd3d_string_buffer_data(const struct vkd3d_string_buffer *buffer)
> +{
> + return buffer->buffer ? buffer->buffer : "";
> +}
> +
Should this be defined in vkd3d_shader_private.h as an inline function?
More information about the wine-devel
mailing list