Hans Leidekker : msi: Resolve the target folder if necessary in msi_get_target_folder.
Alexandre Julliard
julliard at winehq.org
Thu Dec 1 14:05:33 CST 2011
Module: wine
Branch: master
Commit: 39b7e6e50cf6ea4562e1d5a2788eea35886c7bf5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=39b7e6e50cf6ea4562e1d5a2788eea35886c7bf5
Author: Hans Leidekker <hans at codeweavers.com>
Date: Thu Dec 1 13:04:44 2011 +0100
msi: Resolve the target folder if necessary in msi_get_target_folder.
---
dlls/msi/action.c | 10 ++--------
dlls/msi/install.c | 14 ++++++++++++--
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index c3e971e..d4170f5 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -3517,14 +3517,8 @@ static WCHAR *get_link_file( MSIPACKAGE *package, MSIRECORD *row )
link_folder = msi_get_target_folder( package, directory );
if (!link_folder)
{
- /* some installers use a separate root */
- MSIFOLDER *folder = msi_get_loaded_folder( package, directory );
- while (folder->Parent && strcmpW( folder->Parent, folder->Directory ))
- {
- folder = msi_get_loaded_folder( package, folder->Parent );
- }
- msi_resolve_target_folder( package, folder->Directory, TRUE );
- link_folder = msi_get_target_folder( package, directory );
+ ERR("unable to resolve folder %s\n", debugstr_w(directory));
+ return NULL;
}
/* may be needed because of a bug somewhere else */
msi_create_full_path( link_folder );
diff --git a/dlls/msi/install.c b/dlls/msi/install.c
index 285d7c9..fc5a625 100644
--- a/dlls/msi/install.c
+++ b/dlls/msi/install.c
@@ -213,8 +213,18 @@ UINT msi_strcpy_to_awstring( LPCWSTR str, awstring *awbuf, DWORD *sz )
const WCHAR *msi_get_target_folder( MSIPACKAGE *package, const WCHAR *name )
{
MSIFOLDER *folder = msi_get_loaded_folder( package, name );
- if (folder) return folder->ResolvedTarget;
- return NULL;
+
+ if (!folder) return NULL;
+ if (!folder->ResolvedTarget)
+ {
+ MSIFOLDER *parent = folder;
+ while (parent->Parent && strcmpW( parent->Parent, parent->Directory ))
+ {
+ parent = msi_get_loaded_folder( package, parent->Parent );
+ }
+ msi_resolve_target_folder( package, parent->Directory, TRUE );
+ }
+ return folder->ResolvedTarget;
}
/***********************************************************************
More information about the wine-cvs
mailing list