Module: wine Branch: refs/heads/master Commit: 22bf15049c7cbc201c7a8abb00f1b86cd67b5d0b URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=22bf15049c7cbc201c7a8abb...
Author: Robert Shearman rob@codeweavers.com Date: Sat May 13 16:59:50 2006 +0100
rpcrt4: Implement NdrComplexStructMemorySize.
---
dlls/rpcrt4/ndr_marshall.c | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/dlls/rpcrt4/ndr_marshall.c b/dlls/rpcrt4/ndr_marshall.c index 72634b1..43aceb9 100644 --- a/dlls/rpcrt4/ndr_marshall.c +++ b/dlls/rpcrt4/ndr_marshall.c @@ -1922,11 +1922,14 @@ void WINAPI NdrComplexStructBufferSize(P unsigned long WINAPI NdrComplexStructMemorySize(PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat) { - /* unsigned size = *(LPWORD)(pFormat+2); */ + unsigned size = *(const WORD*)(pFormat+2); PFORMAT_STRING conf_array = NULL; PFORMAT_STRING pointer_desc = NULL; + unsigned long saved_memory_size;
- FIXME("(%p,%p): stub\n", pStubMsg, pFormat); + TRACE("(%p,%p)\n", pStubMsg, pFormat); + + ALIGN_POINTER(pStubMsg->Buffer, pFormat[1] + 1);
pFormat += 4; if (*(const WORD*)pFormat) conf_array = pFormat + *(const WORD*)pFormat; @@ -1934,7 +1937,14 @@ unsigned long WINAPI NdrComplexStructMem if (*(const WORD*)pFormat) pointer_desc = pFormat + *(const WORD*)pFormat; pFormat += 2;
- return 0; + saved_memory_size = pStubMsg->MemorySize; + ComplexStructSize(pStubMsg, pFormat); + pStubMsg->MemorySize = saved_memory_size; + + if (conf_array) + NdrConformantArrayMemorySize(pStubMsg, conf_array); + + return size; }
/***********************************************************************