summaryrefslogtreecommitdiffstats
path: root/mmss/config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mmss/config.cpp')
-rw-r--r--mmss/config.cpp32
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;
}
}