[RESEND] msi: disable checks in MsiSetTargetPath

Andrey Turkin pancha at Mail.nnov.ru
Sun Jun 25 07:05:20 CDT 2006


Native does not require that given path's parent folder exists. It seems
that native does not tries touch anything on drive at all during
MsiSetTargetPath. This patch makes Wine's implementation to resemble
native more closely.
This time patch diffed against wine-0.9.16

ChangeLog:
Disable some path validity checks in MsiSetTargetPath


-------------- next part --------------
--- wine-0.9.16-orig/dlls/msi/install.c	2006-06-25 11:44:19.000000000 +0400
+++ wine-0.9.16/dlls/msi/install.c	2006-06-25 14:59:51.000000000 +0400
@@ -336,24 +336,14 @@ UINT MSI_SetTargetPathW(MSIPACKAGE *pack
 
     attrib = GetFileAttributesW(szFolderPath);
     if ( attrib != INVALID_FILE_ATTRIBUTES &&
-          (!(attrib & FILE_ATTRIBUTE_DIRECTORY) ||
-           attrib & FILE_ATTRIBUTE_OFFLINE ||
-           attrib & FILE_ATTRIBUTE_READONLY))
+          (attrib & FILE_ATTRIBUTE_OFFLINE ||
+           attrib & FILE_ATTRIBUTE_READONLY)) /* actually native MSI tests writeability by making temporary files at each drive */
         return ERROR_FUNCTION_FAILED;
 
     path = resolve_folder(package,szFolder,FALSE,FALSE,&folder);
     if (!path)
         return ERROR_DIRECTORY;
 
-    if (attrib == INVALID_FILE_ATTRIBUTES)
-    {
-        if (!CreateDirectoryW(szFolderPath,NULL))
-        {
-            msi_free( path );
-            return ERROR_FUNCTION_FAILED;
-        }
-        RemoveDirectoryW(szFolderPath);
-    }
 
     msi_free(folder->Property);
     folder->Property = build_directory_name(2, szFolderPath, NULL);
--- wine-0.9.16-orig/dlls/msi/tests/package.c	2006-06-25 11:44:19.000000000 +0400
+++ wine-0.9.16/dlls/msi/tests/package.c	2006-06-25 15:02:59.000000000 +0400
@@ -404,14 +404,10 @@ static void test_settargetpath(void)
         {
             sprintf( tempdir, "%s\\subdir", buffer );
             r = MsiSetTargetPath( hpkg, "TARGETDIR", buffer );
-            todo_wine {
             ok( r == ERROR_SUCCESS, "MsiSetTargetPath on file returned %d\n", r );
-            }
 
             r = MsiSetTargetPath( hpkg, "TARGETDIR", tempdir );
-            todo_wine {
             ok( r == ERROR_SUCCESS, "MsiSetTargetPath on 'subdir' of file returned %d\n", r );
-            }
 
             DeleteFile( buffer );
 
@@ -422,9 +418,7 @@ static void test_settargetpath(void)
             ok ( r == INVALID_FILE_ATTRIBUTES, "file/directory exists after MsiSetTargetPath. Attributes: %08X\n", r );
 
             r = MsiSetTargetPath( hpkg, "TARGETDIR", tempdir );
-            todo_wine {
             ok( r == ERROR_SUCCESS, "MsiSetTargetPath on subsubdir returned %d\n", r );
-            }
         } else {
             trace("GetTempFileName failed, cannot do some tests\n");
         }


More information about the wine-patches mailing list