Hans Leidekker : msi: Improve the check for files obsoleted by patches.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Apr 17 04:22:21 CDT 2015


Module: wine
Branch: master
Commit: 20c3c09fac51538359bdc3934686c171c27204e4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=20c3c09fac51538359bdc3934686c171c27204e4

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Thu Apr 16 17:01:21 2015 +0200

msi: Improve the check for files obsoleted by patches.

---

 dlls/msi/files.c | 37 ++++++++++++++++++++++++-------------
 1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/dlls/msi/files.c b/dlls/msi/files.c
index 26e4cb1..8977a9c 100644
--- a/dlls/msi/files.c
+++ b/dlls/msi/files.c
@@ -63,6 +63,28 @@ static void msi_file_update_ui( MSIPACKAGE *package, MSIFILE *f, const WCHAR *ac
     msi_ui_progress( package, 2, f->FileSize, 0, 0 );
 }
 
+static BOOL is_registered_patch_media( MSIPACKAGE *package, UINT disk_id )
+{
+    MSIPATCHINFO *patch;
+
+    LIST_FOR_EACH_ENTRY( patch, &package->patches, MSIPATCHINFO, entry )
+    {
+        if (patch->disk_id == disk_id && patch->registered) return TRUE;
+    }
+    return FALSE;
+}
+
+static BOOL is_obsoleted_by_patch( MSIPACKAGE *package, MSIFILE *file )
+{
+    if (!list_empty( &package->patches ) && file->disk_id < MSI_INITIAL_MEDIA_TRANSFORM_DISKID)
+    {
+        if (!msi_get_property_int( package->db, szInstalled, 0 )) return FALSE;
+        return TRUE;
+    }
+    if (is_registered_patch_media( package, file->disk_id )) return TRUE;
+    return FALSE;
+}
+
 static msi_file_state calculate_install_state( MSIPACKAGE *package, MSIFILE *file )
 {
     MSICOMPONENT *comp = file->Component;
@@ -77,9 +99,9 @@ static msi_file_state calculate_install_state( MSIPACKAGE *package, MSIFILE *fil
         TRACE("skipping %s (not scheduled for install)\n", debugstr_w(file->File));
         return msifs_skipped;
     }
-    if (!list_empty( &package->patches ) && file->disk_id < MSI_INITIAL_MEDIA_TRANSFORM_DISKID)
+    if (is_obsoleted_by_patch( package, file ))
     {
-        TRACE("skipping %s (not part of patch)\n", debugstr_w(file->File));
+        TRACE("skipping %s (obsoleted by patch)\n", debugstr_w(file->File));
         return msifs_skipped;
     }
     if ((msi_is_global_assembly( comp ) && !comp->assembly->installed) ||
@@ -450,17 +472,6 @@ static MSIFILEPATCH *find_filepatch( MSIPACKAGE *package, UINT disk_id, const WC
     return NULL;
 }
 
-static BOOL is_registered_patch_media( MSIPACKAGE *package, UINT disk_id )
-{
-    MSIPATCHINFO *patch;
-
-    LIST_FOR_EACH_ENTRY( patch, &package->patches, MSIPATCHINFO, entry )
-    {
-        if (patch->disk_id == disk_id && patch->registered) return TRUE;
-    }
-    return FALSE;
-}
-
 static BOOL patchfiles_cb(MSIPACKAGE *package, LPCWSTR file, DWORD action,
                           LPWSTR *path, DWORD *attrs, PVOID user)
 {




More information about the wine-cvs mailing list