Module: wine Branch: master Commit: ad609f15180b73f75f08d7e61223f70294befb71 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=ad609f15180b73f75f08d7e6...
Author: James Hawkins truiken@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 );