diff options
author | George Kadianakis <desnacked@riseup.net> | 2019-09-05 17:12:19 +0300 |
---|---|---|
committer | George Kadianakis <desnacked@riseup.net> | 2019-09-05 17:12:19 +0300 |
commit | ddd01541b909a84396e2d9ba31266ae63670c938 (patch) | |
tree | 3970c39be515202f6d6205f6ae6b4ccfba3dc9c8 /src/app/config/confparse.h | |
parent | fb56b4c2bffe5d1d752694901b1853d89e3fb8cc (diff) | |
parent | eb909c4e433087b466e78d33af8eed47adcabf16 (diff) | |
download | tor-ddd01541b909a84396e2d9ba31266ae63670c938.tar.gz tor-ddd01541b909a84396e2d9ba31266ae63670c938.zip |
Merge branch 'tor-github/pr/1294'
Diffstat (limited to 'src/app/config/confparse.h')
-rw-r--r-- | src/app/config/confparse.h | 69 |
1 files changed, 62 insertions, 7 deletions
diff --git a/src/app/config/confparse.h b/src/app/config/confparse.h index fc07996aab..6a7a567273 100644 --- a/src/app/config/confparse.h +++ b/src/app/config/confparse.h @@ -17,27 +17,62 @@ #include "lib/conf/confmacros.h" #include "lib/testsupport/testsupport.h" -/** An abbreviation for a configuration option allowed on the command line. */ +/** + * An abbreviation or alias for a configuration option. + **/ typedef struct config_abbrev_t { + /** The option name as abbreviated. Not case-sensitive. */ const char *abbreviated; + /** The full name of the option. Not case-sensitive. */ const char *full; + /** True if this abbreviation should only be allowed on the command line. */ int commandline_only; + /** True if we should warn whenever this abbreviation is used. */ int warn; } config_abbrev_t; +/** + * A note that a configuration option is deprecated, with an explanation why. + */ typedef struct config_deprecation_t { + /** The option that is deprecated. */ const char *name; + /** A user-facing string explaining why the option is deprecated. */ const char *why_deprecated; } config_deprecation_t; -/* Handy macro for declaring "In the config file or on the command line, - * you can abbreviate <b>tok</b>s as <b>tok</b>". */ +/** + * Handy macro for declaring "In the config file or on the command line, you + * can abbreviate <b>tok</b>s as <b>tok</b>". Used inside an array of + * config_abbrev_t. + * + * For example, to declare "NumCpu" as an abbreviation for "NumCPUs", + * you can say PLURAL(NumCpu). + **/ #define PLURAL(tok) { #tok, #tok "s", 0, 0 } -/** Type of a callback to validate whether a given configuration is - * well-formed and consistent. See options_trial_assign() for documentation - * of arguments. */ -typedef int (*validate_fn_t)(void*,void*,void*,int,char**); +/** + * Type of a callback to validate whether a given configuration is + * well-formed and consistent. + * + * The configuration to validate is passed as <b>newval</b>. The previous + * configuration, if any, is provided in <b>oldval</b>. The + * <b>default_val</b> argument receives a configuration object initialized + * with default values for all its fields. The <b>from_setconf</b> argument + * is true iff the input comes from a SETCONF controller command. + * + * On success, return 0. On failure, set *<b>msg_out</b> to a newly allocated + * error message, and return -1. + * + * REFACTORING NOTE: Currently, this callback type is only used from inside + * config_dump(); later in our refactoring, it will be cleaned up and used + * more generally. + */ +typedef int (*validate_fn_t)(void *oldval, + void *newval, + void *default_val, + int from_setconf, + char **msg_out); struct config_mgr_t; @@ -96,8 +131,28 @@ struct smartlist_t *config_mgr_list_deprecated_vars(const config_mgr_t *mgr); /** A collection of managed configuration objects. */ typedef struct config_suite_t config_suite_t; +/** + * Flag for config_assign: if set, then "resetting" an option changes it to + * its default value, as specified in the config_var_t. Otherwise, + * "resetting" an option changes it to a type-dependent null value -- + * typically 0 or NULL. + * + * (An option is "reset" when it is set to an empty value, or as described in + * CAL_CLEAR_FIRST). + **/ #define CAL_USE_DEFAULTS (1u<<0) +/** + * Flag for config_assign: if set, then we reset every provided config + * option before we set it. + * + * For example, if this flag is not set, then passing a multi-line option to + * config_assign will cause any previous value to be extended. But if this + * flag is set, then a multi-line option will replace any previous value. + **/ #define CAL_CLEAR_FIRST (1u<<1) +/** + * Flag for config_assign: if set, we warn about deprecated options. + **/ #define CAL_WARN_DEPRECATIONS (1u<<2) void *config_new(const config_mgr_t *fmt); |