MSI: Iterate CreateFolders

Aric Stewart aric at codeweavers.com
Tue Jun 21 09:13:20 CDT 2005


rework CreateFolders to use MSI_IterateRecords
-------------- next part --------------
Index: dlls/msi/action.c
===================================================================
RCS file: /home/wine/wine/dlls/msi/action.c,v
retrieving revision 1.152
diff -u -r1.152 action.c
--- dlls/msi/action.c	20 Jun 2005 15:33:10 -0000	1.152
+++ dlls/msi/action.c	21 Jun 2005 13:56:20 -0000
@@ -899,6 +899,51 @@
     return rc;
 }
 
+
+/*
+ * Actual Action Handlers
+ */
+
+static UINT ITERATE_CreateFolders(MSIRECORD *row, LPVOID param)
+{
+    MSIPACKAGE *package = (MSIPACKAGE*)param;
+    LPCWSTR dir;
+    LPWSTR full_path;
+    MSIRECORD *uirow;
+    MSIFOLDER *folder;
+
+    dir = MSI_RecordGetString(row,1);
+    if (!dir)
+    {
+        ERR("Unable to get folder id \n");
+        return ERROR_SUCCESS;
+    }
+
+    full_path = resolve_folder(package,dir,FALSE,FALSE,&folder);
+    if (!full_path)
+    {
+        ERR("Unable to resolve folder id %s\n",debugstr_w(dir));
+        return ERROR_SUCCESS;
+    }
+
+    TRACE("Folder is %s\n",debugstr_w(full_path));
+
+    /* UI stuff */
+    uirow = MSI_CreateRecord(1);
+    MSI_RecordSetStringW(uirow,1,full_path);
+    ui_actiondata(package,szCreateFolders,uirow);
+    msiobj_release( &uirow->hdr );
+
+    if (folder->State == 0)
+        create_full_pathW(full_path);
+
+    folder->State = 3;
+
+    HeapFree(GetProcessHeap(),0,full_path);
+    return ERROR_SUCCESS;
+}
+
+
 /*
  * Also we cannot enable/disable components either, so for now I am just going 
  * to do all the directories for all the components.
@@ -912,66 +957,12 @@
          '`','C','r','e','a','t','e','F','o','l','d','e','r','`',0 };
     UINT rc;
     MSIQUERY *view;
-    MSIFOLDER *folder;
 
     rc = MSI_DatabaseOpenViewW(package->db, ExecSeqQuery, &view );
     if (rc != ERROR_SUCCESS)
         return ERROR_SUCCESS;
 
-    rc = MSI_ViewExecute(view, 0);
-    if (rc != ERROR_SUCCESS)
-    {
-        MSI_ViewClose(view);
-        msiobj_release(&view->hdr);
-        return rc;
-    }
-    
-    while (1)
-    {
-        LPCWSTR dir;
-        LPWSTR full_path;
-        MSIRECORD *row = NULL, *uirow;
-
-        rc = MSI_ViewFetch(view,&row);
-        if (rc != ERROR_SUCCESS)
-        {
-            rc = ERROR_SUCCESS;
-            break;
-        }
-
-        dir = MSI_RecordGetString(row,1);
-        if (!dir)
-        {
-            ERR("Unable to get folder id \n");
-            msiobj_release(&row->hdr);
-            continue;
-        }
-
-        full_path = resolve_folder(package,dir,FALSE,FALSE,&folder);
-        if (!full_path)
-        {
-            ERR("Unable to resolve folder id %s\n",debugstr_w(dir));
-            msiobj_release(&row->hdr);
-            continue;
-        }
-
-        TRACE("Folder is %s\n",debugstr_w(full_path));
-
-        /* UI stuff */
-        uirow = MSI_CreateRecord(1);
-        MSI_RecordSetStringW(uirow,1,full_path);
-        ui_actiondata(package,szCreateFolders,uirow);
-        msiobj_release( &uirow->hdr );
-
-        if (folder->State == 0)
-            create_full_pathW(full_path);
-
-        folder->State = 3;
-
-        msiobj_release(&row->hdr);
-        HeapFree(GetProcessHeap(),0,full_path);
-    }
-    MSI_ViewClose(view);
+    rc = MSI_IterateRecords(view, NULL, ITERATE_CreateFolders, package);
     msiobj_release(&view->hdr);
    
     return rc;



More information about the wine-patches mailing list