[2/2] msi: Resolve the target folder if necessary in msi_get_target_folder.

Hans Leidekker hans at codeweavers.com
Thu Dec 1 06:04:44 CST 2011


Fixes http://bugs.winehq.org/show_bug.cgi?id=29202
---
 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;
 }
 
 /***********************************************************************
-- 
1.7.7.3






More information about the wine-patches mailing list