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