Module: wine Branch: refs/heads/master Commit: 4acabfd719b18e6529995ad9c961c0fa0ed55541 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=4acabfd719b18e6529995ad9...
Author: Robert Shearman rob@codeweavers.com Date: Mon Dec 26 13:21:38 2005 +0100
widl: Out parameters. Marshall and unmarshall out parameters for servers and clients respectively. Write out array components for declared local variables in generated server code.
---
tools/widl/client.c | 2 ++ tools/widl/header.c | 2 +- tools/widl/header.h | 1 + tools/widl/server.c | 3 +++ 4 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/tools/widl/client.c b/tools/widl/client.c index 2c85e4a..f2d8ea2 100644 --- a/tools/widl/client.c +++ b/tools/widl/client.c @@ -210,6 +210,8 @@ static void write_function_stubs(type_t print_client("_StubMsg.BufferStart = (unsigned char *)_RpcMessage.Buffer;\n"); print_client("_StubMsg.BufferEnd = _StubMsg.BufferStart + _RpcMessage.BufferLength;\n\n");
+ unmarshall_arguments(client, indent, func, &type_offset, PASS_OUT); + /* unmarshal return value */ if (!is_void(def->type, NULL)) { diff --git a/tools/widl/header.c b/tools/widl/header.c index b60cf8e..3b85adb 100644 --- a/tools/widl/header.c +++ b/tools/widl/header.c @@ -115,7 +115,7 @@ const char* get_name(const var_t *v) return v->name; }
-static void write_array(FILE *h, const expr_t *v, int field) +void write_array(FILE *h, const expr_t *v, int field) { if (!v) return; while (NEXT_LINK(v)) v = NEXT_LINK(v); diff --git a/tools/widl/header.h b/tools/widl/header.h index 8adf929..de38a70 100644 --- a/tools/widl/header.h +++ b/tools/widl/header.h @@ -32,6 +32,7 @@ extern int is_object(attr_t *a); extern int is_local(attr_t *a); extern var_t *is_callas(attr_t *a); extern void write_args(FILE *h, var_t *arg, const char *name, int obj, int do_indent); +extern void write_array(FILE *h, const expr_t *v, int field); extern void write_forward(type_t *iface); extern void write_interface(type_t *iface); extern void write_dispinterface(type_t *iface); diff --git a/tools/widl/server.c b/tools/widl/server.c index ca4d0bd..61c688a 100644 --- a/tools/widl/server.c +++ b/tools/widl/server.c @@ -153,6 +153,7 @@ static void write_function_stubs(type_t write_type(server, var->type, var, var->tname); fprintf(server, " "); write_name(server, var); + write_array(server, var->array, 0); fprintf(server, ";\n");
var = PREV_LINK(var); @@ -293,6 +294,8 @@ static void write_function_stubs(type_t fprintf(server, "\n"); }
+ marshall_arguments(server, indent, func, &type_offset, PASS_OUT); + /* marshall the return value */ if (!is_void(def->type, NULL)) {