From 22bf15049c7cbc201c7a8abb00f1b86cd67b5d0b Mon Sep 17 00:00:00 2001 From: Robert Shearman Date: Sat, 13 May 2006 16:59:50 +0100 Subject: [PATCH] rpcrt4: Implement NdrComplexStructMemorySize. --- dlls/rpcrt4/ndr_marshall.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/dlls/rpcrt4/ndr_marshall.c b/dlls/rpcrt4/ndr_marshall.c index 72634b1255d..43aceb96fff 100644 --- a/dlls/rpcrt4/ndr_marshall.c +++ b/dlls/rpcrt4/ndr_marshall.c @@ -1922,11 +1922,14 @@ void WINAPI NdrComplexStructBufferSize(PMIDL_STUB_MESSAGE pStubMsg, 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 NdrComplexStructMemorySize(PMIDL_STUB_MESSAGE pStubMsg, 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; } /***********************************************************************