msi: Don't resolve child folders if the target path doesn't change in MsiSetTargetPath.

This commit is contained in:
Hans Leidekker 2011-05-17 11:10:02 +02:00 committed by Alexandre Julliard
parent 01433f0f30
commit f464b7d2e2
1 changed files with 14 additions and 8 deletions

View File

@ -549,17 +549,23 @@ static void set_target_path( MSIPACKAGE *package, MSIFOLDER *folder, const WCHAR
{ {
FolderList *fl; FolderList *fl;
MSIFOLDER *child; MSIFOLDER *child;
WCHAR *target_path;
msi_free( folder->ResolvedTarget ); if (!(target_path = strdupW( path ))) return;
folder->ResolvedTarget = strdupW( path ); msi_clean_path( target_path );
msi_clean_path( folder->ResolvedTarget ); if (strcmpW( target_path, folder->ResolvedTarget ))
msi_set_property( package->db, folder->Directory, folder->ResolvedTarget );
LIST_FOR_EACH_ENTRY( fl, &folder->children, FolderList, entry )
{ {
child = fl->folder; msi_free( folder->ResolvedTarget );
msi_resolve_target_folder( package, child->Directory, FALSE ); 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 ) UINT MSI_SetTargetPathW( MSIPACKAGE *package, LPCWSTR szFolder, LPCWSTR szFolderPath )