Nikolay Sivov : pstorec: Fix QueryInterface() of IPStore.
Alexandre Julliard
julliard at winehq.org
Mon Feb 13 15:24:40 CST 2017
Module: wine
Branch: master
Commit: 8d3af5690493a515f60adfbb77b6232baf7faaa5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8d3af5690493a515f60adfbb77b6232baf7faaa5
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Feb 13 16:57:12 2017 +0300
pstorec: Fix QueryInterface() of IPStore.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
configure | 1 +
configure.ac | 1 +
dlls/pstorec/pstorec.c | 7 ++--
dlls/pstorec/tests/Makefile.in | 4 +++
dlls/pstorec/tests/pstorec.c | 72 ++++++++++++++++++++++++++++++++++++++++++
5 files changed, 82 insertions(+), 3 deletions(-)
diff --git a/configure b/configure
index b2abca4..35273b0 100755
--- a/configure
+++ b/configure
@@ -18249,6 +18249,7 @@ wine_fn_config_test dlls/propsys/tests propsys_test
wine_fn_config_dll psapi enable_psapi implib
wine_fn_config_test dlls/psapi/tests psapi_test
wine_fn_config_dll pstorec enable_pstorec clean
+wine_fn_config_test dlls/pstorec/tests pstorec_test
wine_fn_config_dll qcap enable_qcap
wine_fn_config_test dlls/qcap/tests qcap_test
wine_fn_config_dll qedit enable_qedit clean
diff --git a/configure.ac b/configure.ac
index 8bffab9..367851d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3306,6 +3306,7 @@ WINE_CONFIG_TEST(dlls/propsys/tests)
WINE_CONFIG_DLL(psapi,,[implib])
WINE_CONFIG_TEST(dlls/psapi/tests)
WINE_CONFIG_DLL(pstorec,,[clean])
+WINE_CONFIG_TEST(dlls/pstorec/tests)
WINE_CONFIG_DLL(qcap)
WINE_CONFIG_TEST(dlls/qcap/tests)
WINE_CONFIG_DLL(qedit,,[clean])
diff --git a/dlls/pstorec/pstorec.c b/dlls/pstorec/pstorec.c
index 593629b..02cd803 100644
--- a/dlls/pstorec/pstorec.c
+++ b/dlls/pstorec/pstorec.c
@@ -24,6 +24,7 @@
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
+#include "initguid.h"
#include "ole2.h"
#include "pstore.h"
@@ -67,13 +68,13 @@ static HRESULT WINAPI PStore_fnQueryInterface(
{
PStore_impl *This = impl_from_IPStore(iface);
- TRACE("%p %s\n",This,debugstr_guid(riid));
+ TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObj);
*ppvObj = NULL;
- if (IsEqualIID(riid, &IID_IUnknown))
+ if (IsEqualIID(riid, &IID_IPStore) || IsEqualIID(riid, &IID_IUnknown))
{
- *ppvObj = This;
+ *ppvObj = &This->IPStore_iface;
}
if (*ppvObj)
diff --git a/dlls/pstorec/tests/Makefile.in b/dlls/pstorec/tests/Makefile.in
new file mode 100644
index 0000000..2287f0f
--- /dev/null
+++ b/dlls/pstorec/tests/Makefile.in
@@ -0,0 +1,4 @@
+TESTDLL = pstorec.dll
+
+C_SRCS = \
+ pstorec.c
diff --git a/dlls/pstorec/tests/pstorec.c b/dlls/pstorec/tests/pstorec.c
new file mode 100644
index 0000000..bc30b19
--- /dev/null
+++ b/dlls/pstorec/tests/pstorec.c
@@ -0,0 +1,72 @@
+/*
+ * Protected Storage Tests
+ *
+ * Copyright 2017 Nikolay Sivov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+
+#define COBJMACROS
+#include "windef.h"
+#include "initguid.h"
+#include "ole2.h"
+#include "pstore.h"
+
+#include "wine/test.h"
+
+static HRESULT (WINAPI *pPStoreCreateInstance)(IPStore **store, PST_PROVIDERID *id, void *reserved, DWORD flags);
+
+static void test_PStoreCreateInstance(void)
+{
+ IPStore *store;
+ IUnknown *unk;
+ HRESULT hr;
+
+ if (!pPStoreCreateInstance)
+ {
+ win_skip("PStoreCreateInstance is not available\n");
+ return;
+ }
+
+ hr = pPStoreCreateInstance(&store, NULL, NULL, 0);
+ if (hr == E_NOTIMPL)
+ {
+ /* this function does not work starting with Win8 */
+ win_skip("PStoreCreateInstance is not implemented on this system\n");
+ return;
+ }
+ ok(hr == S_OK, "Unexpected return value %#x.\n", hr);
+
+ hr = IPStore_QueryInterface(store, &IID_IUnknown, (void **)&unk);
+ ok(hr == S_OK, "Unexpected return value %#x.\n", hr);
+ IUnknown_Release(unk);
+
+ hr = IPStore_QueryInterface(store, &IID_IPStore, (void **)&unk);
+ ok(hr == S_OK, "Unexpected return value %#x.\n", hr);
+ IUnknown_Release(unk);
+
+ IPStore_Release(store);
+}
+
+START_TEST(pstorec)
+{
+ HMODULE module = LoadLibraryA("pstorec");
+
+ pPStoreCreateInstance = (void *)GetProcAddress(module, "PStoreCreateInstance");
+
+ test_PStoreCreateInstance();
+}
More information about the wine-cvs
mailing list