msi: Only extract a file when its disk id matches the media disk id.
authorHans Leidekker <hans@codeweavers.com>
Wed, 12 May 2010 12:18:41 +0000 (14:18 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 12 May 2010 16:46:32 +0000 (18:46 +0200)
This makes sure that an updated file is extracted from the cabinet stream
included in the patch, instead of the original source.

dlls/msi/files.c

index 10dbb28497fa01dadb58661745c773e56ddc9b80..bea18378973d69a3d48450dc8f5697dabeb29947 100644 (file)
@@ -179,6 +179,7 @@ static BOOL installfiles_cb(MSIPACKAGE *package, LPCWSTR file, DWORD action,
                             LPWSTR *path, DWORD *attrs, PVOID user)
 {
     static MSIFILE *f = NULL;
+    MSIMEDIAINFO *mi = user;
 
     if (action == MSICABEXTRACT_BEGINEXTRACT)
     {
@@ -189,11 +190,8 @@ static BOOL installfiles_cb(MSIPACKAGE *package, LPCWSTR file, DWORD action,
             return FALSE;
         }
 
-        if (f->state != msifs_missing && f->state != msifs_overwrite)
-        {
-            TRACE("Skipping extraction of %s\n", debugstr_w(file));
+        if (f->disk_id != mi->disk_id || (f->state != msifs_missing && f->state != msifs_overwrite))
             return FALSE;
-        }
 
         msi_file_update_ui(package, f, szInstallFiles);
 
@@ -257,7 +255,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package)
             data.mi = mi;
             data.package = package;
             data.cb = installfiles_cb;
-            data.user = NULL;
+            data.user = mi;
 
             if (file->IsCompressed &&
                 !msi_cabextract(package, mi, &data))