From 9b571d4729f0a6a6c1040ad9cb3e452ff0a5cee6 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 5 Sep 2019 11:48:46 -0400 Subject: [PATCH] confparse, conftypes: Replace flags with their new names. The old names remain as #defines that cause variables to get one or more flags. Now every flag-testing function in confparse.c tests exactly one flag. --- src/app/config/confparse.c | 29 ++++--------------- src/lib/conf/conftypes.h | 59 ++++++++++++++++++++++++++++---------- 2 files changed, 50 insertions(+), 38 deletions(-) diff --git a/src/app/config/confparse.c b/src/app/config/confparse.c index 7579d9ef8e..dcbad0b900 100644 --- a/src/app/config/confparse.c +++ b/src/app/config/confparse.c @@ -531,7 +531,7 @@ config_var_has_flag(const config_var_t *var, uint32_t flag) static bool config_var_is_replaced_on_set(const config_var_t *var) { - return ! config_var_has_flag(var, VTFLAG_CUMULATIVE); + return ! config_var_has_flag(var, CFLG_NOREPLACE); } /** @@ -541,7 +541,7 @@ config_var_is_replaced_on_set(const config_var_t *var) bool config_var_is_settable(const config_var_t *var) { - return ! config_var_has_flag(var, CVFLAG_OBSOLETE | VTFLAG_UNSETTABLE); + return ! config_var_has_flag(var, CFLG_NOSET); } /** @@ -561,23 +561,6 @@ config_var_is_gettable(const config_var_t *var) return true; } -/** - * Return true iff this is variable is "derived" from another -- that is, - * inspecting this variable inspects part of another, and changing this - * variable changes part of another. - * - * Derived variables require special handling in several ways: they do not - * need to be copied independently when we are copying a config object, since - * copying the variable they are derived from copies them too. Similarly, - * they do not need to be compared independently when listing changes, since - * comparing the variable that they are derived from compares them too. - **/ -static bool -config_var_is_derived(const config_var_t *var) -{ - return config_var_has_flag(var, VTFLAG_CONTAINED); -} - /** * Return true iff we need to check var for changes when we are * comparing config options for changes. @@ -589,7 +572,7 @@ config_var_is_derived(const config_var_t *var) static bool config_var_should_list_changes(const config_var_t *var) { - return ! config_var_is_derived(var); + return ! config_var_has_flag(var, CFLG_NOCMP); } /** @@ -603,7 +586,7 @@ config_var_should_list_changes(const config_var_t *var) static bool config_var_needs_copy(const config_var_t *var) { - return ! config_var_is_derived(var); + return ! config_var_has_flag(var, CFLG_NOCOPY); } /**h @@ -613,7 +596,7 @@ config_var_needs_copy(const config_var_t *var) bool config_var_is_listable(const config_var_t *var) { - return ! config_var_has_flag(var, CVFLAG_INVISIBLE); + return ! config_var_has_flag(var, CFLG_NOLIST); } /** @@ -627,7 +610,7 @@ config_var_is_listable(const config_var_t *var) static bool config_var_is_dumpable(const config_var_t *var) { - return ! config_var_has_flag(var, VTFLAG_CONTAINED | CVFLAG_NODUMP); + return ! config_var_has_flag(var, CFLG_NODUMP); } /* diff --git a/src/lib/conf/conftypes.h b/src/lib/conf/conftypes.h index 290b5831e5..d5ab4e51cc 100644 --- a/src/lib/conf/conftypes.h +++ b/src/lib/conf/conftypes.h @@ -131,42 +131,71 @@ typedef struct struct_magic_decl_t { ptrdiff_t magic_offset; } struct_magic_decl_t; -/** - * Flag to indicate that an option is obsolete. Any attempt to set or - * fetch this option should produce a warning. - **/ -#define CVFLAG_OBSOLETE (1u<<0) /** * Flag to indicate that an option is undumpable. An undumpable option is - * never saved to disk. For historical reasons it is prefixed with __ but - * not with ___. + * never saved to disk. + * + * For historical reasons it is prefixed with __ but not with ___. **/ -#define CVFLAG_NODUMP (1u<<1) +#define CFLG_NODUMP (1u<<0) /** * Flag to indicate that an option is "invisible". An invisible option * is always undumpable, and we don't tell the controller about it. * For historical reasons it is prefixed with ___. **/ -#define CVFLAG_INVISIBLE (1u<<2) +#define CFLG_NOLIST (1u<<1) /** * Flag for var_type_def_t. * Set iff a variable of this type can never be set directly by name. **/ -#define VTFLAG_UNSETTABLE (1u<<3) +#define CFLG_NOSET (1u<<2) /** * Flag for var_type_def_t. - * Set iff a variable of this type is always contained in another - * variable, and as such doesn't need to be dumped or copied - * independently. + * Set iff a variable of this type is does not need to be copied when copying + * the structure that contains it. **/ -#define VTFLAG_CONTAINED (1u<<4) +#define CFLG_NOCOPY (1u<<3) +/** + * Flag for var_type_def_t. + * Set iff a variable of this type does not need to be compared when comparing + * two objects that contain it. + **/ +#define CFLG_NOCMP (1u<<4) /** * Flag for var_type_def_t. * Set iff a variable of this type can be set more than once without * destroying older values. Such variables should implement "mark_fragile". */ -#define VTFLAG_CUMULATIVE (1u<<5) +#define CFLG_NOREPLACE (1u<<5) + +/* Aliases for old individual options. These will get removed soon. */ +#define CVFLAG_NODUMP CFLG_NODUMP +#define VTFLAG_CUMULATIVE CFLG_NOREPLACE +#define VTFLAG_UNSETTABLE CFLG_NOSET + +/** + * Set of flags to make a variable "derived" -- so that inspecting this + * variable inspects part of another, and changing this variable changes part + * of another. + * + * Derived variables require special handling in several ways: they do not + * need to be copied independently when we are copying a config object, since + * copying the variable they are derived from copies them too. Similarly, + * they do not need to be compared independently when listing changes, since + * comparing the variable that they are derived from compares them too. + **/ +#define VTFLAG_CONTAINED \ + (CFLG_NOCOPY | CFLG_NOCMP | CFLG_NODUMP) + +/** Set of options to make a flag invisible. */ +#define CVFLAG_INVISIBLE \ + (CFLG_NODUMP | CFLG_NOSET | CFLG_NOLIST) +/** + * Set of flags to indicate that a configuration option is obsolete. + **/ +#define CVFLAG_OBSOLETE \ + (CFLG_NOSET | CFLG_NOLIST | CFLG_NODUMP | CFLG_NOCOPY | CFLG_NOCMP) /** A variable allowed in the configuration file or on the command line. */ typedef struct config_var_t {