From 506404ba09fe5e7a4501d3f15f55df65e12d3531 Mon Sep 17 00:00:00 2001 From: Robert Shearman Date: Fri, 31 Mar 2006 12:50:46 +0100 Subject: [PATCH] widl: Only assign variables if not a string and only create a local variable if not a sized parameter. Only assign variables if not a string and only create a local variable if not a sized parameter. Fixes type mismatches in the generated code due to differences in the algorithms between creating local variables and using them. --- tools/widl/server.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/widl/server.c b/tools/widl/server.c index 9ffb6b5b335..518896514ae 100644 --- a/tools/widl/server.c +++ b/tools/widl/server.c @@ -101,12 +101,16 @@ static void declare_args(const func_t *func) while (NEXT_LINK(var)) var = NEXT_LINK(var); while (var) { + const expr_t *size_is = get_attrp(var->attrs, ATTR_SIZEIS); + int has_size = size_is && (size_is->type != EXPR_VOID); + int is_string = is_attr(var->attrs, ATTR_STRING); + in_attr = is_attr(var->attrs, ATTR_IN); out_attr = is_attr(var->attrs, ATTR_OUT); if (!out_attr && !in_attr) in_attr = 1; - if (!in_attr && !is_attr(var->attrs, ATTR_STRING)) + if (!in_attr && !has_size && !is_string) { int indirection; print_server(""); @@ -143,6 +147,7 @@ static void assign_out_args(const func_t *func) while (NEXT_LINK(var)) var = NEXT_LINK(var); while (var) { + int is_string = is_attr(var->attrs, ATTR_STRING); size_is = get_attrp(var->attrs, ATTR_SIZEIS); has_size = size_is && (size_is->type != EXPR_VOID); in_attr = is_attr(var->attrs, ATTR_IN); @@ -165,7 +170,7 @@ static void assign_out_args(const func_t *func) write_expr(server, size_is, 1); fprintf(server, " * %u);\n", get_type_memsize(type)); } - else + else if (!is_string) { fprintf(server, " = &_W%u;\n", i); if (var->ptr_level > 1)