mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
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!)
This commit is contained in:
parent
4b92f4c83a
commit
1b3b6d9f2d
@ -511,6 +511,18 @@ config_count_options(const config_mgr_t *mgr)
|
||||
return smartlist_len(mgr->all_vars);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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)
|
||||
/** 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_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)
|
||||
{
|
||||
const var_type_def_t *def = get_type_def(member);
|
||||
|
||||
return def ? var_type_is_contained(def) : false;
|
||||
return def ? def->flags : 0;
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) */
|
||||
|
Loading…
Reference in New Issue
Block a user