Robert Shearman : rpcrt4:
Rename ComplexStructSize to ComplexStructMemorySize to reflect the fact
that it increments the buffer .
Alexandre Julliard
julliard at wine.codeweavers.com
Mon May 15 09:42:50 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: f0aea2d5eebe07cdd6c63f04d7a9c08f869749b6
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=f0aea2d5eebe07cdd6c63f04d7a9c08f869749b6
Author: Robert Shearman <rob at codeweavers.com>
Date: Mon May 15 13:35:07 2006 +0100
rpcrt4: Rename ComplexStructSize to ComplexStructMemorySize to reflect the fact that it increments the buffer.
Replace the code in EmbeddedComplexSize that sizes non-encapsulated
unions without using a memory sizer routine, since this function
shouldn't touch the buffer.
Add a new function EmbeddedComplexMemorySize and use it in some memory
sizer routines where EmbeddedComplexSize was previously used.
---
dlls/rpcrt4/ndr_marshall.c | 39 +++++++++++++++++++++++++++++----------
1 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/dlls/rpcrt4/ndr_marshall.c b/dlls/rpcrt4/ndr_marshall.c
index 678c38f..5681430 100644
--- a/dlls/rpcrt4/ndr_marshall.c
+++ b/dlls/rpcrt4/ndr_marshall.c
@@ -1523,7 +1523,14 @@ unsigned long WINAPI EmbeddedComplexSize
case RPC_FC_USER_MARSHAL:
return *(const WORD*)&pFormat[4];
case RPC_FC_NON_ENCAPSULATED_UNION:
- return NdrNonEncapsulatedUnionMemorySize(pStubMsg, pFormat);
+ pFormat += 2;
+ if (pStubMsg->fHasNewCorrDesc)
+ pFormat += 6;
+ else
+ pFormat += 4;
+
+ pFormat += *(const SHORT*)pFormat;
+ return *(const SHORT*)pFormat;
default:
FIXME("unhandled embedded type %02x\n", *pFormat);
}
@@ -1531,6 +1538,21 @@ unsigned long WINAPI EmbeddedComplexSize
}
+unsigned long WINAPI EmbeddedComplexMemorySize(PMIDL_STUB_MESSAGE pStubMsg,
+ PFORMAT_STRING pFormat)
+{
+ NDR_MEMORYSIZE m = NdrMemorySizer[*pFormat & NDR_TABLE_MASK];
+
+ if (!m)
+ {
+ FIXME("no memorysizer for data type=%02x\n", *pFormat);
+ return 0;
+ }
+
+ return m(pStubMsg, pFormat);
+}
+
+
unsigned char * WINAPI ComplexMarshall(PMIDL_STUB_MESSAGE pStubMsg,
unsigned char *pMemory,
PFORMAT_STRING pFormat,
@@ -1776,7 +1798,7 @@ unsigned char * WINAPI ComplexFree(PMIDL
return pMemory;
}
-unsigned long WINAPI ComplexStructSize(PMIDL_STUB_MESSAGE pStubMsg,
+unsigned long WINAPI ComplexStructMemorySize(PMIDL_STUB_MESSAGE pStubMsg,
PFORMAT_STRING pFormat)
{
PFORMAT_STRING desc;
@@ -1814,7 +1836,7 @@ unsigned long WINAPI ComplexStructSize(P
size += pFormat[1];
pFormat += 2;
desc = pFormat + *(const SHORT*)pFormat;
- size += EmbeddedComplexSize(pStubMsg, desc);
+ size += EmbeddedComplexMemorySize(pStubMsg, desc);
pFormat += 2;
continue;
case RPC_FC_PAD:
@@ -1940,7 +1962,6 @@ unsigned long WINAPI NdrComplexStructMem
unsigned size = *(const WORD*)(pFormat+2);
PFORMAT_STRING conf_array = NULL;
PFORMAT_STRING pointer_desc = NULL;
- unsigned long saved_memory_size;
TRACE("(%p,%p)\n", pStubMsg, pFormat);
@@ -1952,9 +1973,7 @@ unsigned long WINAPI NdrComplexStructMem
if (*(const WORD*)pFormat) pointer_desc = pFormat + *(const WORD*)pFormat;
pFormat += 2;
- saved_memory_size = pStubMsg->MemorySize;
- ComplexStructSize(pStubMsg, pFormat);
- pStubMsg->MemorySize = saved_memory_size;
+ ComplexStructMemorySize(pStubMsg, pFormat);
if (conf_array)
NdrConformantArrayMemorySize(pStubMsg, conf_array);
@@ -2333,7 +2352,7 @@ unsigned char * WINAPI NdrComplexArrayUn
pFormat = ReadVariance(pStubMsg, pFormat);
Buffer = pStubMsg->Buffer;
- esize = ComplexStructSize(pStubMsg, pFormat);
+ esize = ComplexStructMemorySize(pStubMsg, pFormat);
pStubMsg->Buffer = Buffer;
if (fMustAlloc || !*ppMemory)
@@ -2426,13 +2445,13 @@ unsigned long WINAPI NdrComplexArrayMemo
SavedMemorySize = pStubMsg->MemorySize;
Buffer = pStubMsg->Buffer;
- esize = ComplexStructSize(pStubMsg, pFormat);
+ esize = ComplexStructMemorySize(pStubMsg, pFormat);
pStubMsg->Buffer = Buffer;
MemorySize = esize * pStubMsg->MaxCount;
for (count = 0; count < pStubMsg->ActualCount; count++)
- ComplexStructSize(pStubMsg, pFormat);
+ ComplexStructMemorySize(pStubMsg, pFormat);
pStubMsg->MemorySize = SavedMemorySize;
More information about the wine-cvs
mailing list