diff options
Diffstat (limited to 'mmss/config.cpp')
-rw-r--r-- | mmss/config.cpp | 40 |
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; } + +} |