Alexandre Julliard : widl: Copy the UserMarshal support into the generic code.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jan 26 07:46:54 CST 2007


Module: wine
Branch: master
Commit: 9f1e9ad326de7ab32c02a61f437eab9a2078668f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9f1e9ad326de7ab32c02a61f437eab9a2078668f

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Jan 26 11:59:58 2007 +0100

widl: Copy the UserMarshal support into the generic code.

---

 tools/widl/typegen.c |   20 +++++++++++++++++++-
 1 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index 4b4f4cf..36a6228 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -159,6 +159,20 @@ void write_formatstringsdecl(FILE *f, in
     print_file(f, indent, "\n");
 }
 
+static int is_user_derived(const var_t *v)
+{
+    const type_t *type = v->type;
+
+    if (v->attrs && is_attr( v->attrs, ATTR_WIREMARSHAL )) return 1;
+
+    while (type)
+    {
+        if (type->attrs && is_attr( type->attrs, ATTR_WIREMARSHAL )) return 1;
+        type = type->ref;
+    }
+    return 0;
+}
+
 static inline int is_base_type(unsigned char type)
 {
     switch (type)
@@ -1835,7 +1849,11 @@ void write_remoting_arguments(FILE *file
 
         rtype = type->type;
 
-        if (is_string_type(var->attrs, var->ptr_level, var->array))
+        if (is_user_derived( var ))
+        {
+            print_phase_function(file, indent, "UserMarshal", phase, var->name, *type_offset);
+        }
+        else if (is_string_type(var->attrs, var->ptr_level, var->array))
         {
             if (var->array && !is_conformant_array(var->array))
                 print_phase_function(file, indent, "NonConformantString", phase, var->name, *type_offset);




More information about the wine-cvs mailing list