- Fix PropVariantCopy for VT_LPSTR and VT_LPWSTR.
- Test case VT_BSTR, VT_LPSTR and VT_LPWSTR.
This commit is contained in:
parent
ab1866be52
commit
6e92fca9b3
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OLE2 library
|
* OLE2 library
|
||||||
*
|
*
|
||||||
|
@ -2426,8 +2425,11 @@ HRESULT WINAPI PropVariantClear(PROPVARIANT * pvar) /* [in/out] */
|
||||||
CoTaskMemFree(pvar->u.blob.pBlobData);
|
CoTaskMemFree(pvar->u.blob.pBlobData);
|
||||||
break;
|
break;
|
||||||
case VT_BSTR:
|
case VT_BSTR:
|
||||||
FIXME("Need to load OLEAUT32 for SysFreeString\n");
|
if (pvar->u.bstrVal)
|
||||||
/* SysFreeString(pvar->u.bstrVal); */
|
{
|
||||||
|
FIXME("Need to load OLEAUT32 for SysFreeString\n");
|
||||||
|
/* SysFreeString(pvar->u.bstrVal); */
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case VT_CF:
|
case VT_CF:
|
||||||
if (pvar->u.pclipdata)
|
if (pvar->u.pclipdata)
|
||||||
|
@ -2496,13 +2498,13 @@ HRESULT WINAPI PropVariantCopy(PROPVARIANT *pvarDest, /* [out] */
|
||||||
break;
|
break;
|
||||||
case VT_LPSTR:
|
case VT_LPSTR:
|
||||||
len = strlen(pvarSrc->u.pszVal);
|
len = strlen(pvarSrc->u.pszVal);
|
||||||
pvarDest->u.pszVal = CoTaskMemAlloc(len);
|
pvarDest->u.pszVal = CoTaskMemAlloc((len+1)*sizeof(CHAR));
|
||||||
CopyMemory(pvarDest->u.pszVal, pvarSrc->u.pszVal, len);
|
CopyMemory(pvarDest->u.pszVal, pvarSrc->u.pszVal, (len+1)*sizeof(CHAR));
|
||||||
break;
|
break;
|
||||||
case VT_LPWSTR:
|
case VT_LPWSTR:
|
||||||
len = lstrlenW(pvarSrc->u.pwszVal);
|
len = lstrlenW(pvarSrc->u.pwszVal);
|
||||||
pvarDest->u.pwszVal = CoTaskMemAlloc(len);
|
pvarDest->u.pwszVal = CoTaskMemAlloc((len+1)*sizeof(WCHAR));
|
||||||
CopyMemory(pvarDest->u.pwszVal, pvarSrc->u.pwszVal, len);
|
CopyMemory(pvarDest->u.pwszVal, pvarSrc->u.pwszVal, (len+1)*sizeof(WCHAR));
|
||||||
break;
|
break;
|
||||||
case VT_BLOB:
|
case VT_BLOB:
|
||||||
case VT_BLOB_OBJECT:
|
case VT_BLOB_OBJECT:
|
||||||
|
|
|
@ -3,7 +3,7 @@ TOPOBJDIR = ../../..
|
||||||
SRCDIR = @srcdir@
|
SRCDIR = @srcdir@
|
||||||
VPATH = @srcdir@
|
VPATH = @srcdir@
|
||||||
TESTDLL = ole32.dll
|
TESTDLL = ole32.dll
|
||||||
IMPORTS = ole32 kernel32 ntdll
|
IMPORTS = oleaut32 ole32 kernel32 ntdll
|
||||||
EXTRALIBS = -luuid
|
EXTRALIBS = -luuid
|
||||||
|
|
||||||
CTESTS = \
|
CTESTS = \
|
||||||
|
|
|
@ -18,10 +18,13 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define NONAMELESSUNION
|
||||||
|
#define NONAMELESSSTRUCT
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
/* not present in Wine yet */
|
/* not present in Wine yet */
|
||||||
/*#include "propidl.h"*/
|
/*#include "propidl.h"*/
|
||||||
WINOLEAPI PropVariantClear(PROPVARIANT*);
|
WINOLEAPI PropVariantClear(PROPVARIANT*);
|
||||||
|
WINOLEAPI PropVariantCopy(PROPVARIANT*, const PROPVARIANT*);
|
||||||
|
|
||||||
#include "wine/test.h"
|
#include "wine/test.h"
|
||||||
|
|
||||||
|
@ -160,7 +163,46 @@ static void test_validtypes()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_copy()
|
||||||
|
{
|
||||||
|
static const char szTestString[] = "Test String";
|
||||||
|
static const WCHAR wszTestString[] = {'T','e','s','t',' ','S','t','r','i','n','g',0};
|
||||||
|
PROPVARIANT propvarSrc;
|
||||||
|
PROPVARIANT propvarDst;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
propvarSrc.vt = VT_BSTR;
|
||||||
|
propvarSrc.u.bstrVal = SysAllocString(wszTestString);
|
||||||
|
|
||||||
|
hr = PropVariantCopy(&propvarDst, &propvarSrc);
|
||||||
|
ok(hr == S_OK, "PropVariantCopy(...VT_BSTR...) failed\n");
|
||||||
|
ok(!lstrcmpW(propvarSrc.u.bstrVal, propvarDst.u.bstrVal), "BSTR not copied properly\n");
|
||||||
|
hr = PropVariantClear(&propvarSrc);
|
||||||
|
ok(hr == S_OK, "PropVariantClear(...VT_BSTR...) failed\n");
|
||||||
|
hr = PropVariantClear(&propvarDst);
|
||||||
|
ok(hr == S_OK, "PropVariantClear(...VT_BSTR...) failed\n");
|
||||||
|
|
||||||
|
propvarSrc.vt = VT_LPWSTR;
|
||||||
|
propvarSrc.u.pwszVal = (LPWSTR)wszTestString;
|
||||||
|
hr = PropVariantCopy(&propvarDst, &propvarSrc);
|
||||||
|
ok(hr == S_OK, "PropVariantCopy(...VT_LPWSTR...) failed\n");
|
||||||
|
ok(!lstrcmpW(propvarSrc.u.pwszVal, propvarDst.u.pwszVal), "Wide string not copied properly\n");
|
||||||
|
hr = PropVariantClear(&propvarDst);
|
||||||
|
ok(hr == S_OK, "PropVariantClear(...VT_LPWSTR...) failed\n");
|
||||||
|
memset(&propvarSrc, 0, sizeof(propvarSrc));
|
||||||
|
|
||||||
|
propvarSrc.vt = VT_LPSTR;
|
||||||
|
propvarSrc.u.pszVal = (LPSTR)szTestString;
|
||||||
|
hr = PropVariantCopy(&propvarDst, &propvarSrc);
|
||||||
|
ok(hr == S_OK, "PropVariantCopy(...VT_LPSTR...) failed\n");
|
||||||
|
ok(!strcmp(propvarSrc.u.pszVal, propvarDst.u.pszVal), "String not copied properly\n");
|
||||||
|
hr = PropVariantClear(&propvarDst);
|
||||||
|
ok(hr == S_OK, "PropVariantClear(...VT_LPSTR...) failed\n");
|
||||||
|
memset(&propvarSrc, 0, sizeof(propvarSrc));
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(propvariant)
|
START_TEST(propvariant)
|
||||||
{
|
{
|
||||||
test_validtypes();
|
test_validtypes();
|
||||||
|
test_copy();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue