Alexandre Julliard : widl: Add support for some simple pointer types.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jan 25 06:12:10 CST 2007


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Jan 24 20:10:57 2007 +0100

widl: Add support for some simple pointer types.

---

 tools/widl/typegen.c |   36 +++++++++++++++++++++++++++---------
 1 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index f350aaa..4b4f4cf 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -1545,6 +1545,11 @@ static unsigned int get_required_buffer_
             return size;
         }
 
+        case RPC_FC_RP:
+            if (is_base_type( type->ref->type ) || type->ref->type == RPC_FC_STRUCT)
+                return get_required_buffer_size_type( type->ref, 0, NULL, name, alignment );
+            return 0;
+
         default:
             error("get_required_buffer_size: Unknown/unsupported type: %s (0x%02x)\n", name, type->type);
             return 0;
@@ -1918,30 +1923,43 @@ void write_remoting_arguments(FILE *file
         }
         else if (var->ptr_level == 0)
         {
-            const char *ndrtype;
-
             switch (rtype)
             {
             case RPC_FC_STRUCT:
-                ndrtype = "SimpleStruct";
+                print_phase_function(file, indent, "SimpleStruct", phase, var->name, *type_offset);
                 break;
             case RPC_FC_CSTRUCT:
             case RPC_FC_CPSTRUCT:
-                ndrtype = "ConformantStruct";
+                print_phase_function(file, indent, "ConformantStruct", phase, var->name, *type_offset);
                 break;
             case RPC_FC_CVSTRUCT:
-                ndrtype = "ConformantVaryingStruct";
+                print_phase_function(file, indent, "ConformantVaryingStruct", phase, var->name, *type_offset);
                 break;
             case RPC_FC_BOGUS_STRUCT:
-                ndrtype = "ComplexStruct";
+                print_phase_function(file, indent, "ComplexStruct", phase, var->name, *type_offset);
+                break;
+            case RPC_FC_RP:
+                if (is_base_type( var->type->ref->type ))
+                {
+                    print_phase_basetype(file, indent, phase, pass, var, var->name);
+                }
+                else if (var->type->ref->type == RPC_FC_STRUCT)
+                {
+                    if (phase != PHASE_BUFFERSIZE && phase != PHASE_FREE)
+                        print_phase_function(file, indent, "SimpleStruct", phase, var->name, *type_offset + 4);
+                }
+                else
+                {
+                    const var_t *iid;
+                    if ((iid = get_attrp( var->attrs, ATTR_IIDIS )))
+                        print_file( file, indent, "_StubMsg.MaxCount = (unsigned long)%s;\n", iid->name );
+                    print_phase_function(file, indent, "Pointer", phase, var->name, *type_offset);
+                }
                 break;
             default:
                 error("write_remoting_arguments: Unsupported type: %s (0x%02x, ptr_level: %d)\n",
                     var->name, rtype, var->ptr_level);
-                ndrtype = NULL;
             }
-
-            print_phase_function(file, indent, ndrtype, phase, var->name, *type_offset);
         }
         else
         {




More information about the wine-cvs mailing list