diff options
Diffstat (limited to 'mmss/config.cpp')
-rw-r--r-- | mmss/config.cpp | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/mmss/config.cpp b/mmss/config.cpp index 89f1658..8e7cea3 100644 --- a/mmss/config.cpp +++ b/mmss/config.cpp @@ -29,25 +29,23 @@ #include <config.ll.hpp> #include <config.yy.hpp> +#include <cstdio> #include <stack> #include <libgen.h> +#include <unistd.h> namespace MMSS { -namespace Config { - -void add_network(context_t *mmss, config_t *conf, const char *name) { +void config_t::add_network(const char *name) { mmss->logf(LOG_NOTICE, "adding network `%s'", name); - conf->network.push_back(std::make_shared<network_t>(name)); -} - + network.push_back(std::make_shared<network_t>(name)); } -bool read_config(context_t *mmss, config_t *conf, const char *filename) { - bool ret = true; +std::shared_ptr<const config_t> config_t::read(context_t *mmss, const char *filename) { + std::shared_ptr<config_t> conf = std::shared_ptr<config_t>(new config_t(mmss)); char *oldcwd = get_current_dir_name(); char *filename2 = NULL; char *dir = NULL; @@ -71,7 +69,7 @@ bool read_config(context_t *mmss, config_t *conf, const char *filename) { file = fopen(filename, "r"); if (!file) { mmss->logf(LOG_ERR, "can't open config file `%s': %s", filename, strerror(errno)); - ret = false; + conf.reset(); goto end_free; } } @@ -84,7 +82,7 @@ bool read_config(context_t *mmss, config_t *conf, const char *filename) { if (chdir(dir)) { mmss->logf(LOG_ERR, "change from directory `%s' to `%s' failed", oldcwd, dir); - ret = false; + conf.reset(); goto end_free; } } @@ -94,7 +92,7 @@ bool read_config(context_t *mmss, config_t *conf, const char *filename) { if (token < 0) { mmss->logf(LOG_ERR, "config error: %s at %s:%i:%i", token_val.error, filename, loc.first_line, loc.first_column); - ret = false; + conf.reset(); goto end_free; } @@ -102,11 +100,11 @@ bool read_config(context_t *mmss, config_t *conf, const char *filename) { strings.push(token_val.str); - parse_ret = mmss_config_push_parse(ps, token, &token_val, &loc, mmss, conf, filename); + parse_ret = mmss_config_push_parse(ps, token, &token_val, &loc, conf, filename); } while (parse_ret == YYPUSH_MORE); if (parse_ret) - ret = false; + conf.reset(); end_free: while (!strings.empty()) { @@ -120,13 +118,13 @@ bool read_config(context_t *mmss, config_t *conf, const char *filename) { if(chdir(oldcwd)) mmss->logf(LOG_ERR, "can't chdir to `%s': %s", oldcwd, strerror(errno)); - free(filename2); - free(oldcwd); + std::free(filename2); + std::free(oldcwd); if (filename && file) - fclose(file); + std::fclose(file); - return ret; + return conf; } } |