Huw Davies : inetcomm: Add the beginnings of IMimeMessage_Load.

Alexandre Julliard julliard at winehq.org
Tue Feb 12 16:46:10 CST 2008


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Fri Feb  8 12:17:43 2008 +0000

inetcomm: Add the beginnings of IMimeMessage_Load.

---

 dlls/inetcomm/mimeole.c       |   22 +++++++++++++++++++---
 dlls/inetcomm/tests/mimeole.c |   29 +++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 3 deletions(-)

diff --git a/dlls/inetcomm/mimeole.c b/dlls/inetcomm/mimeole.c
index a353e5c..a55aceb 100644
--- a/dlls/inetcomm/mimeole.c
+++ b/dlls/inetcomm/mimeole.c
@@ -1091,6 +1091,7 @@ typedef struct MimeMessage
     const IMimeMessageVtbl *lpVtbl;
 
     LONG refs;
+    IStream *stream;
 } MimeMessage;
 
 static HRESULT WINAPI MimeMessage_QueryInterface(IMimeMessage *iface, REFIID riid, void **ppv)
@@ -1130,6 +1131,7 @@ static ULONG WINAPI MimeMessage_Release(IMimeMessage *iface)
     refs = InterlockedDecrement(&This->refs);
     if (!refs)
     {
+        if(This->stream) IStream_Release(This->stream);
         HeapFree(GetProcessHeap(), 0, This);
     }
 
@@ -1155,9 +1157,22 @@ static HRESULT WINAPI MimeMessage_IsDirty(
 
 static HRESULT WINAPI MimeMessage_Load(
     IMimeMessage *iface,
-    LPSTREAM pStm){
-    FIXME("(%p)->(%p)\n", iface, pStm);
-    return E_NOTIMPL;
+    LPSTREAM pStm)
+{
+    MimeMessage *This = (MimeMessage *)iface;
+
+    TRACE("(%p)->(%p)\n", iface, pStm);
+
+    if(This->stream)
+    {
+        FIXME("already loaded a message\n");
+        return E_FAIL;
+    }
+
+    IStream_AddRef(pStm);
+    This->stream = pStm;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI MimeMessage_Save(
@@ -1721,6 +1736,7 @@ HRESULT WINAPI MimeOleCreateMessage(IUnknown *pUnkOuter, IMimeMessage **ppMessag
 
     This->lpVtbl = &MimeMessageVtbl;
     This->refs = 1;
+    This->stream = NULL;
 
     *ppMessage = (IMimeMessage *)&This->lpVtbl;
     return S_OK;
diff --git a/dlls/inetcomm/tests/mimeole.c b/dlls/inetcomm/tests/mimeole.c
index 30451f3..1f542cf 100644
--- a/dlls/inetcomm/tests/mimeole.c
+++ b/dlls/inetcomm/tests/mimeole.c
@@ -202,6 +202,34 @@ static void test_Allocator(void)
     IMimeAllocator_Release(alloc);
 }
 
+static void test_CreateMessage(void)
+{
+    HRESULT hr;
+    IMimeMessage *msg;
+    IStream *stream;
+    LARGE_INTEGER pos;
+    LONG ref;
+
+    hr = MimeOleCreateMessage(NULL, &msg);
+    ok(hr == S_OK, "ret %08x\n", hr);
+
+    CreateStreamOnHGlobal(NULL, TRUE, &stream);
+    IStream_Write(stream, msg1, sizeof(msg1) - 1, NULL);
+    pos.QuadPart = 0;
+    IStream_Seek(stream, pos, STREAM_SEEK_SET, NULL);
+
+    hr = IMimeMessage_Load(msg, stream);
+    ok(hr == S_OK, "ret %08x\n", hr);
+
+    IMimeMessage_Release(msg);
+
+    ref = IStream_AddRef(stream);
+    ok(ref == 2, "ref %d\n", ref);
+    IStream_Release(stream);
+
+    IStream_Release(stream);
+}
+
 START_TEST(mimeole)
 {
     OleInitialize(NULL);
@@ -209,5 +237,6 @@ START_TEST(mimeole)
     test_CreateSecurity();
     test_CreateBody();
     test_Allocator();
+    test_CreateMessage();
     OleUninitialize();
 }




More information about the wine-cvs mailing list