Module: wine Branch: master Commit: 39b7e6e50cf6ea4562e1d5a2788eea35886c7bf5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=39b7e6e50cf6ea4562e1d5a278...
Author: Hans Leidekker hans@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; }
/***********************************************************************