James Hawkins : msi: Store the number of types we queried. We were leaking these types because we didn't have the correct count.

Alexandre Julliard julliard at winehq.org
Mon Dec 14 09:51:20 CST 2009


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

Author: James Hawkins <truiken at gmail.com>
Date:   Sun Dec 13 19:35:45 2009 -0800

msi: Store the number of types we queried. We were leaking these types because we didn't have the correct count.

This change also fixes weird 8-space indenting in free_merge_tables.

---

 dlls/msi/database.c |   50 +++++++++++++++++++++++++++-----------------------
 1 files changed, 27 insertions(+), 23 deletions(-)

diff --git a/dlls/msi/database.c b/dlls/msi/database.c
index adbdb9d..d823dc6 100644
--- a/dlls/msi/database.c
+++ b/dlls/msi/database.c
@@ -1451,6 +1451,7 @@ static UINT msi_get_query_types(MSIQUERY *query, LPWSTR **types, DWORD *numtypes
         goto end;
     }
 
+    *numtypes = count;
     for (i=1; i<=count; i++ )
     {
         (*types)[i-1] = strdupW(MSI_RecordGetString(prec, i));
@@ -1477,32 +1478,36 @@ static void merge_free_rows(MERGETABLE *table)
 
 static void free_merge_table(MERGETABLE *table)
 {
-        UINT i;
+    UINT i;
 
-        if (table->labels != NULL)
-        {
-            for (i = 0; i < table->numlabels; i++)
-                msi_free(table->labels[i]);
-            msi_free(table->labels);
-        }
+    if (table->labels != NULL)
+    {
+        for (i = 0; i < table->numlabels; i++)
+            msi_free(table->labels[i]);
 
-        if (table->columns != NULL)
-        {
-            for (i = 0; i < table->numcolumns; i++)
-                msi_free(table->columns[i]);
-            msi_free(table->columns);
-        }
+        msi_free(table->labels);
+    }
 
-        if (table->types != NULL)
-        {
-            for (i = 0; i < table->numtypes; i++)
-                msi_free(table->types[i]);
-            msi_free(table->types);
-        }
-        msi_free(table->name);
-        merge_free_rows(table);
+    if (table->columns != NULL)
+    {
+        for (i = 0; i < table->numcolumns; i++)
+            msi_free(table->columns[i]);
 
-        msi_free(table);
+        msi_free(table->columns);
+    }
+
+    if (table->types != NULL)
+    {
+        for (i = 0; i < table->numtypes; i++)
+            msi_free(table->types[i]);
+
+        msi_free(table->types);
+    }
+
+    msi_free(table->name);
+    merge_free_rows(table);
+
+    msi_free(table);
 }
 
 static UINT msi_get_merge_table (MSIDATABASE *db, LPCWSTR name, MERGETABLE **ptable)
@@ -1753,7 +1758,6 @@ UINT WINAPI MsiDatabaseMergeW(MSIHANDLE hDatabase, MSIHANDLE hDatabaseMerge,
     LIST_FOR_EACH_SAFE(item, cursor, &tabledata)
     {
         MERGETABLE *table = LIST_ENTRY(item, MERGETABLE, entry);
-
         list_remove(&table->entry);
         free_merge_table(table);
     }




More information about the wine-cvs mailing list