Mike McCormack : msi: Create macro functions to set feature and component states.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Oct 26 06:31:26 CDT 2006


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

Author: Mike McCormack <mike at codeweavers.com>
Date:   Thu Oct 26 12:34:52 2006 +0900

msi: Create macro functions to set feature and component states.

---

 dlls/msi/action.c |  135 ++++++++++++++++++++---------------------------------
 1 files changed, 51 insertions(+), 84 deletions(-)

diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index 84275f9..3000ca0 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -1696,12 +1696,24 @@ static BOOL process_state_property (MSIP
                     break;
             }
         }
-    } 
+    }
     msi_free(override);
 
     return TRUE;
 }
 
+static void msi_feature_set_state( MSIFEATURE *feature, INSTALLSTATE state )
+{
+    feature->ActionRequest = state;
+    feature->Action = state;
+}
+
+static void msi_component_set_state( MSICOMPONENT *comp, INSTALLSTATE state )
+{
+    comp->ActionRequest = state;
+    comp->Action = state;
+}
+
 UINT MSI_SetFeatureStates(MSIPACKAGE *package)
 {
     int install_level;
@@ -1740,7 +1752,7 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *pa
      * 11) FILEADDDEFAULT
      * I have confirmed that if ADDLOCAL is stated then the INSTALLLEVEL is
      * ignored for all the features. seems strange, especially since it is not
-     * documented anywhere, but it is how it works. 
+     * documented anywhere, but it is how it works.
      *
      * I am still ignoring a lot of these. But that is ok for now, ADDLOCAL and
      * REMOVE are the big ones, since we don't handle administrative installs
@@ -1760,20 +1772,11 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *pa
             if ((feature_state) && (feature->Action == INSTALLSTATE_UNKNOWN))
             {
                 if (feature->Attributes & msidbFeatureAttributesFavorSource)
-                {
-                    feature->ActionRequest = INSTALLSTATE_SOURCE;
-                    feature->Action = INSTALLSTATE_SOURCE;
-                }
+                    msi_feature_set_state( feature, INSTALLSTATE_SOURCE );
                 else if (feature->Attributes & msidbFeatureAttributesFavorAdvertise)
-                {
-                    feature->ActionRequest = INSTALLSTATE_ADVERTISED;
-                    feature->Action = INSTALLSTATE_ADVERTISED;
-                }
+                    msi_feature_set_state( feature, INSTALLSTATE_ADVERTISED );
                 else
-                {
-                    feature->ActionRequest = INSTALLSTATE_LOCAL;
-                    feature->Action = INSTALLSTATE_LOCAL;
-                }
+                    msi_feature_set_state( feature, INSTALLSTATE_LOCAL );
             }
         }
 
@@ -1786,10 +1789,7 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *pa
                 continue;
 
             LIST_FOR_EACH_ENTRY( fl, &feature->Children, FeatureList, entry )
-            {
-                fl->feature->ActionRequest = INSTALLSTATE_UNKNOWN;
-                fl->feature->Action = INSTALLSTATE_UNKNOWN;
-            }
+                msi_feature_set_state( fl->feature, INSTALLSTATE_UNKNOWN );
         }
     }
     else
@@ -1802,8 +1802,8 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *pa
     }
 
     /*
-     * now we want to enable or disable components base on feature 
-    */
+     * now we want to enable or disable components base on feature
+     */
 
     LIST_FOR_EACH_ENTRY( feature, &package->features, MSIFEATURE, entry )
     {
@@ -1820,92 +1820,59 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *pa
             switch (component->Attributes)
             {
             case msidbComponentAttributesLocalOnly:
-                component->Action = INSTALLSTATE_LOCAL;
-                component->ActionRequest = INSTALLSTATE_LOCAL;
+                msi_component_set_state( component, INSTALLSTATE_LOCAL );
                 break;
             case msidbComponentAttributesSourceOnly:
-                component->Action = INSTALLSTATE_SOURCE;
-                component->ActionRequest = INSTALLSTATE_SOURCE;
+                msi_component_set_state( component, INSTALLSTATE_SOURCE );
                 break;
             case msidbComponentAttributesOptional:
-                component->Action = INSTALLSTATE_DEFAULT;
-                component->ActionRequest = INSTALLSTATE_DEFAULT;
+                msi_component_set_state( component, INSTALLSTATE_DEFAULT );
                 break;
             default:
-                component->Action = INSTALLSTATE_LOCAL;
-                component->ActionRequest = INSTALLSTATE_LOCAL;
+                msi_component_set_state( component, INSTALLSTATE_LOCAL );
             }
 
             if (component->ForceLocalState)
-            {
-                component->Action = INSTALLSTATE_LOCAL;
-                component->ActionRequest = INSTALLSTATE_LOCAL;
-            }
+                msi_component_set_state( component, INSTALLSTATE_LOCAL );
 
             if (!component->Enabled)
+                msi_component_set_state( component, INSTALLSTATE_UNKNOWN );
+            else if (feature->Attributes == msidbFeatureAttributesFavorLocal)
             {
-                component->Action = INSTALLSTATE_UNKNOWN;
-                component->ActionRequest = INSTALLSTATE_UNKNOWN;
+                if (!(component->Attributes & msidbComponentAttributesSourceOnly))
+                    msi_component_set_state( component, INSTALLSTATE_LOCAL );
             }
-            else
+            else if (feature->Attributes == msidbFeatureAttributesFavorSource)
             {
-                if (feature->Attributes == msidbFeatureAttributesFavorLocal)
-                {
-                    if (!(component->Attributes & msidbComponentAttributesSourceOnly))
-                    {
-                        component->Action = INSTALLSTATE_LOCAL;
-                        component->ActionRequest = INSTALLSTATE_LOCAL;
-                    }
-                }
-                else if (feature->Attributes == msidbFeatureAttributesFavorSource)
-                {
-                    if ((component->Action == INSTALLSTATE_UNKNOWN) ||
-                        (component->Action == INSTALLSTATE_ABSENT) ||
-                        (component->Action == INSTALLSTATE_ADVERTISED) ||
-                        (component->Action == INSTALLSTATE_DEFAULT))
-                           
-                    {
-                        component->Action = INSTALLSTATE_SOURCE;
-                        component->ActionRequest = INSTALLSTATE_SOURCE;
-                    }
-                }
-                else if (feature->ActionRequest == INSTALLSTATE_ADVERTISED)
-                {
-                    if ((component->Action == INSTALLSTATE_UNKNOWN) ||
-                        (component->Action == INSTALLSTATE_ABSENT))
-                           
-                    {
-                        component->Action = INSTALLSTATE_ADVERTISED;
-                        component->ActionRequest = INSTALLSTATE_ADVERTISED;
-                    }
-                }
-                else if (feature->ActionRequest == INSTALLSTATE_ABSENT)
-                {
-                    if (component->Action == INSTALLSTATE_UNKNOWN)
-                    {
-                        component->Action = INSTALLSTATE_ABSENT;
-                        component->ActionRequest = INSTALLSTATE_ABSENT;
-                    }
-                }
-                else if (feature->ActionRequest == INSTALLSTATE_UNKNOWN)
-                {
-                    component->Action = INSTALLSTATE_UNKNOWN;
-                    component->ActionRequest = INSTALLSTATE_UNKNOWN;
-                }
+                if ((component->Action == INSTALLSTATE_UNKNOWN) ||
+                    (component->Action == INSTALLSTATE_ABSENT) ||
+                    (component->Action == INSTALLSTATE_ADVERTISED) ||
+                    (component->Action == INSTALLSTATE_DEFAULT))
+                    msi_component_set_state( component, INSTALLSTATE_SOURCE );
             }
-
-            if (component->ForceLocalState && feature->Action == INSTALLSTATE_SOURCE)
+            else if (feature->ActionRequest == INSTALLSTATE_ADVERTISED)
+            {
+                if ((component->Action == INSTALLSTATE_UNKNOWN) ||
+                    (component->Action == INSTALLSTATE_ABSENT))
+                    msi_component_set_state( component, INSTALLSTATE_ADVERTISED );
+            }
+            else if (feature->ActionRequest == INSTALLSTATE_ABSENT)
             {
-                feature->Action = INSTALLSTATE_LOCAL;
-                feature->ActionRequest = INSTALLSTATE_LOCAL;
+                if (component->Action == INSTALLSTATE_UNKNOWN)
+                    msi_component_set_state( component, INSTALLSTATE_ABSENT );
             }
+            else if (feature->ActionRequest == INSTALLSTATE_UNKNOWN)
+                msi_component_set_state( component, INSTALLSTATE_UNKNOWN );
+
+            if (component->ForceLocalState && feature->Action == INSTALLSTATE_SOURCE)
+                msi_feature_set_state( feature, INSTALLSTATE_LOCAL );
         }
-    } 
+    }
 
     LIST_FOR_EACH_ENTRY( component, &package->components, MSICOMPONENT, entry )
     {
         TRACE("Result: Component %s (Installed %i, Action %i, Request %i)\n",
-            debugstr_w(component->Component), component->Installed, 
+            debugstr_w(component->Component), component->Installed,
             component->Action, component->ActionRequest);
     }
 




More information about the wine-cvs mailing list