[PATCH vkd3d 1/3] vkd3d-shader: Pass the output pointer to vkd3d_shader_message_context_copy_messages().

Zebediah Figura zfigura at codeweavers.com
Thu Oct 8 22:22:13 CDT 2020


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 libs/vkd3d-shader/dxbc.c                 |  4 ++--
 libs/vkd3d-shader/vkd3d_shader_main.c    | 20 +++++++++++++-------
 libs/vkd3d-shader/vkd3d_shader_private.h |  3 ++-
 3 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
index 93e7eaf5..3ddca1e9 100644
--- a/libs/vkd3d-shader/dxbc.c
+++ b/libs/vkd3d-shader/dxbc.c
@@ -2786,7 +2786,7 @@ int vkd3d_shader_parse_root_signature(const struct vkd3d_shader_code *dxbc,
 
     ret = parse_dxbc(dxbc->code, dxbc->size, &message_context, rts0_handler, root_signature);
     vkd3d_shader_message_context_trace_messages(&message_context);
-    if (messages && !(*messages = vkd3d_shader_message_context_copy_messages(&message_context)))
+    if (!vkd3d_shader_message_context_copy_messages(&message_context, messages))
         ret = VKD3D_ERROR_OUT_OF_MEMORY;
 
     vkd3d_shader_message_context_cleanup(&message_context);
@@ -3390,7 +3390,7 @@ int vkd3d_shader_serialize_root_signature(const struct vkd3d_shader_versioned_ro
 
 done:
     vkd3d_shader_message_context_trace_messages(&context.message_context);
-    if (messages && !(*messages = vkd3d_shader_message_context_copy_messages(&context.message_context)))
+    if (!vkd3d_shader_message_context_copy_messages(&context.message_context, messages))
         ret = VKD3D_ERROR_OUT_OF_MEMORY;
     vkd3d_shader_message_context_cleanup(&context.message_context);
     return ret;
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index c2fe2c8e..d3d86ed7 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -140,14 +140,20 @@ void vkd3d_shader_message_context_trace_messages_(const struct vkd3d_shader_mess
     vkd3d_string_buffer_trace_(&context->messages, function);
 }
 
-char *vkd3d_shader_message_context_copy_messages(struct vkd3d_shader_message_context *context)
+bool vkd3d_shader_message_context_copy_messages(struct vkd3d_shader_message_context *context, char **out)
 {
     char *messages;
 
-    if ((messages = vkd3d_malloc(context->messages.content_size + 1)))
-        memcpy(messages, context->messages.buffer, context->messages.content_size + 1);
+    if (!out)
+        return true;
 
-    return messages;
+    *out = NULL;
+
+    if (!(messages = vkd3d_malloc(context->messages.content_size + 1)))
+        return false;
+    memcpy(messages, context->messages.buffer, context->messages.content_size + 1);
+    *out = messages;
+    return true;
 }
 
 void vkd3d_shader_verror(struct vkd3d_shader_message_context *context,
@@ -842,7 +848,7 @@ int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char
     ret = scan_dxbc(compile_info, &message_context);
 
     vkd3d_shader_message_context_trace_messages(&message_context);
-    if (messages && !(*messages = vkd3d_shader_message_context_copy_messages(&message_context)))
+    if (!vkd3d_shader_message_context_copy_messages(&message_context, messages))
         ret = VKD3D_ERROR_OUT_OF_MEMORY;
     vkd3d_shader_message_context_cleanup(&message_context);
     return ret;
@@ -956,7 +962,7 @@ int vkd3d_shader_compile(const struct vkd3d_shader_compile_info *compile_info,
     }
 
     vkd3d_shader_message_context_trace_messages(&message_context);
-    if (messages && !(*messages = vkd3d_shader_message_context_copy_messages(&message_context)))
+    if (!vkd3d_shader_message_context_copy_messages(&message_context, messages))
         ret = VKD3D_ERROR_OUT_OF_MEMORY;
     vkd3d_shader_message_context_cleanup(&message_context);
     return ret;
@@ -1046,7 +1052,7 @@ int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
 
     ret = shader_parse_input_signature(dxbc->code, dxbc->size, &message_context, signature);
     vkd3d_shader_message_context_trace_messages(&message_context);
-    if (messages && !(*messages = vkd3d_shader_message_context_copy_messages(&message_context)))
+    if (!vkd3d_shader_message_context_copy_messages(&message_context, messages))
         ret = VKD3D_ERROR_OUT_OF_MEMORY;
 
     vkd3d_shader_message_context_cleanup(&message_context);
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index f88ea69a..98b5fbc4 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -848,7 +848,8 @@ struct vkd3d_shader_message_context
 };
 
 void vkd3d_shader_message_context_cleanup(struct vkd3d_shader_message_context *context) DECLSPEC_HIDDEN;
-char *vkd3d_shader_message_context_copy_messages(struct vkd3d_shader_message_context *context) DECLSPEC_HIDDEN;
+bool vkd3d_shader_message_context_copy_messages(struct vkd3d_shader_message_context *context,
+        char **out) DECLSPEC_HIDDEN;
 bool vkd3d_shader_message_context_init(struct vkd3d_shader_message_context *context,
         enum vkd3d_shader_log_level log_level, const char *source_name) DECLSPEC_HIDDEN;
 void vkd3d_shader_message_context_trace_messages_(const struct vkd3d_shader_message_context *context,
-- 
2.28.0




More information about the wine-devel mailing list