[tor-commits] [tor/master] Replace low-level {var_type, struct_var}_is_*() with flag inspection

dgoulet at torproject.org dgoulet at torproject.org
Wed Sep 11 14:02:05 UTC 2019


commit 1b3b6d9f2d94e659375257a5c439d250ce0075fd
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Sep 5 11:48:44 2019 -0400

    Replace low-level {var_type,struct_var}_is_*() with flag inspection
    
    Since the flags are now stored with compatible numbering, we can
    just OR them together and see whether the flag we want is in the
    result.
    
    (Net code removal!)
---
 src/app/config/confparse.c  | 29 ++++++++++++++++++-----------
 src/lib/confmgt/structvar.c | 23 ++++-------------------
 src/lib/confmgt/structvar.h |  5 ++---
 src/lib/confmgt/typedvar.c  | 29 -----------------------------
 src/lib/confmgt/typedvar.h  |  4 ----
 5 files changed, 24 insertions(+), 66 deletions(-)

diff --git a/src/app/config/confparse.c b/src/app/config/confparse.c
index 2c8779bbe..7579d9ef8 100644
--- a/src/app/config/confparse.c
+++ b/src/app/config/confparse.c
@@ -512,6 +512,18 @@ config_count_options(const config_mgr_t *mgr)
 }
 
 /**
+ * Return true iff at least one bit from <b>flag</b> is set on <b>var</b>,
+ * either in <b>var</b>'s flags, or on the flags of its type.
+ **/
+static bool
+config_var_has_flag(const config_var_t *var, uint32_t flag)
+{
+  uint32_t have_flags = var->flags | struct_var_get_flags(&var->member);
+
+  return (have_flags & flag) != 0;
+}
+
+/**
  * Return true if assigning a value to <b>var</b> replaces the previous
  * value.  Return false if assigning a value to <b>var</b> appends
  * to the previous value.
@@ -519,7 +531,7 @@ config_count_options(const config_mgr_t *mgr)
 static bool
 config_var_is_replaced_on_set(const config_var_t *var)
 {
-  return ! struct_var_is_cumulative(&var->member);
+  return ! config_var_has_flag(var, VTFLAG_CUMULATIVE);
 }
 
 /**
@@ -529,9 +541,7 @@ config_var_is_replaced_on_set(const config_var_t *var)
 bool
 config_var_is_settable(const config_var_t *var)
 {
-  if (var->flags & CVFLAG_OBSOLETE)
-    return false;
-  return struct_var_is_settable(&var->member);
+  return ! config_var_has_flag(var, CVFLAG_OBSOLETE | VTFLAG_UNSETTABLE);
 }
 
 /**
@@ -546,7 +556,7 @@ config_var_is_gettable(const config_var_t *var)
    * have compatibility effects.  For now, let's leave them alone.
    */
 
-  // return (var->flags & (CVFLAG_OBSOLETE|CFGLAGS_INVISIBLE)) == 0;
+  // return ! config_var_has_flag(var, CVFLAG_OBSOLETE|CFGLAGS_INVISIBLE);
   (void)var;
   return true;
 }
@@ -565,7 +575,7 @@ config_var_is_gettable(const config_var_t *var)
 static bool
 config_var_is_derived(const config_var_t *var)
 {
-  return struct_var_is_contained(&var->member);
+  return config_var_has_flag(var, VTFLAG_CONTAINED);
 }
 
 /**
@@ -603,7 +613,7 @@ config_var_needs_copy(const config_var_t *var)
 bool
 config_var_is_listable(const config_var_t *var)
 {
-  return (var->flags & CVFLAG_INVISIBLE) == 0;
+  return ! config_var_has_flag(var, CVFLAG_INVISIBLE);
 }
 
 /**
@@ -617,10 +627,7 @@ config_var_is_listable(const config_var_t *var)
 static bool
 config_var_is_dumpable(const config_var_t *var)
 {
-  if (config_var_is_derived(var)) {
-    return false;
-  }
-  return (var->flags & CVFLAG_NODUMP) == 0;
+  return ! config_var_has_flag(var, VTFLAG_CONTAINED | CVFLAG_NODUMP);
 }
 
 /*
diff --git a/src/lib/confmgt/structvar.c b/src/lib/confmgt/structvar.c
index 6b725f613..cb37f540b 100644
--- a/src/lib/confmgt/structvar.c
+++ b/src/lib/confmgt/structvar.c
@@ -238,26 +238,11 @@ struct_var_get_typename(const struct_member_t *member)
   return def ? def->name : NULL;
 }
 
-bool
-struct_var_is_cumulative(const struct_member_t *member)
-{
-  const var_type_def_t *def = get_type_def(member);
-
-  return def ? var_type_is_cumulative(def) : false;
-}
-
-bool
-struct_var_is_settable(const struct_member_t *member)
-{
-  const var_type_def_t *def = get_type_def(member);
-
-  return def ? var_type_is_settable(def) : true;
-}
-
-bool
-struct_var_is_contained(const struct_member_t *member)
+/** Return all of the flags set for this struct member. */
+uint32_t
+struct_var_get_flags(const struct_member_t *member)
 {
   const var_type_def_t *def = get_type_def(member);
 
-  return def ? var_type_is_contained(def) : false;
+  return def ? def->flags : 0;
 }
diff --git a/src/lib/confmgt/structvar.h b/src/lib/confmgt/structvar.h
index e6dbc6d6e..201211f79 100644
--- a/src/lib/confmgt/structvar.h
+++ b/src/lib/confmgt/structvar.h
@@ -17,6 +17,7 @@ struct struct_member_t;
 struct config_line_t;
 
 #include <stdbool.h>
+#include "lib/cc/torint.h"
 
 void struct_set_magic(void *object,
                       const struct struct_magic_decl_t *decl);
@@ -45,9 +46,7 @@ void struct_var_mark_fragile(void *object,
 
 const char *struct_var_get_name(const struct struct_member_t *member);
 const char *struct_var_get_typename(const struct struct_member_t *member);
-bool struct_var_is_cumulative(const struct struct_member_t *member);
-bool struct_var_is_settable(const struct struct_member_t *member);
-bool struct_var_is_contained(const struct struct_member_t *member);
+uint32_t struct_var_get_flags(const struct struct_member_t *member);
 
 int struct_var_kvassign(void *object, const struct config_line_t *line,
                         char **errmsg,
diff --git a/src/lib/confmgt/typedvar.c b/src/lib/confmgt/typedvar.c
index 751d15827..219a2d15b 100644
--- a/src/lib/confmgt/typedvar.c
+++ b/src/lib/confmgt/typedvar.c
@@ -225,32 +225,3 @@ typed_var_mark_fragile(void *value, const var_type_def_t *def)
   if (def->fns->mark_fragile)
     def->fns->mark_fragile(value, def->params);
 }
-
-/**
- * Return true iff multiple assignments to a variable will extend its
- * value, rather than replacing it.
- **/
-bool
-var_type_is_cumulative(const var_type_def_t *def)
-{
-  return (def->flags & VTFLAG_CUMULATIVE) != 0;
-}
-
-/**
- * Return true iff this variable type is always contained in another variable,
- * and as such doesn't need to be dumped or copied independently.
- **/
-bool
-var_type_is_contained(const var_type_def_t *def)
-{
-  return (def->flags & VTFLAG_CONTAINED) != 0;
-}
-
-/**
- * Return true iff this type can not be assigned directly by the user.
- **/
-bool
-var_type_is_settable(const var_type_def_t *def)
-{
-  return (def->flags & VTFLAG_UNSETTABLE) == 0;
-}
diff --git a/src/lib/confmgt/typedvar.h b/src/lib/confmgt/typedvar.h
index 23fd8c13e..22f2e3c58 100644
--- a/src/lib/confmgt/typedvar.h
+++ b/src/lib/confmgt/typedvar.h
@@ -35,8 +35,4 @@ struct config_line_t *typed_var_kvencode(const char *key, const void *value,
 
 void typed_var_mark_fragile(void *value, const var_type_def_t *def);
 
-bool var_type_is_cumulative(const var_type_def_t *def);
-bool var_type_is_contained(const var_type_def_t *def);
-bool var_type_is_settable(const var_type_def_t *def);
-
 #endif /* !defined(TOR_LIB_CONFMGT_TYPEDVAR_H) */





More information about the tor-commits mailing list