Huw Davies : ole32: Implement TYMED_ISTREAM marshalling.

Alexandre Julliard julliard at winehq.org
Mon May 18 08:13:15 CDT 2009


Module: wine
Branch: master
Commit: 3b15bbfd3753ab2bf2de053357260d257c0100a4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3b15bbfd3753ab2bf2de053357260d257c0100a4

Author: Huw Davies <huw at codeweavers.com>
Date:   Thu May 14 14:46:18 2009 +0100

ole32: Implement TYMED_ISTREAM marshalling.

---

 dlls/ole32/tests/usrmarshal.c |    5 -----
 dlls/ole32/usrmarshal.c       |   12 +++++++++---
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/dlls/ole32/tests/usrmarshal.c b/dlls/ole32/tests/usrmarshal.c
index 73cac9b..2f934d8 100644
--- a/dlls/ole32/tests/usrmarshal.c
+++ b/dlls/ole32/tests/usrmarshal.c
@@ -701,20 +701,16 @@ static void test_marshal_STGMEDIUM(void)
 
     init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
     size = STGMEDIUM_UserSize(&umcb.Flags, 0, &med);
-    todo_wine
     ok(size == stm_size + unk_size + 3 * sizeof(DWORD), "size %d should be %d bytes\n", size, stm_size + unk_size + 3 * sizeof(DWORD));
 
     buffer = HeapAlloc(GetProcessHeap(), 0, size);
     init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
     buffer_end = STGMEDIUM_UserMarshal(&umcb.Flags, buffer, &med);
-    todo_wine
     ok(buffer_end - buffer - 3 * sizeof(DWORD) == (unk_buffer_end - unk_buffer) + (stm_buffer_end - stm_buffer), "buffer size mismatch\n");
     ok(*(DWORD*)buffer == TYMED_ISTREAM, "got %08x\n", *(DWORD*)buffer);
     ok(*((DWORD*)buffer+1) != 0, "got %08x\n", *((DWORD*)buffer+1));
     ok(*((DWORD*)buffer+2) != 0, "got %08x\n", *((DWORD*)buffer+2));
-    todo_wine
     ok(!memcmp(buffer + 12, stm_buffer, stm_buffer_end - stm_buffer), "buffer mismatch\n");
-    todo_wine
     ok(!memcmp(buffer + 12 + (stm_buffer_end - stm_buffer), unk_buffer, unk_buffer_end - unk_buffer), "buffer mismatch\n");
 
     init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
@@ -728,7 +724,6 @@ static void test_marshal_STGMEDIUM(void)
     STGMEDIUM_UserUnmarshal(&umcb.Flags, buffer, &med2);
 
     ok(med2.tymed == TYMED_ISTREAM, "got tymed %x\n", med2.tymed);
-    todo_wine
     ok(U(med2).pstm != NULL, "Incorrectly unmarshalled\n");
     ok(med2.pUnkForRelease != NULL, "Incorrectly unmarshalled\n");
 
diff --git a/dlls/ole32/usrmarshal.c b/dlls/ole32/usrmarshal.c
index e2fb870..f3e87c4 100644
--- a/dlls/ole32/usrmarshal.c
+++ b/dlls/ole32/usrmarshal.c
@@ -1776,7 +1776,10 @@ ULONG __RPC_USER STGMEDIUM_UserSize(ULONG *pFlags, ULONG StartingSize, STGMEDIUM
         TRACE("TYMED_ISTREAM\n");
         if (pStgMedium->u.pstm)
         {
-            FIXME("not implemented for IStream %p\n", pStgMedium->u.pstm);
+            IUnknown *unk;
+            IStream_QueryInterface(pStgMedium->u.pstm, &IID_IUnknown, (void**)&unk);
+            size = WdtpInterfacePointer_UserSize(pFlags, LOWORD(*pFlags), size, unk, &IID_IStream);
+            IUnknown_Release(unk);
         }
         break;
     case TYMED_ISTORAGE:
@@ -1882,7 +1885,10 @@ unsigned char * __RPC_USER STGMEDIUM_UserMarshal(ULONG *pFlags, unsigned char *p
         TRACE("TYMED_ISTREAM\n");
         if (pStgMedium->u.pstm)
         {
-            FIXME("not implemented for IStream %p\n", pStgMedium->u.pstm);
+            IUnknown *unk;
+            IStream_QueryInterface(pStgMedium->u.pstm, &IID_IUnknown, (void**)&unk);
+            pBuffer = WdtpInterfacePointer_UserMarshal(pFlags, LOWORD(*pFlags), pBuffer, unk, &IID_IStream);
+            IUnknown_Release(unk);
         }
         break;
     case TYMED_ISTORAGE:
@@ -2010,7 +2016,7 @@ unsigned char * __RPC_USER STGMEDIUM_UserUnmarshal(ULONG *pFlags, unsigned char
         TRACE("TYMED_ISTREAM\n");
         if (content)
         {
-            FIXME("not implemented for IStream\n");
+            pBuffer = WdtpInterfacePointer_UserUnmarshal(pFlags, pBuffer, (IUnknown**)&pStgMedium->u.pstm, &IID_IStream);
         }
         else
             pStgMedium->u.pstm = NULL;




More information about the wine-cvs mailing list