summaryrefslogtreecommitdiffstats
path: root/mmss/config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mmss/config.cpp')
-rw-r--r--mmss/config.cpp40
1 files changed, 26 insertions, 14 deletions
diff --git a/mmss/config.cpp b/mmss/config.cpp
index 0be95fb..529e9b1 100644
--- a/mmss/config.cpp
+++ b/mmss/config.cpp
@@ -28,13 +28,19 @@
#include <config.ll.hpp>
#include <config.yy.hpp>
+#include <stack>
+
#include <libgen.h>
-void mmss_config_add_network(mmss_t *mmss, mmss_config_t *conf, const char *name) {
- mmss_logf(mmss, LOG_NOTICE, "Adding network `%s'", name);
+namespace MMSS {
+
+namespace Config {
+
+void add_network(context_t *mmss, config_t *conf, const char *name) {
+ logf(mmss, LOG_NOTICE, "adding network `%s'", name);
- mmss_network_t *net = new mmss_network_t;
+ network_t *net = new network_t;
net->name = strdup(name);
net->mtu = 1500;
@@ -43,7 +49,9 @@ void mmss_config_add_network(mmss_t *mmss, mmss_config_t *conf, const char *name
conf->networks = net;
}
-bool mmss_read_config(mmss_t *mmss, mmss_config_t *conf, const char *filename) {
+}
+
+bool read_config(context_t *mmss, config_t *conf, const char *filename) {
bool ret = true;
char *oldcwd = get_current_dir_name();
char *filename2 = NULL;
@@ -51,11 +59,11 @@ bool mmss_read_config(mmss_t *mmss, mmss_config_t *conf, const char *filename) {
FILE *file;
yyscan_t scanner;
mmss_config_pstate *ps;
- mmss_string_stack_t *strings = NULL;
int token;
YYSTYPE token_val;
YYLTYPE loc = {1, 0, 1, 0};
int parse_ret;
+ std::stack<char*> strings;
mmss_config_yylex_init(&scanner);
@@ -67,7 +75,7 @@ bool mmss_read_config(mmss_t *mmss, mmss_config_t *conf, const char *filename) {
else {
file = fopen(filename, "r");
if (!file) {
- mmss_logf(mmss, LOG_ERR, "can't open config file `%s': %s", filename, strerror(errno));
+ logf(mmss, LOG_ERR, "can't open config file `%s': %s", filename, strerror(errno));
ret = false;
goto end_free;
}
@@ -80,7 +88,7 @@ bool mmss_read_config(mmss_t *mmss, mmss_config_t *conf, const char *filename) {
dir = dirname(filename2);
if (chdir(dir)) {
- mmss_logf(mmss, LOG_ERR, "change from directory `%s' to `%s' failed", oldcwd, dir);
+ logf(mmss, LOG_ERR, "change from directory `%s' to `%s' failed", oldcwd, dir);
ret = false;
goto end_free;
}
@@ -90,15 +98,14 @@ bool mmss_read_config(mmss_t *mmss, mmss_config_t *conf, const char *filename) {
token = mmss_config_yylex(&token_val, &loc, scanner);
if (token < 0) {
- mmss_logf(mmss, LOG_ERR, "config error: %s at %s:%i:%i", token_val.error, filename, loc.first_line, loc.first_column);
+ logf(mmss, LOG_ERR, "config error: %s at %s:%i:%i", token_val.error, filename, loc.first_line, loc.first_column);
ret = false;
goto end_free;
}
- if (token == TOK_STRING) {
- token_val.str->next = strings;
- strings = token_val.str;
- }
+ if (token == TOK_STRING)
+ strings.push(token_val.str);
+
parse_ret = mmss_config_push_parse(ps, token, &token_val, &loc, mmss, conf, filename);
} while (parse_ret == YYPUSH_MORE);
@@ -107,13 +114,16 @@ bool mmss_read_config(mmss_t *mmss, mmss_config_t *conf, const char *filename) {
ret = false;
end_free:
- mmss_string_stack_free(strings);
+ while (!strings.empty()) {
+ std::free(strings.top());
+ strings.pop();
+ }
mmss_config_pstate_delete(ps);
mmss_config_yylex_destroy(scanner);
if(chdir(oldcwd))
- mmss_logf(mmss, LOG_ERR, "can't chdir to `%s': %s", oldcwd, strerror(errno));
+ logf(mmss, LOG_ERR, "can't chdir to `%s': %s", oldcwd, strerror(errno));
free(filename2);
free(oldcwd);
@@ -123,3 +133,5 @@ bool mmss_read_config(mmss_t *mmss, mmss_config_t *conf, const char *filename) {
return ret;
}
+
+}