[PATCH] ole32: CreateDataCache should return a COleCache object by default.

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Mon Sep 25 20:00:08 CDT 2017


Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
 dlls/ole32/datacache.c  |  5 ++++-
 dlls/ole32/tests/ole2.c | 10 ++++++++--
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/dlls/ole32/datacache.c b/dlls/ole32/datacache.c
index a95d0fb..c563118 100644
--- a/dlls/ole32/datacache.c
+++ b/dlls/ole32/datacache.c
@@ -2760,7 +2760,10 @@ HRESULT WINAPI CreateDataCache(
   if (newCache == 0)
     return E_OUTOFMEMORY;
 
-  hr = IUnknown_QueryInterface(&newCache->IUnknown_inner, riid, ppvObj);
+  if ( !pUnkOuter && IsEqualIID(&IID_IUnknown, riid) )
+      hr = IUnknown_QueryInterface(&newCache->IUnknown_inner, &IID_IOleCache2, ppvObj);
+  else
+      hr = IUnknown_QueryInterface(&newCache->IUnknown_inner, riid, ppvObj);
   IUnknown_Release(&newCache->IUnknown_inner);
 
   return hr;
diff --git a/dlls/ole32/tests/ole2.c b/dlls/ole32/tests/ole2.c
index b30f63b..39b161c 100644
--- a/dlls/ole32/tests/ole2.c
+++ b/dlls/ole32/tests/ole2.c
@@ -1575,6 +1575,7 @@ static void test_data_cache(void)
     char szSystemDir[MAX_PATH];
     WCHAR wszPath[MAX_PATH];
     static const WCHAR wszShell32[] = {'\\','s','h','e','l','l','3','2','.','d','l','l',0};
+    DWORD connection;
 
     static const struct expected_method methods_cacheinitnew[] =
     {
@@ -1651,14 +1652,19 @@ static void test_data_cache(void)
     ok(hr == S_OK, "got 0x%08x\n", hr);
     hr = IUnknown_QueryInterface(unk, &IID_IOleCache2, (void**)&pOleCache);
     ok(hr == S_OK, "got 0x%08x\n", hr);
-todo_wine {
     ok(unk == (IUnknown*)olecache, "got %p, expected %p\n", olecache, unk);
     ok(unk == (IUnknown*)pOleCache, "got %p, expected %p\n", pOleCache, unk);
-}
+
     IOleCache2_Release(pOleCache);
     IOleCache_Release(olecache);
     IUnknown_Release(unk);
 
+    hr = CreateDataCache(NULL, &CLSID_NULL, &IID_IUnknown, (void**)&olecache);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    hr = IOleCache_Cache(olecache, &fmtetc, ADVF_PRIMEFIRST | ADVFCACHE_NOHANDLER, &connection);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    IOleCache_Release(olecache);
+
     /* Test with new data */
 
     hr = CreateDataCache(NULL, &CLSID_NULL, &IID_IOleCache2, (LPVOID *)&pOleCache);
-- 
1.9.1




More information about the wine-patches mailing list