Dan Hipschman : widl: Fix a write_parameters_init bug.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Jun 15 07:23:04 CDT 2007
Module: wine
Branch: master
Commit: 58dea5c9a833b6587944d36f02a59ff4794fed29
URL: http://source.winehq.org/git/wine.git/?a=commit;h=58dea5c9a833b6587944d36f02a59ff4794fed29
Author: Dan Hipschman <dsh at linux.ucla.edu>
Date: Thu Jun 14 18:30:26 2007 -0700
widl: Fix a write_parameters_init bug.
---
tools/widl/proxy.c | 2 +-
tools/widl/server.c | 24 +-----------------------
tools/widl/typegen.c | 20 ++++++++++++++++++++
tools/widl/typegen.h | 2 +-
4 files changed, 23 insertions(+), 25 deletions(-)
diff --git a/tools/widl/proxy.c b/tools/widl/proxy.c
index 93eddf5..4911caf 100644
--- a/tools/widl/proxy.c
+++ b/tools/widl/proxy.c
@@ -367,7 +367,7 @@ static void gen_stub(type_t *iface, const func_t *cur, const char *cas,
print_proxy("NdrStubInitialize(_pRpcMessage, &_StubMsg, &Object_StubDesc, _pRpcChannelBuffer);\n");
fprintf(proxy, "\n");
- write_parameters_init(cur);
+ write_parameters_init(proxy, indent, cur);
print_proxy("RpcTryFinally\n");
print_proxy("{\n");
diff --git a/tools/widl/server.c b/tools/widl/server.c
index e3740ce..fd94c9a 100644
--- a/tools/widl/server.c
+++ b/tools/widl/server.c
@@ -54,28 +54,6 @@ static void print_server(const char *format, ...)
va_end(va);
}
-
-void write_parameters_init(const func_t *func)
-{
- const var_t *var;
-
- if (!func->args)
- return;
-
- LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
- {
- const type_t *t = var->type;
- const char *n = var->name;
- if (decl_indirect(t))
- print_server("MIDL_memset(&%s, 0, sizeof %s);\n", n, n);
- else if (is_ptr(t) || is_array(t))
- print_server("%s = 0;\n", n);
- }
-
- fprintf(server, "\n");
-}
-
-
static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
{
char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);
@@ -137,7 +115,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
indent--;
fprintf(server, "\n");
- write_parameters_init(func);
+ write_parameters_init(server, indent, func);
if (explicit_handle_var)
{
diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index 6da96f5..a1e4e6d 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -273,6 +273,26 @@ void print(FILE *file, int indent, const char *format, va_list va)
}
}
+void write_parameters_init(FILE *file, int indent, const func_t *func)
+{
+ const var_t *var;
+
+ if (!func->args)
+ return;
+
+ LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
+ {
+ const type_t *t = var->type;
+ const char *n = var->name;
+ if (decl_indirect(t))
+ print_file(file, indent, "MIDL_memset(&%s, 0, sizeof %s);\n", n, n);
+ else if (is_ptr(t) || is_array(t))
+ print_file(file, indent, "%s = 0;\n", n);
+ }
+
+ fprintf(file, "\n");
+}
+
static void write_formatdesc(FILE *f, int indent, const char *str)
{
print_file(f, indent, "typedef struct _MIDL_%s_FORMAT_STRING\n", str);
diff --git a/tools/widl/typegen.h b/tools/widl/typegen.h
index 77b207e..eefecd7 100644
--- a/tools/widl/typegen.h
+++ b/tools/widl/typegen.h
@@ -53,5 +53,5 @@ void write_user_quad_list(FILE *file);
void write_endpoints( FILE *f, const char *prefix, const str_list_t *list );
size_t type_memsize(const type_t *t, unsigned int *align);
int decl_indirect(const type_t *t);
-void write_parameters_init(const func_t *func);
+void write_parameters_init(FILE *file, int indent, const func_t *func);
void print(FILE *file, int indent, const char *format, va_list ap);
More information about the wine-cvs
mailing list