James Hawkins : msi: Only specifically resolve the TARGETDIR directory once .
Module: wine Branch: master Commit: ad609f15180b73f75f08d7e61223f70294befb71 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=ad609f15180b73f75f08d7e6... Author: James Hawkins <truiken(a)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 );
participants (1)
-
Alexandre Julliard