Commit 3b15bbfd authored by Huw Davies's avatar Huw Davies Committed by Alexandre Julliard

ole32: Implement TYMED_ISTREAM marshalling.

parent 10919f7f
...@@ -701,20 +701,16 @@ static void test_marshal_STGMEDIUM(void) ...@@ -701,20 +701,16 @@ static void test_marshal_STGMEDIUM(void)
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE); init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
size = STGMEDIUM_UserSize(&umcb.Flags, 0, &med); 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)); 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); buffer = HeapAlloc(GetProcessHeap(), 0, size);
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE); init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
buffer_end = STGMEDIUM_UserMarshal(&umcb.Flags, buffer, &med); 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(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 == TYMED_ISTREAM, "got %08x\n", *(DWORD*)buffer);
ok(*((DWORD*)buffer+1) != 0, "got %08x\n", *((DWORD*)buffer+1)); ok(*((DWORD*)buffer+1) != 0, "got %08x\n", *((DWORD*)buffer+1));
ok(*((DWORD*)buffer+2) != 0, "got %08x\n", *((DWORD*)buffer+2)); 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"); 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"); 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); init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
...@@ -728,7 +724,6 @@ static void test_marshal_STGMEDIUM(void) ...@@ -728,7 +724,6 @@ static void test_marshal_STGMEDIUM(void)
STGMEDIUM_UserUnmarshal(&umcb.Flags, buffer, &med2); STGMEDIUM_UserUnmarshal(&umcb.Flags, buffer, &med2);
ok(med2.tymed == TYMED_ISTREAM, "got tymed %x\n", med2.tymed); ok(med2.tymed == TYMED_ISTREAM, "got tymed %x\n", med2.tymed);
todo_wine
ok(U(med2).pstm != NULL, "Incorrectly unmarshalled\n"); ok(U(med2).pstm != NULL, "Incorrectly unmarshalled\n");
ok(med2.pUnkForRelease != NULL, "Incorrectly unmarshalled\n"); ok(med2.pUnkForRelease != NULL, "Incorrectly unmarshalled\n");
......
...@@ -1776,7 +1776,10 @@ ULONG __RPC_USER STGMEDIUM_UserSize(ULONG *pFlags, ULONG StartingSize, STGMEDIUM ...@@ -1776,7 +1776,10 @@ ULONG __RPC_USER STGMEDIUM_UserSize(ULONG *pFlags, ULONG StartingSize, STGMEDIUM
TRACE("TYMED_ISTREAM\n"); TRACE("TYMED_ISTREAM\n");
if (pStgMedium->u.pstm) 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; break;
case TYMED_ISTORAGE: case TYMED_ISTORAGE:
...@@ -1882,7 +1885,10 @@ unsigned char * __RPC_USER STGMEDIUM_UserMarshal(ULONG *pFlags, unsigned char *p ...@@ -1882,7 +1885,10 @@ unsigned char * __RPC_USER STGMEDIUM_UserMarshal(ULONG *pFlags, unsigned char *p
TRACE("TYMED_ISTREAM\n"); TRACE("TYMED_ISTREAM\n");
if (pStgMedium->u.pstm) 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; break;
case TYMED_ISTORAGE: case TYMED_ISTORAGE:
...@@ -2010,7 +2016,7 @@ unsigned char * __RPC_USER STGMEDIUM_UserUnmarshal(ULONG *pFlags, unsigned char ...@@ -2010,7 +2016,7 @@ unsigned char * __RPC_USER STGMEDIUM_UserUnmarshal(ULONG *pFlags, unsigned char
TRACE("TYMED_ISTREAM\n"); TRACE("TYMED_ISTREAM\n");
if (content) if (content)
{ {
FIXME("not implemented for IStream\n"); pBuffer = WdtpInterfacePointer_UserUnmarshal(pFlags, pBuffer, (IUnknown**)&pStgMedium->u.pstm, &IID_IStream);
} }
else else
pStgMedium->u.pstm = NULL; pStgMedium->u.pstm = NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment