static int
string_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void)params;
(void)errmsg;
+ (void)key;
char **p = (char**)target;
*p = tor_strdup(value);
return 0;
};
static int
-int_parse(void *target, const char *value, char **errmsg, const void *params)
+int_parse(void *target, const char *value, char **errmsg, const void *params,
+ const char *key)
{
+ (void)key;
const int_parse_params_t *pp;
if (params) {
pp = params;
static int
uint64_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void)params;
(void)errmsg;
+ (void)key;
uint64_t *p = target;
int ok=0;
*p = tor_parse_uint64(value, 10, 0, UINT64_MAX, &ok, NULL);
static int
units_parse_u64(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
+ (void)key;
const unit_table_t *table = params;
tor_assert(table);
uint64_t *v = (uint64_t*)target;
static int
units_parse_int(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
+ (void)key;
const unit_table_t *table = params;
tor_assert(table);
int *v = (int*)target;
static int
double_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void)params;
(void)errmsg;
+ (void)key;
double *v = (double*)target;
char *endptr=NULL;
errno = 0;
static int
enum_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
+ (void)key;
const enumeration_table_t *table = params;
int *p = (int *)target;
for (; table->name; ++table) {
static int
time_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void) params;
+ (void) key;
time_t *p = target;
if (parse_iso_time(value, p) < 0) {
tor_asprintf(errmsg, "Invalid time %s", escaped(value));
static int
csv_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void)params;
(void)errmsg;
+ (void)key;
smartlist_t **sl = (smartlist_t**)target;
*sl = smartlist_new();
smartlist_split_string(*sl, value, ",",
static int
legacy_csv_interval_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void)params;
/* We used to have entire smartlists here. But now that all of our
val = tmp;
}
- int rv = units_parse_int(target, val, errmsg, &time_units);
+ int rv = units_parse_int(target, val, errmsg, &time_units, key);
tor_free(tmp);
return rv;
}
static int
ignore_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void)target;
(void)value;
(void)errmsg;
(void)params;
// XXXX move this to a higher level, once such a level exists.
- log_warn(LD_GENERAL, "Skipping obsolete configuration option.");
+ log_warn(LD_GENERAL, "Skipping obsolete configuration option%s%s%s",
+ key && *key ? " \"" : "",
+ key && *key ? key : "",
+ key && *key ? "\"." : ".");
return 0;
}
/**
* Try to parse a string in <b>value</b> that encodes an object of the type
- * defined by <b>def</b>.
+ * defined by <b>def</b>. If not NULL, <b>key</b> is the name of the option,
+ * which may be used for logging.
*
* On success, adjust the lvalue pointed to by <b>target</b> to hold that
* value, and return 0. On failure, set *<b>errmsg</b> to a newly allocated
**/
int
typed_var_assign(void *target, const char *value, char **errmsg,
- const var_type_def_t *def)
+ const var_type_def_t *def, const char *key)
{
if (BUG(!def))
return -1; // LCOV_EXCL_LINE
typed_var_free(target, def);
tor_assert(def->fns->parse);
- return def->fns->parse(target, value, errmsg, def->params);
+ return def->fns->parse(target, value, errmsg, def->params, key);
}
/**
return def->fns->kv_parse(target, line, errmsg, def->params);
}
- return typed_var_assign(target, line->value, errmsg, def);
+ return typed_var_assign(target, line->value, errmsg, def, line->key);
}
/**
return 0;
}
char *err = NULL;
- int rv = typed_var_assign(dest, enc, &err, def);
+ int rv = typed_var_assign(dest, enc, &err, def, NULL);
if (BUG(rv < 0)) {
// LCOV_EXCL_START
log_warn(LD_BUG, "Encoded value %s was not parseable as a %s: %s",