Huw Davies : inetcomm: Implement IMimeBody:SetData.
Alexandre Julliard
julliard at winehq.org
Tue Nov 27 09:54:28 CST 2007
Module: wine
Branch: master
Commit: ef59756ace4f21f496f029d7c5f9ccf4c0d3db0f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ef59756ace4f21f496f029d7c5f9ccf4c0d3db0f
Author: Huw Davies <huw at codeweavers.com>
Date: Mon Nov 26 12:04:51 2007 +0000
inetcomm: Implement IMimeBody:SetData.
---
dlls/inetcomm/mimeole.c | 44 +++++++++++++++++++++++++++++++++++++-
dlls/inetcomm/regsvr.c | 4 ++-
dlls/inetcomm/tests/Makefile.in | 2 +-
dlls/inetcomm/tests/mimeole.c | 9 ++++++++
4 files changed, 55 insertions(+), 4 deletions(-)
diff --git a/dlls/inetcomm/mimeole.c b/dlls/inetcomm/mimeole.c
index 685356c..16fe3f4 100644
--- a/dlls/inetcomm/mimeole.c
+++ b/dlls/inetcomm/mimeole.c
@@ -104,6 +104,8 @@ typedef struct MimeBody
char *content_pri_type;
char *content_sub_type;
ENCODINGTYPE encoding;
+ void *data;
+ IID data_iid;
} MimeBody;
static inline MimeBody *impl_from_IMimeBody( IMimeBody *iface )
@@ -431,6 +433,16 @@ static void empty_new_prop_list(struct list *list)
}
}
+static void release_data(REFIID riid, void *data)
+{
+ if(!data) return;
+
+ if(IsEqualIID(riid, &IID_IStream))
+ IStream_Release((IStream *)data);
+ else
+ FIXME("Unhandled data format %s\n", debugstr_guid(riid));
+}
+
static HRESULT WINAPI MimeBody_QueryInterface(IMimeBody* iface,
REFIID riid,
void** ppvObject)
@@ -480,6 +492,9 @@ static ULONG WINAPI MimeBody_Release(IMimeBody* iface)
HeapFree(GetProcessHeap(), 0, This->content_pri_type);
HeapFree(GetProcessHeap(), 0, This->content_sub_type);
+
+ release_data(&This->data_iid, This->data);
+
HeapFree(GetProcessHeap(), 0, This);
}
@@ -818,8 +833,31 @@ static HRESULT WINAPI MimeBody_SetData(
REFIID riid,
LPVOID pvObject)
{
- FIXME("stub\n");
- return E_NOTIMPL;
+ MimeBody *This = impl_from_IMimeBody(iface);
+ TRACE("(%p)->(%d, %s, %s, %s %p)\n", This, ietEncoding, debugstr_a(pszPriType), debugstr_a(pszSubType),
+ debugstr_guid(riid), pvObject);
+
+ if(IsEqualIID(riid, &IID_IStream))
+ IStream_AddRef((IStream *)pvObject);
+ else
+ {
+ FIXME("Unhandled object type %s\n", debugstr_guid(riid));
+ return E_INVALIDARG;
+ }
+
+ if(This->data)
+ FIXME("release old data\n");
+
+ This->data_iid = *riid;
+ This->data = pvObject;
+
+ IMimeBody_SetCurrentEncoding(iface, ietEncoding);
+
+ /* FIXME: Update the content type.
+ If pszPriType == NULL use 'application'
+ If pszSubType == NULL use 'octet-stream' */
+
+ return S_OK;
}
static HRESULT WINAPI MimeBody_EmptyData(
@@ -934,6 +972,8 @@ HRESULT MimeBody_create(IUnknown *outer, void **obj)
This->content_pri_type = NULL;
This->content_sub_type = NULL;
This->encoding = IET_7BIT;
+ This->data = NULL;
+ This->data_iid = IID_NULL;
*obj = (IMimeBody *)&This->lpVtbl;
return S_OK;
diff --git a/dlls/inetcomm/regsvr.c b/dlls/inetcomm/regsvr.c
index 9bd9930..97759fc 100644
--- a/dlls/inetcomm/regsvr.c
+++ b/dlls/inetcomm/regsvr.c
@@ -18,7 +18,6 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#define INITGUID
#include <stdarg.h>
#include <string.h>
@@ -28,7 +27,10 @@
#include "winuser.h"
#include "winreg.h"
#include "winerror.h"
+#include "objbase.h"
+#include "ocidl.h"
+#include "initguid.h"
#include "inetcomm_private.h"
#include "mimeole.h"
diff --git a/dlls/inetcomm/tests/Makefile.in b/dlls/inetcomm/tests/Makefile.in
index 93e8b3b..9c001cc 100644
--- a/dlls/inetcomm/tests/Makefile.in
+++ b/dlls/inetcomm/tests/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
TESTDLL = inetcomm.dll
IMPORTS = inetcomm ole32 kernel32
-EXTRALIBS =
+EXTRALIBS = -luuid
CTESTS = \
mimeole.c
diff --git a/dlls/inetcomm/tests/mimeole.c b/dlls/inetcomm/tests/mimeole.c
index 32dec5c..c425c21 100644
--- a/dlls/inetcomm/tests/mimeole.c
+++ b/dlls/inetcomm/tests/mimeole.c
@@ -125,6 +125,15 @@ static void test_CreateBody(void)
hr = IMimeBody_IsContentType(body, NULL, "mixed");
ok(hr == S_OK, "ret %08x\n", hr);
+ hr = IMimeBody_SetData(body, IET_8BIT, "text", "plain", &IID_IStream, in);
+ ok(hr == S_OK, "ret %08x\n", hr);
+ hr = IMimeBody_IsContentType(body, "text", "plain");
+ todo_wine
+ ok(hr == S_OK, "ret %08x\n", hr);
+ hr = IMimeBody_GetCurrentEncoding(body, &enc);
+ ok(hr == S_OK, "ret %08x\n", hr);
+ ok(enc == IET_8BIT, "encoding %d\n", enc);
+
IMimeBody_Release(body);
}
More information about the wine-cvs
mailing list