Robert Shearman : rpcrt4: Don't duplicate the conformance calculating
code, just use the
Alexandre Julliard
julliard at wine.codeweavers.com
Tue May 16 06:25:00 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: e6120f20296481d450ca9221aaa3b5b10c82c4ca
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=e6120f20296481d450ca9221aaa3b5b10c82c4ca
Author: Robert Shearman <rob at codeweavers.com>
Date: Mon May 15 16:56:27 2006 +0100
rpcrt4: Don't duplicate the conformance calculating code, just use the
common ComputeConformance function to store the result in
pStubMsg->MaxCount (as this is what callback function store the
conformance value into anyway).
---
dlls/rpcrt4/ndr_marshall.c | 58 ++++++++++++++------------------------------
1 files changed, 18 insertions(+), 40 deletions(-)
diff --git a/dlls/rpcrt4/ndr_marshall.c b/dlls/rpcrt4/ndr_marshall.c
index 7b3cc02..4b7f6e0 100644
--- a/dlls/rpcrt4/ndr_marshall.c
+++ b/dlls/rpcrt4/ndr_marshall.c
@@ -3386,46 +3386,15 @@ static PFORMAT_STRING get_arm_offset_fro
}
static PFORMAT_STRING get_non_encapsulated_union_arm(PMIDL_STUB_MESSAGE pStubMsg,
- unsigned char *pMemory,
+ ULONG value,
PFORMAT_STRING pFormat)
{
- ULONG value;
-
- pFormat = ComputeConformanceOrVariance(pStubMsg, pMemory, pFormat,
- 0, &value);
- TRACE("got switch value %lx\n", value);
pFormat += *(const SHORT*)pFormat;
pFormat += 2;
return get_arm_offset_from_union_arm_selector(pStubMsg, value, pFormat);
}
-static unsigned char *get_conformance_address(PMIDL_STUB_MESSAGE pStubMsg,
- unsigned char *pMemory,
- PFORMAT_STRING pFormat)
-{
- short ofs = *(short *)&pFormat[2];
- LPVOID ptr = NULL;
-
- switch (pFormat[0] & 0xf0)
- {
- case RPC_FC_NORMAL_CONFORMANCE:
- ptr = pMemory;
- break;
- default:
- FIXME("Conformance type %x\n", pFormat[0]);
- return NULL;
- }
-
- if(pFormat[1])
- {
- FIXME("Conformance op %x\n", pFormat[1]);
- return NULL;
- }
-
- return (unsigned char *)ptr + ofs;
-}
-
/***********************************************************************
* NdrNonEncapsulatedUnionMarshall [RPCRT4.@]
*/
@@ -3433,18 +3402,21 @@ unsigned char * WINAPI NdrNonEncapsulat
unsigned char *pMemory,
PFORMAT_STRING pFormat)
{
- unsigned char *discriminant;
unsigned short type;
+ unsigned char switch_type;
TRACE("(%p, %p, %p)\n", pStubMsg, pMemory, pFormat);
pFormat++;
- /* Marshall discriminant */
- discriminant = get_conformance_address(pStubMsg, pMemory, pFormat + 1);
- NdrBaseTypeMarshall(pStubMsg, discriminant, pFormat);
+ switch_type = *pFormat;
pFormat++;
- pFormat = get_non_encapsulated_union_arm(pStubMsg, pMemory, pFormat);
+ pFormat = ComputeConformance(pStubMsg, pMemory, pFormat, 0);
+ TRACE("got switch value 0x%lx\n", pStubMsg->MaxCount);
+ /* Marshall discriminant */
+ NdrBaseTypeMarshall(pStubMsg, (unsigned char *)&pStubMsg->MaxCount, &switch_type);
+
+ pFormat = get_non_encapsulated_union_arm(pStubMsg, pStubMsg->MaxCount, pFormat);
if(!pFormat)
return NULL;
@@ -3591,14 +3563,20 @@ void WINAPI NdrNonEncapsulatedUnionBuffe
PFORMAT_STRING pFormat)
{
unsigned short type;
+ unsigned char switch_type;
+
TRACE("(%p, %p, %p)\n", pStubMsg, pMemory, pFormat);
+ pFormat++;
+ switch_type = *pFormat;
pFormat++;
+
+ pFormat = ComputeConformance(pStubMsg, pMemory, pFormat, 0);
+ TRACE("got switch value 0x%lx\n", pStubMsg->MaxCount);
/* Add discriminant size */
- NdrBaseTypeBufferSize(pStubMsg, pMemory, pFormat);
- pFormat++;
+ NdrBaseTypeBufferSize(pStubMsg, (unsigned char *)&pStubMsg->MaxCount, &switch_type);
- pFormat = get_non_encapsulated_union_arm(pStubMsg, pMemory, pFormat);
+ pFormat = get_non_encapsulated_union_arm(pStubMsg, pStubMsg->MaxCount, pFormat);
if(!pFormat)
return;
More information about the wine-cvs
mailing list