Robert Shearman : widl: Handle marshaling and unmarshaling structures.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Dec 26 11:47:04 CST 2005
Module: wine
Branch: refs/heads/master
Commit: 7fb311b49f3c86ee78e4be97bbfee66e3ecc46b4
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=7fb311b49f3c86ee78e4be97bbfee66e3ecc46b4
Author: Robert Shearman <rob at codeweavers.com>
Date: Mon Dec 26 13:22:05 2005 +0100
widl: Handle marshaling and unmarshaling structures.
---
tools/widl/typegen.c | 43 ++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 42 insertions(+), 1 deletions(-)
diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index 1ed4ec7..f1f791d 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -428,11 +428,32 @@ void marshall_arguments(FILE *file, int
}
else
{
+ const char *ndrtype;
+
switch (var->type->type)
{
+ case RPC_FC_STRUCT:
+ ndrtype = "SimpleStruct";
+ break;
+ case RPC_FC_CSTRUCT:
+ case RPC_FC_CPSTRUCT:
+ ndrtype = "ConformantStruct";
+ break;
+ case RPC_FC_CVSTRUCT:
+ ndrtype = "ConformantVaryingStruct";
+ break;
+ case RPC_FC_BOGUS_STRUCT:
+ ndrtype = "ComplexStruct";
+ break;
default:
- error("marshall_arguments: Unsupported type: %s (0x%02x, ptr_level: 1)\n", var->name, var->type->type);
+ error("marshall_arguments: Unsupported type: %s (0x%02x, ptr_level: %d)\n",
+ var->name, var->type->type, var->ptr_level);
+ ndrtype = NULL;
}
+
+ print_file(file, indent,
+ "Ndr%sMarshall(&_StubMsg, (unsigned char *)%s, &__MIDL_TypeFormatString.Format[%d]);\n",
+ ndrtype, var->name, *type_offset);
}
last_size = 1;
}
@@ -583,12 +604,32 @@ void unmarshall_arguments(FILE *file, in
}
else
{
+ const char *ndrtype;
+
switch (var->type->type)
{
+ case RPC_FC_STRUCT:
+ ndrtype = "SimpleStruct";
+ break;
+ case RPC_FC_CSTRUCT:
+ case RPC_FC_CPSTRUCT:
+ ndrtype = "ConformantStruct";
+ break;
+ case RPC_FC_CVSTRUCT:
+ ndrtype = "ConformantVaryingStruct";
+ break;
+ case RPC_FC_BOGUS_STRUCT:
+ ndrtype = "ComplexStruct";
+ break;
default:
error("unmarshall_arguments: Unsupported type: %s (0x%02x, ptr_level: %d)\n",
var->name, var->type->type, var->ptr_level);
+ ndrtype = NULL;
}
+
+ print_file(file, indent,
+ "Ndr%sUnmarshall(&_StubMsg, (unsigned char *)%s, &__MIDL_TypeFormatString.Format[%d], 0);\n",
+ ndrtype, var->name, *type_offset);
}
last_size = 1;
}
More information about the wine-cvs
mailing list