From 9a103e5b768c375049d0474881694c8f402eddd2 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 21 Jan 2009 13:54:51 -0800 Subject: [PATCH] confutils: some more changes Signed-off-by: Yehuda Sadeh --- src/common/ConfUtils.cc | 33 +++++++++++++++++++++++++++++++++ src/config.cc | 13 +++++++++---- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/common/ConfUtils.cc b/src/common/ConfUtils.cc index 16e9a83bf72c8..11bf08b1ede80 100644 --- a/src/common/ConfUtils.cc +++ b/src/common/ConfUtils.cc @@ -214,6 +214,7 @@ static int _str_cat(char *str1, int max, char *str2) void ConfFile::dump() { +#if 0 std::list::iterator iter, end; struct conf_line *cl; char line[MAX_LINE]; @@ -243,6 +244,22 @@ void ConfFile::dump() printf("line=%s\n", line); } } +#endif + ConfMap *cur_map; + ConfMap::iterator map_iter, map_end; + SectionMap::iterator sec_iter, sec_end; + + sec_end = sections.end(); + + for (sec_iter = sections.begin(); sec_iter != sec_end; ++sec_iter) { + cur_map = sec_iter->second; + map_end = cur_map->end(); + + for (map_iter = cur_map->begin(); map_iter != map_end; ++map_iter) { + + } + } + } int ConfFile::parse() @@ -406,6 +423,22 @@ notfound: return 0; } +int ConfFile::read_str_alloc(char *section, char *var, char **val, char *def_val) +{ + struct conf_line *cl; + + cl = _find_var(section, var); + if (!cl || !cl->val) + goto notfound; + + *val = strdup(cl->val); + + return 1; +notfound: + *val = strdup(def_val); + return 0; +} + void parse_test(char *line) { struct conf_line cl; diff --git a/src/config.cc b/src/config.cc index 4f6212d1d60fa..ae173710fb717 100644 --- a/src/config.cc +++ b/src/config.cc @@ -36,6 +36,8 @@ atomic_t buffer_total_alloc; #include "osd/osd_types.h" +#include "common/ConfUtils.h" + int buffer::list::read_file(const char *fn) { struct stat st; @@ -604,7 +606,10 @@ void parse_config_file(char *fname) cf.parse(); #define CF_READ(section, type, field, inout) \ - cf.read_#type(section, ##field, &inout, inout) + cf.read_##type((char *)section, (char *)#field, &inout, inout) + +#define CF_READ_STR(section, type, field, inout) \ + cf.read_##type((char *)section, (char *)#field, (char **)&inout, (char *)inout) CF_READ("global", int, num_mon, g_conf.num_mon); CF_READ("global", int, num_mon, g_conf.num_mds); @@ -614,11 +619,11 @@ void parse_config_file(char *fname) CF_READ("global", bool, file_logs, g_conf.file_logs); CF_READ("global", bool, log, g_conf.log); CF_READ("global", int, log_interval, g_conf.log_interval); - CF_READ("global", str, log_name, g_conf.log_name); + CF_READ_STR("global", str_alloc, log_name, g_conf.log_name); CF_READ("global", bool, log_messages, g_conf.log_messages); CF_READ("global", bool, log_pins, g_conf.log_pins); - CF_READ("global", bool, dout_dir, g_conf.dout_dir); - CF_READ("global", bool, dout_sym_dir, g_conf.dout_sym_dir); + CF_READ_STR("global", str_alloc, dout_dir, g_conf.dout_dir); + CF_READ_STR("global", str_alloc, dout_sym_dir, g_conf.dout_sym_dir); } void parse_config_options(std::vector& args, bool open) -- 2.39.5