[PATCH 5/5] [Ole32]: fix various missing Release calls on monikers

Eric Pouech eric.pouech at orange.fr
Sat Aug 29 07:23:48 CDT 2009




A+
---

 dlls/ole32/compositemoniker.c |   28 ++++++++++------------------
 1 files changed, 10 insertions(+), 18 deletions(-)


diff --git a/dlls/ole32/compositemoniker.c b/dlls/ole32/compositemoniker.c
index 57fb4e6..5535a97 100644
--- a/dlls/ole32/compositemoniker.c
+++ b/dlls/ole32/compositemoniker.c
@@ -552,6 +552,7 @@ CompositeMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker)
     IEnumMoniker *enumMoniker1,*enumMoniker2;
     IMoniker *tempMk1,*tempMk2;
     HRESULT res1,res2,res;
+    BOOL done;
 
     TRACE("(%p,%p)\n",iface,pmkOtherMoniker);
 
@@ -567,27 +568,18 @@ CompositeMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker)
 
     IMoniker_Enum(iface,TRUE,&enumMoniker2);
 
-    while(1){
+    do {
 
         res1=IEnumMoniker_Next(enumMoniker1,1,&tempMk1,NULL);
         res2=IEnumMoniker_Next(enumMoniker2,1,&tempMk2,NULL);
 
         if((res1==S_OK)&&(res2==S_OK)){
-
-            if(IMoniker_IsEqual(tempMk1,tempMk2)==S_FALSE){
-                res= S_FALSE;
-                break;
-            }
-            else
-                continue;
+            done = (res = IMoniker_IsEqual(tempMk1,tempMk2)) == S_FALSE;
         }
-        else if ( (res1==S_FALSE) && (res2==S_FALSE) ){
-                res = S_OK;
-                break;
-        }
-        else{
-            res = S_FALSE;
-            break;
+        else
+        {
+            res = (res1==S_FALSE) && (res2==S_FALSE);
+            done = TRUE;
         }
 
         if (res1==S_OK)
@@ -595,7 +587,7 @@ CompositeMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker)
 
         if (res2==S_OK)
             IMoniker_Release(tempMk2);
-    }
+    } while (!done);
 
     IEnumMoniker_Release(enumMoniker1);
     IEnumMoniker_Release(enumMoniker2);
@@ -989,12 +981,12 @@ static VOID GetAfterCommonPrefix(IMoniker* pGenMk,IMoniker* commonMk,IMoniker**
                     nbRestMk++;
 
                 IMoniker_Release(tempMk1);
-                IMoniker_Release(tempMk1);
+                IMoniker_Release(tempMk2);
 
                 break;
             }
             IMoniker_Release(tempMk1);
-            IMoniker_Release(tempMk1);
+            IMoniker_Release(tempMk2);
         }
     }
     else{






More information about the wine-patches mailing list