Piotr Caban : msi: Fix feature actions overriding in process_state_property.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jul 24 14:52:42 CDT 2014


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Jul 24 12:35:31 2014 +0200

msi: Fix feature actions overriding in process_state_property.

---

 dlls/msi/action.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index feb8296..9dc804c 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -1666,6 +1666,8 @@ static BOOL process_state_property(MSIPACKAGE* package, int level,
 {
     LPWSTR override;
     MSIFEATURE *feature;
+    BOOL remove = !strcmpW(property, szRemove);
+    BOOL reinstall = !strcmpW(property, szReinstall);
 
     override = msi_dup_property( package->db, property );
     if (!override)
@@ -1676,15 +1678,15 @@ static BOOL process_state_property(MSIPACKAGE* package, int level,
         if (strcmpW( property, szRemove ) && !is_feature_selected( feature, level ))
             continue;
 
-        if (!strcmpW(property, szReinstall)) state = feature->Installed;
+        if (reinstall)
+            state = (feature->Installed == INSTALLSTATE_ABSENT ? INSTALLSTATE_UNKNOWN : feature->Installed);
+        else if (remove)
+            state = (feature->Installed == INSTALLSTATE_ABSENT ? INSTALLSTATE_UNKNOWN : INSTALLSTATE_ABSENT);
 
         if (!strcmpiW( override, szAll ))
         {
-            if (feature->Installed != state)
-            {
-                feature->Action = state;
-                feature->ActionRequest = state;
-            }
+            feature->Action = state;
+            feature->ActionRequest = state;
         }
         else
         {
@@ -1698,11 +1700,8 @@ static BOOL process_state_property(MSIPACKAGE* package, int level,
                 if ((ptr2 && strlenW(feature->Feature) == len && !strncmpW(ptr, feature->Feature, len))
                     || (!ptr2 && !strcmpW(ptr, feature->Feature)))
                 {
-                    if (feature->Installed != state)
-                    {
-                        feature->Action = state;
-                        feature->ActionRequest = state;
-                    }
+                    feature->Action = state;
+                    feature->ActionRequest = state;
                     break;
                 }
                 if (ptr2)




More information about the wine-cvs mailing list