Nikolay Sivov : ole32: Fix bind speed used in ParseDisplayName() for item moniker.

Alexandre Julliard julliard at winehq.org
Wed Jan 22 14:53:00 CST 2020


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Jan 22 12:11:47 2020 +0300

ole32: Fix bind speed used in ParseDisplayName() for item moniker.

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

---

 dlls/ole32/itemmoniker.c | 46 ++++++++++++++++++----------------------------
 1 file changed, 18 insertions(+), 28 deletions(-)

diff --git a/dlls/ole32/itemmoniker.c b/dlls/ole32/itemmoniker.c
index c37d7a87c5..79fb293c38 100644
--- a/dlls/ole32/itemmoniker.c
+++ b/dlls/ole32/itemmoniker.c
@@ -771,45 +771,35 @@ static HRESULT WINAPI ItemMonikerImpl_GetDisplayName(IMoniker* iface,
 /******************************************************************************
  *        ItemMoniker_ParseDisplayName
  ******************************************************************************/
-static HRESULT WINAPI ItemMonikerImpl_ParseDisplayName(IMoniker* iface,
-                                                       IBindCtx* pbc,
-                                                       IMoniker* pmkToLeft,
-                                                       LPOLESTR pszDisplayName,
-                                                       ULONG* pchEaten,
-                                                       IMoniker** ppmkOut)
+static HRESULT WINAPI ItemMonikerImpl_ParseDisplayName(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft,
+        LPOLESTR displayname, ULONG *eaten, IMoniker **ppmkOut)
 {
     ItemMonikerImpl *This = impl_from_IMoniker(iface);
-    IOleItemContainer* poic=0;
-    IParseDisplayName* ppdn=0;
+    IOleItemContainer *container;
+    IParseDisplayName *parser;
     LPOLESTR displayName;
-    HRESULT res;
-
-    TRACE("%s\n", debugstr_w(pszDisplayName));
+    HRESULT hr;
 
-    /* If pmkToLeft is NULL, this method returns MK_E_SYNTAX */
-    if (pmkToLeft==NULL)
+    TRACE("%p, %p, %p, %s, %p, %p.\n", iface, pbc, pmkToLeft, debugstr_w(displayname), eaten, ppmkOut);
 
+    if (!pmkToLeft)
         return MK_E_SYNTAX;
 
-    else{
-        /* Otherwise, the method calls IMoniker::BindToObject on the pmkToLeft parameter, requesting an */
-        /* IParseDisplayName interface pointer to the object identified by the moniker, and passes the display */
-        /* name to IParseDisplayName::ParseDisplayName */
-        res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&IID_IOleItemContainer,(void**)&poic);
-
-        if (SUCCEEDED(res)){
-
-            res=IOleItemContainer_GetObject(poic,This->itemName,BINDSPEED_MODERATE,pbc,&IID_IParseDisplayName,(void**)&ppdn);
+    hr = IMoniker_BindToObject(pmkToLeft, pbc, NULL, &IID_IOleItemContainer, (void **)&container);
+    if (SUCCEEDED(hr))
+    {
+        hr = IOleItemContainer_GetObject(container, This->itemName, get_bind_speed_from_bindctx(pbc), pbc,
+                &IID_IParseDisplayName, (void **)&parser);
 
-            res=IMoniker_GetDisplayName(iface,pbc,NULL,&displayName);
+        hr = IMoniker_GetDisplayName(iface,pbc,NULL,&displayName);
 
-            res=IParseDisplayName_ParseDisplayName(ppdn,pbc,displayName,pchEaten,ppmkOut);
+        hr = IParseDisplayName_ParseDisplayName(parser, pbc, displayName, eaten, ppmkOut);
 
-            IOleItemContainer_Release(poic);
-            IParseDisplayName_Release(ppdn);
-        }
+        IOleItemContainer_Release(container);
+        IParseDisplayName_Release(parser);
     }
-    return res;
+
+    return hr;
 }
 
 /******************************************************************************




More information about the wine-cvs mailing list