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