MSI: free allocated buffers

Mike McCormack mike at codeweavers.com
Tue Dec 28 00:47:34 CST 2004


ChangeLog:
<aric at codeweavers.com>
* free allocated buffers

-------------- next part --------------
Index: dlls/msi/action.c
===================================================================
RCS file: /home/wine/wine/dlls/msi/action.c,v
retrieving revision 1.55
diff -u -r1.55 action.c
--- dlls/msi/action.c	27 Dec 2004 19:12:35 -0000	1.55
+++ dlls/msi/action.c	28 Dec 2004 06:47:04 -0000
@@ -423,6 +423,59 @@
     }
 }
 
+/* Called when the package is being closed */
+extern void ACTION_free_package_structures( MSIPACKAGE* package)
+{
+    INT i;
+    
+    TRACE("Freeing package action data\n");
+
+    /* No dynamic buffers in features */
+    if (package->features && package->loaded_features > 0)
+        HeapFree(GetProcessHeap(),0,package->features);
+
+    for (i = 0; i < package->loaded_folders; i++) 
+    {
+        if(package->folders[i].Directory)
+            HeapFree(GetProcessHeap(),0,package->folders[i].Directory);
+        if(package->folders[i].TargetDefault)
+            HeapFree(GetProcessHeap(),0,package->folders[i].TargetDefault);
+        if(package->folders[i].SourceDefault)
+            HeapFree(GetProcessHeap(),0,package->folders[i].SourceDefault);
+        if(package->folders[i].ResolvedTarget)
+            HeapFree(GetProcessHeap(),0,package->folders[i].ResolvedTarget);
+        if(package->folders[i].ResolvedSource)
+            HeapFree(GetProcessHeap(),0,package->folders[i].ResolvedSource);
+        if(package->folders[i].Property)
+            HeapFree(GetProcessHeap(),0,package->folders[i].Property);
+    }
+    if (package->folders && package->loaded_folders > 0)
+        HeapFree(GetProcessHeap(),0,package->folders);
+
+    /* no dynamic buffers in components */ 
+    if (package->components && package->loaded_components > 0)
+        HeapFree(GetProcessHeap(),0,package->components);
+
+    for (i = 0; i < package->loaded_files; i++) 
+    {
+        if(package->files[i].File)
+            HeapFree(GetProcessHeap(),0,package->files[i].File);
+        if(package->files[i].FileName)
+            HeapFree(GetProcessHeap(),0,package->files[i].FileName);
+        if(package->files[i].Version)
+            HeapFree(GetProcessHeap(),0,package->files[i].Version);
+        if(package->files[i].Language)
+            HeapFree(GetProcessHeap(),0,package->files[i].Language);
+        if(package->files[i].SourcePath)
+            HeapFree(GetProcessHeap(),0,package->files[i].SourcePath);
+        if(package->files[i].TargetPath)
+            HeapFree(GetProcessHeap(),0,package->files[i].TargetPath);
+    }
+
+    if (package->files && package->loaded_files > 0)
+        HeapFree(GetProcessHeap(),0,package->files);
+}
+
 static UINT ACTION_OpenQuery( MSIDATABASE *db, MSIQUERY **view, LPCWSTR fmt, ... )
 {
     LPWSTR szQuery;
Index: dlls/msi/msipriv.h
===================================================================
RCS file: /home/wine/wine/dlls/msi/msipriv.h,v
retrieving revision 1.33
diff -u -r1.33 msipriv.h
--- dlls/msi/msipriv.h	27 Dec 2004 19:29:33 -0000	1.33
+++ dlls/msi/msipriv.h	28 Dec 2004 06:47:04 -0000
@@ -273,6 +273,7 @@
                               USHORT **pdata, UINT *psz );
 extern UINT ACTION_DoTopLevelINSTALL( MSIPACKAGE *, LPCWSTR, LPCWSTR );
 extern void ACTION_remove_tracked_tempfiles( MSIPACKAGE* );
+extern void ACTION_free_package_structures( MSIPACKAGE* );
 
 /* record internals */
 extern UINT MSI_RecordSetIStream( MSIRECORD *, unsigned int, IStream *);
Index: dlls/msi/package.c
===================================================================
RCS file: /home/wine/wine/dlls/msi/package.c,v
retrieving revision 1.25
diff -u -r1.25 package.c
--- dlls/msi/package.c	27 Dec 2004 17:43:37 -0000	1.25
+++ dlls/msi/package.c	28 Dec 2004 06:47:04 -0000
@@ -53,18 +53,8 @@
     MSIPACKAGE *package= (MSIPACKAGE*) arg;
 
     ACTION_remove_tracked_tempfiles(package);
+    ACTION_free_package_structures(package);
 
-    if (package->features && package->loaded_features > 0)
-        HeapFree(GetProcessHeap(),0,package->features);
-
-    if (package->folders && package->loaded_folders > 0)
-        HeapFree(GetProcessHeap(),0,package->folders);
-    
-    if (package->components && package->loaded_components > 0)
-        HeapFree(GetProcessHeap(),0,package->components);
-
-    if (package->files && package->loaded_files > 0)
-        HeapFree(GetProcessHeap(),0,package->files);
     msiobj_release( &package->db->hdr );
 }
 


More information about the wine-patches mailing list