[5/5] msi: Don't resolve child folders if the target path doesn't change in MsiSetTargetPath.
Hans Leidekker
hans at codeweavers.com
Tue May 17 04:10:02 CDT 2011
Fixes http://bugs.winehq.org/show_bug.cgi?id=27152
---
dlls/msi/install.c | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/dlls/msi/install.c b/dlls/msi/install.c
index 3559792..e90c3b1 100644
--- a/dlls/msi/install.c
+++ b/dlls/msi/install.c
@@ -549,17 +549,23 @@ static void set_target_path( MSIPACKAGE *package, MSIFOLDER *folder, const WCHAR
{
FolderList *fl;
MSIFOLDER *child;
+ WCHAR *target_path;
- msi_free( folder->ResolvedTarget );
- folder->ResolvedTarget = strdupW( path );
- msi_clean_path( folder->ResolvedTarget );
- msi_set_property( package->db, folder->Directory, folder->ResolvedTarget );
-
- LIST_FOR_EACH_ENTRY( fl, &folder->children, FolderList, entry )
+ if (!(target_path = strdupW( path ))) return;
+ msi_clean_path( target_path );
+ if (strcmpW( target_path, folder->ResolvedTarget ))
{
- child = fl->folder;
- msi_resolve_target_folder( package, child->Directory, FALSE );
+ msi_free( folder->ResolvedTarget );
+ folder->ResolvedTarget = target_path;
+ msi_set_property( package->db, folder->Directory, folder->ResolvedTarget );
+
+ LIST_FOR_EACH_ENTRY( fl, &folder->children, FolderList, entry )
+ {
+ child = fl->folder;
+ msi_resolve_target_folder( package, child->Directory, FALSE );
+ }
}
+ else msi_free( target_path );
}
UINT MSI_SetTargetPathW( MSIPACKAGE *package, LPCWSTR szFolder, LPCWSTR szFolderPath )
--
1.7.4.1
More information about the wine-patches
mailing list