From 3b15bbfd3753ab2bf2de053357260d257c0100a4 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Thu, 14 May 2009 14:46:18 +0100 Subject: [PATCH] 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 73cac9bf4e7..2f934d8f899 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 e2fb870e49b..f3e87c4c4d6 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;