Module: wine Branch: refs/heads/master Commit: 4fae04b2f5c57c1b5d3bfcf34b2f79e9d5d40b2f URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=4fae04b2f5c57c1b5d3bfcf3...
Author: Robert Shearman rob@codeweavers.com Date: Thu May 18 03:39:58 2006 +0100
rpcrt4: Fix NdrConformantArrayMemorySize.
---
dlls/rpcrt4/ndr_marshall.c | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/dlls/rpcrt4/ndr_marshall.c b/dlls/rpcrt4/ndr_marshall.c index 3ba3194..4c7791e 100644 --- a/dlls/rpcrt4/ndr_marshall.c +++ b/dlls/rpcrt4/ndr_marshall.c @@ -2118,17 +2118,22 @@ unsigned long WINAPI NdrConformantArrayM PFORMAT_STRING pFormat) { DWORD size = 0, esize = *(const WORD*)(pFormat+2); - unsigned char *buffer; + unsigned char alignment = pFormat[1] + 1;
TRACE("(%p,%p)\n", pStubMsg, pFormat); if (pFormat[0] != RPC_FC_CARRAY) FIXME("format=%d\n", pFormat[0]);
- buffer = pStubMsg->Buffer; pFormat = ReadConformance(pStubMsg, pFormat+4); - pStubMsg->Buffer = buffer; size = pStubMsg->MaxCount; + pStubMsg->MemorySize += size*esize;
- return size*esize; + ALIGN_POINTER(pStubMsg->Buffer, alignment); + pStubMsg->BufferMark = pStubMsg->Buffer; + pStubMsg->Buffer += size*esize; + + EmbeddedPointerMemorySize(pStubMsg, pFormat); + + return pStubMsg->MemorySize; }
/***********************************************************************