Nikolay Sivov : ole32: Lock item container on BindToStorage().

Alexandre Julliard julliard at winehq.org
Tue Jan 28 15:35:25 CST 2020


Module: wine
Branch: master
Commit: 0187babcc6d8a27c5d465c89b161b4c70d6b418c
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0187babcc6d8a27c5d465c89b161b4c70d6b418c

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue Jan 28 10:32:21 2020 +0300

ole32: Lock item container on BindToStorage().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ole32/itemmoniker.c   | 34 ++++++++++++++++------------------
 dlls/ole32/tests/moniker.c |  5 ++++-
 2 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/dlls/ole32/itemmoniker.c b/dlls/ole32/itemmoniker.c
index 111b111a1a..19876aa363 100644
--- a/dlls/ole32/itemmoniker.c
+++ b/dlls/ole32/itemmoniker.c
@@ -462,33 +462,31 @@ static HRESULT WINAPI ItemMonikerImpl_BindToObject(IMoniker* iface,
 /******************************************************************************
  *        ItemMoniker_BindToStorage
  ******************************************************************************/
-static HRESULT WINAPI ItemMonikerImpl_BindToStorage(IMoniker* iface,
-                                                    IBindCtx* pbc,
-                                                    IMoniker* pmkToLeft,
-                                                    REFIID riid,
-                                                    VOID** ppvResult)
+static HRESULT WINAPI ItemMonikerImpl_BindToStorage(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riid,
+        void **ppvResult)
 {
-    ItemMonikerImpl *This = impl_from_IMoniker(iface);
-    HRESULT   res;
-    IOleItemContainer *poic=0;
+    ItemMonikerImpl *moniker = impl_from_IMoniker(iface);
+    IOleItemContainer *container;
+    HRESULT hr;
 
-    TRACE("(%p,%p,%p,%s,%p)\n",iface,pbc,pmkToLeft,debugstr_guid(riid),ppvResult);
+    TRACE("%p, %p, %p, %s, %p.\n", iface, pbc, pmkToLeft, debugstr_guid(riid), ppvResult);
 
-    *ppvResult=0;
+    *ppvResult = 0;
 
-    if(pmkToLeft==NULL)
+    if (!pmkToLeft)
         return E_INVALIDARG;
 
-    res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&IID_IOleItemContainer,(void**)&poic);
-
-    if (SUCCEEDED(res)){
-
-        res=IOleItemContainer_GetObjectStorage(poic,This->itemName,pbc,riid,ppvResult);
+    hr = IMoniker_BindToObject(pmkToLeft, pbc, NULL, &IID_IOleItemContainer, (void **)&container);
+    if (SUCCEEDED(hr))
+    {
+        if (FAILED(hr = set_container_lock(container, pbc)))
+            WARN("Failed to lock container, hr %#x.\n", hr);
 
-        IOleItemContainer_Release(poic);
+        hr = IOleItemContainer_GetObjectStorage(container, moniker->itemName, pbc, riid, ppvResult);
+        IOleItemContainer_Release(container);
     }
 
-    return res;
+    return hr;
 }
 
 /******************************************************************************
diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c
index 7d4c8224ad..231551b244 100644
--- a/dlls/ole32/tests/moniker.c
+++ b/dlls/ole32/tests/moniker.c
@@ -380,7 +380,7 @@ static HRESULT WINAPI test_item_container_GetObject(IOleItemContainer *iface, LP
 static HRESULT WINAPI test_item_container_GetObjectStorage(IOleItemContainer *iface, LPOLESTR item,
         IBindCtx *pbc, REFIID riid, void **obj)
 {
-    return E_NOTIMPL;
+    return 0x8bee0001;
 }
 
 static HRESULT WINAPI test_item_container_IsRunning(IOleItemContainer *iface, LPOLESTR item)
@@ -2235,6 +2235,9 @@ todo_wine
     hr = IMoniker_BindToStorage(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown);
     ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
 
+    hr = IMoniker_BindToStorage(moniker, bindctx, &container_moniker->IMoniker_iface, &IID_IUnknown, (void **)&unknown);
+    ok(hr == 0x8bee0001, "Unexpected hr %#x.\n", hr);
+
     /* ParseDisplayName() */
     hr = IMoniker_ParseDisplayName(moniker, bindctx, NULL, displayname, &eaten, &moniker2);
     ok(hr == MK_E_SYNTAX, "Unexpected hr %#x.\n", hr);




More information about the wine-cvs mailing list