James Hawkins : msi: Only specifically resolve the TARGETDIR directory once .

Alexandre Julliard julliard at wine.codeweavers.com
Tue Sep 26 15:04:55 CDT 2006


Module: wine
Branch: master
Commit: ad609f15180b73f75f08d7e61223f70294befb71
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=ad609f15180b73f75f08d7e61223f70294befb71

Author: James Hawkins <truiken at gmail.com>
Date:   Mon Sep 25 20:04:55 2006 -0700

msi: Only specifically resolve the TARGETDIR directory once.

---

 dlls/msi/helpers.c       |   20 ++++++++++----------
 dlls/msi/tests/package.c |   15 +++------------
 2 files changed, 13 insertions(+), 22 deletions(-)

diff --git a/dlls/msi/helpers.c b/dlls/msi/helpers.c
index 50fc992..dbca4f3 100644
--- a/dlls/msi/helpers.c
+++ b/dlls/msi/helpers.c
@@ -216,10 +216,14 @@ LPWSTR resolve_folder(MSIPACKAGE *packag
     if (!name)
         return NULL;
 
+    f = get_loaded_folder( package, name );
+    if (!f)
+        return NULL;
+
     /* special resolving for Target and Source root dir */
     if (strcmpW(name,cszTargetDir)==0 || strcmpW(name,cszSourceDir)==0)
     {
-        if (!source)
+        if (!f->ResolvedTarget && !f->Property)
         {
             LPWSTR check_path;
             check_path = msi_dup_property( package, cszTargetDir );
@@ -236,17 +240,13 @@ LPWSTR resolve_folder(MSIPACKAGE *packag
             if (strcmpiW(path,check_path)!=0)
                 MSI_SetPropertyW(package,cszTargetDir,path);
             msi_free(check_path);
+
+            f->ResolvedTarget = path;
         }
-        else
-            path = get_source_root( package );
-        if (folder)
-            *folder = get_loaded_folder( package, name );
-        return path;
-    }
 
-    f = get_loaded_folder( package, name );
-    if (!f)
-        return NULL;
+        if (!f->ResolvedSource)
+            f->ResolvedSource = get_source_root( package );
+    }
 
     if (folder)
         *folder = f;
diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c
index 78b4b3a..3b3a1e7 100644
--- a/dlls/msi/tests/package.c
+++ b/dlls/msi/tests/package.c
@@ -454,10 +454,7 @@ static void test_getsourcepath( void )
     sz = sizeof buffer -1;
     strcpy(buffer,"x bad");
     r = MsiGetSourcePath( hpkg, "TARGETDIR", buffer, &sz );
-    todo_wine
-    {
-        ok( r == ERROR_DIRECTORY, "return value wrong\n");
-    }
+    ok( r == ERROR_DIRECTORY, "return value wrong\n");
 
     r = MsiDoAction( hpkg, "CostInitialize");
     ok( r == ERROR_SUCCESS, "cost init failed\n");
@@ -675,17 +672,11 @@ static void test_settargetpath(void)
     lstrcat( tempdir, "\\" );
     r = MsiGetTargetPath( hpkg, "TARGETDIR", buffer, &sz );
     ok( r == ERROR_SUCCESS, "failed to get target path: %d\n", r);
-    todo_wine
-    {
-        ok( !lstrcmp(buffer, tempdir), "Expected %s, got %s\n", tempdir, buffer);
-    }
+    ok( !lstrcmp(buffer, tempdir), "Expected %s, got %s\n", tempdir, buffer);
 
     sprintf( file, "%srootfile.txt", tempdir );
     query_file_path( hpkg, "[#RootFile]", buffer );
-    todo_wine
-    {
-        ok( !lstrcmp(buffer, file), "Expected %s, got %s\n", file, buffer);
-    }
+    ok( !lstrcmp(buffer, file), "Expected %s, got %s\n", file, buffer);
 
     r = MsiSetTargetPath( hpkg, "TestParent", "C:\\one\\two" );
     ok( r == ERROR_SUCCESS, "MsiSetTargetPath returned %d\n", r );




More information about the wine-cvs mailing list