From f464b7d2e258561f819a2ee1917510a67624ec8b Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Tue, 17 May 2011 11:10:02 +0200 Subject: [PATCH] msi: Don't resolve child folders if the target path doesn't change in MsiSetTargetPath. --- dlls/msi/install.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/dlls/msi/install.c b/dlls/msi/install.c index 35597926f48..e90c3b1fc0a 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 )