Robert Shearman : rpcrt4: Implement NdrComplexStructMemorySize.

Alexandre Julliard julliard at wine.codeweavers.com
Mon May 15 07:35:12 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 22bf15049c7cbc201c7a8abb00f1b86cd67b5d0b
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=22bf15049c7cbc201c7a8abb00f1b86cd67b5d0b

Author: Robert Shearman <rob at 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;
 }
 
 /***********************************************************************




More information about the wine-cvs mailing list