diff --git a/src/Server/Server.cpp b/src/Server/Server.cpp index af9b10d..2fb3c22 100644 --- a/src/Server/Server.cpp +++ b/src/Server/Server.cpp @@ -37,6 +37,7 @@ void Server::print_epoll_events(unsigned int events) void Server::readConfig(char *filename) { TOMLMap *root = NULL; + // root = parse(filename); try { root = parse(filename); @@ -49,7 +50,7 @@ void Server::readConfig(char *filename) // root->clear(); // delete root; // clean_parsed(root); - return; + exit(-1); } catch (config::Tokenizer::InvalidToken &e) { @@ -58,7 +59,7 @@ void Server::readConfig(char *filename) // clean_parsed(root); // root->clear(); delete root; - return; + exit(-1); } /* TOMLMap *map; */ @@ -148,7 +149,7 @@ void Server::readSocket(Client &client, int fd) DBOUT << BLUE << "status is " << Response::getReasonPhrase(status) << ENDL; } -int Server::delete_client(std::map &client_map, int fd) +int Server::delete_client(std::map &client_map, int fd) { int ret; ret = epoll_ctl(_epoll_fd, EPOLL_CTL_DEL, fd, NULL); @@ -430,9 +431,9 @@ void Server::clean_parsed(TOMLMap *root) DBOUT << ">>> cleaning up: <<<" << std::endl; for (it = root->begin(); it != root->end(); ++it) { - DBOUT << RED << it->first - << ": " << GREEN - << *(it->second->toString()); + // DBOUT << RED << it->first + // << ": " << GREEN + // << *(it->second->toString()); clean_generic(it->second); /* delete it->second; */ diff --git a/src/config/TOMLParser.cpp b/src/config/TOMLParser.cpp index 2bae3fd..1f33fb5 100644 --- a/src/config/TOMLParser.cpp +++ b/src/config/TOMLParser.cpp @@ -37,7 +37,7 @@ namespace config try { current = tokenizer.getToken(); } catch (Tokenizer::NoMoreTokens &e) { - std::cerr << e.what() << std::endl; + DBOUT << "got no more tokens" << ENDL; return; } if (current.type == MAP_DECL) @@ -45,7 +45,7 @@ namespace config if (tokenizer.getToken().type != NEWLINE) throw ExpectedToken("newline", current.value); // throw std::logic_error("no newline after MAP_DECL"); - map_node = parseMap(); + map_node = parseMap().release(); } else // throw std::logic_error("unexpected token in processMap"); @@ -57,15 +57,14 @@ namespace config full_name = split_name(current.value); - put_to_subtable(root, full_name, map_node, toml_node::MAP); + put_to_subtable(root.get(), full_name, map_node, toml_node::MAP); } - toml_node *TOMLParser::parseMap(void) + std::auto_ptr TOMLParser::parseMap(void) { /* std::cerr << "Parsing map" << std::endl; */ - toml_node *node = new toml_node; - TOMLMap *mapObject = new TOMLMap; + std::auto_ptr mapObject(new TOMLMap); bool completed = false; while (!completed) { @@ -75,7 +74,7 @@ namespace config try { nextToken = tokenizer.getToken(); } catch (Tokenizer::NoMoreTokens &e) { - std::cerr << e.what() << std::endl; + DBOUT << "got no more tokens" << ENDL; break; } if (nextToken.type == MAPARRAY_DECL) @@ -153,7 +152,10 @@ namespace config // throw std::logic_error("parseMap: no more tokens"); // } } - node->setObject(mapObject); + + // toml_node *node = new toml_node; + std::auto_ptr node(new toml_node); + node->setObject(mapObject.release()); return (node); } @@ -161,13 +163,14 @@ namespace config { /* std::cerr << "Parsing MapArray" << std::endl; */ - toml_node *map_node; + // toml_node *map_node; + std::auto_ptr map_node; s_token current; try { current = tokenizer.getToken(); } catch (Tokenizer::NoMoreTokens &e) { - std::cerr << e.what() << std::endl; + DBOUT << "got no more tokens" << ENDL; return; } if (current.type == MAPARRAY_DECL) @@ -185,19 +188,19 @@ namespace config full_name = split_name(current.value); - put_to_subtable(root, full_name, map_node, toml_node::MAPARRAY); + put_to_subtable(root.get(), full_name, map_node.release(), toml_node::MAPARRAY); } toml_node *TOMLParser::parseString(void) { - /* toml_node *node; */ - toml_node *node = new toml_node; std::string *sValue; /* std::cerr << "Parsing string" << std::endl; */ s_token token = tokenizer.getToken(); sValue = new std::string(token.value); + + toml_node *node = new toml_node; node->setString(sValue); return (node); @@ -205,12 +208,13 @@ namespace config toml_node *TOMLParser::parseNumber(void) { - toml_node *node = new toml_node; int value; /* std::cerr << "Parsing number" << std::endl; */ s_token token = tokenizer.getToken(); value = std::atoi(token.value.c_str()); + + toml_node *node = new toml_node; node->setNumber(value); return (node); @@ -287,7 +291,6 @@ namespace config toml_node *TOMLParser::parseBool(void) { - toml_node *node = new toml_node; bool value; /* std::cerr << "Parsing bool" << std::endl; */ @@ -298,6 +301,8 @@ namespace config value = false; else throw std::invalid_argument("Unexpected bool value"); + + toml_node *node = new toml_node; node->setBool(value); return (node); @@ -315,7 +320,9 @@ namespace config TOMLMap *TOMLParser::parse(void) { /* std::cerr << "Parsing ROOT" << std::endl; */ - root = new TOMLMap; + // root = new TOMLMap; + // std::auto_ptr root(new TOMLMap); + root.reset(new TOMLMap); bool completed = false; while (!completed) { @@ -325,7 +332,7 @@ namespace config try { current = tokenizer.getToken(); } catch (Tokenizer::NoMoreTokens &e) { - std::cerr << e.what() << std::endl; + DBOUT << "got no more tokens" << ENDL; break; } if (current.type == MAPARRAY_DECL) @@ -402,7 +409,7 @@ namespace config break; } } - return (root); + return (root.release()); } std::vector TOMLParser::split_name(std::string name) diff --git a/src/config/TOMLParser.hpp b/src/config/TOMLParser.hpp index 26fc9a9..b4f1ee3 100644 --- a/src/config/TOMLParser.hpp +++ b/src/config/TOMLParser.hpp @@ -6,6 +6,7 @@ #include "Tokenizer.hpp" #include "TOMLNode.hpp" #include +#include namespace config { @@ -13,7 +14,8 @@ namespace config { private: std::fstream file; - TOMLMap *root; //root of TOML tree + std::auto_ptr root; + // TOMLMap *root; //root of TOML tree /* toml_node *current; //node currently being parsed */ Tokenizer tokenizer; @@ -26,7 +28,8 @@ namespace config TOMLParser(char *filename); TOMLMap *parse(void); - toml_node *parseMap(void); + // toml_node *parseMap(void); + std::auto_ptr parseMap(void); void processMap(void); void processMapArray(void);