inetcomm: Support LPSTR to LPWSTR conversion in GetProp.

Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alistair Leslie-Hughes 2016-07-01 07:57:42 +00:00 committed by Alexandre Julliard
parent bf02672359
commit 16231678ca
3 changed files with 21 additions and 2 deletions

View File

@ -1,6 +1,6 @@
MODULE = inetcomm.dll MODULE = inetcomm.dll
IMPORTLIB = inetcomm IMPORTLIB = inetcomm
IMPORTS = uuid oleaut32 ole32 ws2_32 user32 advapi32 IMPORTS = uuid propsys oleaut32 ole32 ws2_32 user32 advapi32
C_SRCS = \ C_SRCS = \
imaptransport.c \ imaptransport.c \

View File

@ -31,6 +31,7 @@
#include "objbase.h" #include "objbase.h"
#include "ole2.h" #include "ole2.h"
#include "mimeole.h" #include "mimeole.h"
#include "propvarutil.h"
#include "wine/list.h" #include "wine/list.h"
#include "wine/debug.h" #include "wine/debug.h"
@ -785,7 +786,11 @@ static HRESULT WINAPI MimeBody_GetProp(
hr = find_prop(This, pszName, &header); hr = find_prop(This, pszName, &header);
if(hr == S_OK) if(hr == S_OK)
{ {
PropVariantCopy(pValue, &header->value); TRACE("type %d->%d\n", header->value.vt, pValue->vt);
hr = PropVariantChangeType(pValue, &header->value, 0, pValue->vt);
if(FAILED(hr))
FIXME("Conversion not currently supported (%d->%d)\n", header->value.vt, pValue->vt);
} }
return hr; return hr;

View File

@ -335,6 +335,7 @@ static void test_CreateMessage(void)
static void test_MessageSetProp(void) static void test_MessageSetProp(void)
{ {
static const char topic[] = "wine topic"; static const char topic[] = "wine topic";
static const WCHAR topicW[] = {'w','i','n','e',' ','t','o','p','i','c',0};
HRESULT hr; HRESULT hr;
IMimeMessage *msg; IMimeMessage *msg;
IMimeBody *body; IMimeBody *body;
@ -370,6 +371,7 @@ static void test_MessageSetProp(void)
hr = IMimeBody_GetProp(body, "Wine-Topic", 0, &prop); hr = IMimeBody_GetProp(body, "Wine-Topic", 0, &prop);
ok(hr == MIME_E_NOT_FOUND, "ret %08x\n", hr); ok(hr == MIME_E_NOT_FOUND, "ret %08x\n", hr);
prop.vt = VT_LPSTR;
hr = IMimeBody_GetProp(body, "Thread-Topic", 0, &prop); hr = IMimeBody_GetProp(body, "Thread-Topic", 0, &prop);
ok(hr == S_OK, "ret %08x\n", hr); ok(hr == S_OK, "ret %08x\n", hr);
if(hr == S_OK) if(hr == S_OK)
@ -386,6 +388,7 @@ static void test_MessageSetProp(void)
ok(hr == S_OK, "ret %08x\n", hr); ok(hr == S_OK, "ret %08x\n", hr);
PropVariantClear(&prop); PropVariantClear(&prop);
prop.vt = VT_LPSTR;
hr = IMimeBody_GetProp(body, PIDTOSTR(PID_HDR_SUBJECT), 0, &prop); hr = IMimeBody_GetProp(body, PIDTOSTR(PID_HDR_SUBJECT), 0, &prop);
ok(hr == S_OK, "ret %08x\n", hr); ok(hr == S_OK, "ret %08x\n", hr);
if(hr == S_OK) if(hr == S_OK)
@ -396,6 +399,7 @@ static void test_MessageSetProp(void)
} }
/* Using the name or PID returns the same result. */ /* Using the name or PID returns the same result. */
prop.vt = VT_LPSTR;
hr = IMimeBody_GetProp(body, "Subject", 0, &prop); hr = IMimeBody_GetProp(body, "Subject", 0, &prop);
ok(hr == S_OK, "ret %08x\n", hr); ok(hr == S_OK, "ret %08x\n", hr);
if(hr == S_OK) if(hr == S_OK)
@ -405,6 +409,16 @@ static void test_MessageSetProp(void)
PropVariantClear(&prop); PropVariantClear(&prop);
} }
prop.vt = VT_LPWSTR;
hr = IMimeBody_GetProp(body, "Subject", 0, &prop);
ok(hr == S_OK, "ret %08x\n", hr);
if(hr == S_OK)
{
ok(prop.vt == VT_LPWSTR, "type %d\n", prop.vt);
ok(!lstrcmpW(prop.u.pwszVal, topicW), "got %s\n", wine_dbgstr_w(prop.u.pwszVal));
PropVariantClear(&prop);
}
prop.vt = VT_LPSTR; prop.vt = VT_LPSTR;
prop.u.pszVal = CoTaskMemAlloc(strlen(topic)+1); prop.u.pszVal = CoTaskMemAlloc(strlen(topic)+1);
strcpy(prop.u.pszVal, topic); strcpy(prop.u.pszVal, topic);