Mike McCormack : msi: Use MSI_IterateRecords when cloning properties.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Nov 27 07:10:28 CST 2006


Module: wine
Branch: master
Commit: 0670ebc67b10eafba194cab418ce8637715faba7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0670ebc67b10eafba194cab418ce8637715faba7

Author: Mike McCormack <mike at codeweavers.com>
Date:   Mon Nov 27 17:48:10 2006 +0900

msi: Use MSI_IterateRecords when cloning properties.

---

 dlls/msi/package.c |   52 ++++++++++++++++++++--------------------------------
 1 files changed, 20 insertions(+), 32 deletions(-)

diff --git a/dlls/msi/package.c b/dlls/msi/package.c
index 164c7f2..57bf0f6 100644
--- a/dlls/msi/package.c
+++ b/dlls/msi/package.c
@@ -60,45 +60,33 @@ static void MSI_FreePackage( MSIOBJECTHD
     msi_free_properties( package );
 }
 
+static UINT iterate_clone_props(MSIRECORD *row, LPVOID param)
+{
+    MSIPACKAGE *package = param;
+    LPCWSTR name, value;
+
+    name = MSI_RecordGetString( row, 1 );
+    value = MSI_RecordGetString( row, 2 );
+    MSI_SetPropertyW( package, name, value );
+
+    return ERROR_SUCCESS;
+}
+
 static UINT clone_properties( MSIPACKAGE *package )
 {
-    MSIQUERY * view = NULL;
-    UINT rc;
     static const WCHAR Query[] = {
-       'S','E','L','E','C','T',' ','*',' ',
-       'F','R','O','M',' ','`','P','r','o','p','e','r','t','y','`',0};
-
-    /* clone the existing properties */
-    rc = MSI_DatabaseOpenViewW( package->db, Query, &view );
-    if (rc != ERROR_SUCCESS)
-        return rc;
+        'S','E','L','E','C','T',' ','*',' ',
+        'F','R','O','M',' ','`','P','r','o','p','e','r','t','y','`',0};
+    MSIQUERY *view = NULL;
+    UINT r;
 
-    rc = MSI_ViewExecute(view, 0);
-    if (rc != ERROR_SUCCESS)
+    r = MSI_OpenQuery( package->db, &view, Query );
+    if (r == ERROR_SUCCESS)
     {
-        MSI_ViewClose(view);
+        r = MSI_IterateRecords( view, NULL, iterate_clone_props, package );
         msiobj_release(&view->hdr);
-        return rc;
-    }
-    while (1)
-    {
-        MSIRECORD * row;
-        LPCWSTR name, value;
-
-        rc = MSI_ViewFetch(view,&row);
-        if (rc != ERROR_SUCCESS)
-            break;
-
-        name = MSI_RecordGetString( row, 1 );
-        value = MSI_RecordGetString( row, 2 );
-        MSI_SetPropertyW( package, name, value );
-
-        msiobj_release( &row->hdr );
     }
-    MSI_ViewClose(view);
-    msiobj_release(&view->hdr);
-
-    return rc;
+    return r;
 }
 
 /*




More information about the wine-cvs mailing list