From: Sage Weil Date: Fri, 25 Sep 2009 21:51:22 +0000 (-0700) Subject: conf: don't run over g_conf options when setting them X-Git-Tag: v0.16~77 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9acb1994c2a051c8be2f4d3cde4db1bc48990f75;p=ceph.git conf: don't run over g_conf options when setting them --- diff --git a/src/config.cc b/src/config.cc index 901b8b92c194..b8b8d4702d6e 100644 --- a/src/config.cc +++ b/src/config.cc @@ -574,10 +574,11 @@ bool conf_set_conf_val(void *field, opt_type_t type, const char *val, long long *(long long *)field = intval; break; case OPT_STR: - if (val) + if (val) { *(char **)field = strdup(val); - else + } else { *(char **)field = NULL; + } break; case OPT_FLOAT: *(float *)field = doubleval; @@ -592,6 +593,35 @@ bool conf_set_conf_val(void *field, opt_type_t type, const char *val, long long return true; } +static bool conf_reset_val(void *field, opt_type_t type) +{ + switch (type) { + case OPT_BOOL: + *(bool *)field = 0; + break; + case OPT_INT: + *(int *)field = 0; + break; + case OPT_LONGLONG: + *(long long *)field = 0; + break; + case OPT_STR: + *(char **)field = NULL; + break; + case OPT_FLOAT: + *(float *)field = 0; + break; + case OPT_DOUBLE: + *(double *)field = 0; + break; + default: + return false; + } + + return true; +} + + static void set_conf_name(config_option *opt) { char *newsection = (char *)opt->section; @@ -636,7 +666,7 @@ static bool init_g_conf() for (i = 0; ival_ptr) { - *(char **)opt->val_ptr = NULL; + conf_reset_val(opt->val_ptr, opt->type); } if (!conf_set_conf_val(opt->val_ptr, opt->type,