diff options
-rw-r--r-- | src/app/config/confparse.c | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/src/app/config/confparse.c b/src/app/config/confparse.c index 752d16c844..b9b5fddb96 100644 --- a/src/app/config/confparse.c +++ b/src/app/config/confparse.c @@ -542,17 +542,15 @@ config_is_same(const config_format_t *fmt, const void *o1, const void *o2, const char *name) { - config_line_t *c1, *c2; - int r = 1; CONFIG_CHECK(fmt, o1); CONFIG_CHECK(fmt, o2); - c1 = config_get_assigned_option(fmt, o1, name, 0); - c2 = config_get_assigned_option(fmt, o2, name, 0); - r = config_lines_eq(c1, c2); - config_free_lines(c1); - config_free_lines(c2); - return r; + const config_var_t *var = config_find_option(fmt, name); + if (!var) { + return true; + } + + return struct_var_eq(o1, o2, &var->member); } /** Copy storage held by <b>old</b> into a new or_options_t and return it. */ @@ -561,7 +559,6 @@ config_dup(const config_format_t *fmt, const void *old) { void *newopts; int i; - config_line_t *line; newopts = config_new(fmt); for (i=0; fmt->vars[i].member.name; ++i) { @@ -569,19 +566,13 @@ config_dup(const config_format_t *fmt, const void *old) continue; if (fmt->vars[i].member.type == CONFIG_TYPE_OBSOLETE) continue; - line = config_get_assigned_option(fmt, old, fmt->vars[i].member.name, 0); - if (line) { - char *msg = NULL; - if (config_assign(fmt, newopts, line, 0, &msg) < 0) { - // LCOV_EXCL_START - log_err(LD_BUG, "config_get_assigned_option() generated " - "something we couldn't config_assign(): %s", msg); - tor_free(msg); - tor_assert(0); - // LCOV_EXCL_STOP - } + if (struct_var_copy(newopts, old, &fmt->vars[i].member) < 0) { + // LCOV_EXCL_START + log_err(LD_BUG, "Unable to copy value for %s.", + fmt->vars[i].member.name); + tor_assert_unreached(); + // LCOV_EXCL_STOP } - config_free_lines(line); } return newopts; } |