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