From 27c3222715999782ece21eaa33427bf97ac04a2b Mon Sep 17 00:00:00 2001 From: Robert Shearman Date: Fri, 31 Mar 2006 12:49:36 +0100 Subject: [PATCH] widl: Re-use print_phase_basetype for generating return value marshaling and unmarshaling code. --- tools/widl/client.c | 10 +--------- tools/widl/server.c | 13 +------------ tools/widl/typegen.h | 1 + 3 files changed, 3 insertions(+), 21 deletions(-) diff --git a/tools/widl/client.c b/tools/widl/client.c index ee8a625fcea..355da9b0dee 100644 --- a/tools/widl/client.c +++ b/tools/widl/client.c @@ -272,15 +272,7 @@ static void write_function_stubs(type_t *iface) /* unmarshal return value */ if (!is_void(def->type, NULL)) - { - fprintf(client, "\n"); - print_client("_RetVal = *("); - write_type(client, def->type, def, def->tname); - fprintf(client, " *)_StubMsg.Buffer;\n"); - print_client("_StubMsg.Buffer += sizeof("); - write_type(client, def->type, def, def->tname); - fprintf(client, ");\n"); - } + print_phase_basetype(client, indent, PHASE_UNMARSHAL, PASS_RETURN, def, "_RetVal"); /* update proc_offset */ if (func->args) diff --git a/tools/widl/server.c b/tools/widl/server.c index d7a2d7e978f..8261dc7ee60 100644 --- a/tools/widl/server.c +++ b/tools/widl/server.c @@ -388,18 +388,7 @@ static void write_function_stubs(type_t *iface) /* marshall the return value */ if (!is_void(def->type, NULL)) - { - unsigned int alignment; - unsigned int size = get_required_buffer_size(def, &alignment); - print_server("_StubMsg.Buffer += (unsigned char *)(((long)_StubMsg.Buffer + %u) & ~0x%x);\n", - size - 1, size - 1); - print_server("*("); - write_type(server, def->type, def, def->tname); - fprintf(server, " *)_StubMsg.Buffer = _RetVal;\n"); - print_server("_StubMsg.Buffer += sizeof("); - write_type(server, def->type, def, def->tname); - fprintf(server, ");\n"); - } + print_phase_basetype(server, indent, PHASE_MARSHAL, PASS_RETURN, def, "_RetVal"); indent--; print_server("}\n"); diff --git a/tools/widl/typegen.h b/tools/widl/typegen.h index 61e317cfea3..ee2179cf956 100644 --- a/tools/widl/typegen.h +++ b/tools/widl/typegen.h @@ -39,6 +39,7 @@ void write_procformatstring(FILE *file, type_t *iface); void write_typeformatstring(FILE *file, type_t *iface); size_t get_type_memsize(const type_t *type); unsigned int get_required_buffer_size(const var_t *var, unsigned int *alignment); +void print_phase_basetype(FILE *file, int indent, enum remoting_phase phase, enum pass pass, const var_t *var, const char *varname); void write_remoting_arguments(FILE *file, int indent, const func_t *func, unsigned int *type_offset, enum pass pass, enum remoting_phase phase); size_t get_size_procformatstring_var(const var_t *var); size_t get_size_typeformatstring_var(const var_t *var);