Robert Shearman : widl: Out parameters.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Dec 26 11:47:00 CST 2005


Module: wine
Branch: refs/heads/master
Commit: 4acabfd719b18e6529995ad9c961c0fa0ed55541
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=4acabfd719b18e6529995ad9c961c0fa0ed55541

Author: Robert Shearman <rob at 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))
         {




More information about the wine-cvs mailing list