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