diff options
Diffstat (limited to 'mmss/config.cpp')
-rw-r--r-- | mmss/config.cpp | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/mmss/config.cpp b/mmss/config.cpp index 475b1c5..394ca5b 100644 --- a/mmss/config.cpp +++ b/mmss/config.cpp @@ -25,10 +25,10 @@ #include "context.hpp" +#include "lex.hpp" #include "network.hpp" #include "node.hpp" #include "protocol.hpp" -#include <config.ll.hpp> #include <config.yy.hpp> #include <cstdio> @@ -155,7 +155,6 @@ std::shared_ptr<const config_t> config_t::read(context_t *mmss, const char *file char *filename2 = NULL; char *dir = NULL; FILE *file; - yyscan_t scanner; mmss_config_pstate *ps; int token; YYSTYPE token_val; @@ -164,9 +163,6 @@ std::shared_ptr<const config_t> config_t::read(context_t *mmss, const char *file std::stack<char*> strings; - mmss_config_yylex_init(&scanner); - ps = mmss_config_pstate_new(); - if (!filename) { file = stdin; } @@ -174,12 +170,13 @@ std::shared_ptr<const config_t> config_t::read(context_t *mmss, const char *file file = fopen(filename, "r"); if (!file) { mmss->logf(LOG_ERR, "can't open config file `%s': %s", filename, strerror(errno)); - conf.reset(); - goto end_free; + return std::shared_ptr<config_t>(); } } - mmss_config_yyset_in(file, scanner); + lex_t scanner(file); + ps = mmss_config_pstate_new(); + if (filename) { filename2 = strdup(filename); @@ -193,7 +190,7 @@ std::shared_ptr<const config_t> config_t::read(context_t *mmss, const char *file } do { - token = mmss_config_yylex(&token_val, &loc, scanner); + token = scanner.lex(&token_val, &loc); if (token < 0) { mmss->logf(LOG_ERR, "config error: %s at %s:%i:%i", token_val.error, filename, loc.first_line, loc.first_column); @@ -218,7 +215,6 @@ std::shared_ptr<const config_t> config_t::read(context_t *mmss, const char *file } mmss_config_pstate_delete(ps); - mmss_config_yylex_destroy(scanner); if(chdir(oldcwd)) mmss->logf(LOG_ERR, "can't chdir to `%s': %s", oldcwd, strerror(errno)); |