/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /*************************************************************************** * configurationparser.cc * * Wed Jul 30 11:48:31 CEST 2008 * Copyright 2008 Bent Bisballe Nyeng * deva@aasimon.org ****************************************************************************/ /* * This file is part of Pracro. * * Pracro is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Pracro is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Pracro; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "configurationparser.h" #include "configuration.h" ConfigurationParser::ConfigurationParser(std::string filename) { this->filename = filename; reload(); } void ConfigurationParser::reload() throw(ConfigurationParserException) { try { readFile(this->filename.c_str()); } catch(libconfig::FileIOException) { throw ConfigurationParserException("Could not read config file: File does not exist."); } catch(libconfig::ParseException &e) { char lineno[32]; sprintf(lineno, "%d", e.getLine()); throw ConfigurationParserException(std::string("Error when parsing the config file in line ") + lineno + ": " + e.getError()); } // Set internal values try { int p = lookup("server_port"); Conf::server_port = p; } catch( ... ) { } try { std::string u = lookup("server_user"); Conf::server_user = u; } catch( ... ) { } try { std::string g = lookup("server_group"); Conf::server_group = g; } catch( ... ) { } try { std::string a = lookup("journal_commit_addr"); Conf::journal_commit_addr = a; } catch( ... ) { } try { int p = lookup("journal_commit_port"); Conf::journal_commit_port = p; } catch( ... ) { } try { int t = lookup("db_max_ttl"); Conf::db_max_ttl = t; } catch( ... ) { } try { int t = lookup("pentominos_max_ttl"); Conf::pentominos_max_ttl = t; } catch( ... ) { } try { std::string a = lookup("pentominos_addr"); Conf::pentominos_addr = a; } catch( ... ) { } try { int p = lookup("pentominos_port"); Conf::pentominos_port = p; } catch( ... ) { } try { std::string a = lookup("database_addr"); Conf::database_addr = a; } catch( ... ) { } try { std::string u = lookup("database_user"); Conf::database_user = u; } catch( ... ) { } try { std::string p = lookup("database_passwd"); Conf::database_passwd = p; } catch( ... ) { } try { std::string p = lookup("xml_basedir"); Conf::xml_basedir = p; } catch( ... ) { } } #ifdef TEST_CONFIGURATIONPARSER #define CONFFILE "/tmp/configurationparser.conf" #include #include #include #include #include #include static char conf[] = "a = 1;\n" "b = \"hello\";\n" "c = true;\n" ; static char confbad[] = "a = 1;\n" "b = \"hello\"\n" "c = true;\n" ; int main() { FILE *fp = fopen(CONFFILE, "w"); if(!fp) { printf("Could not write to %s\n", CONFFILE); return 1; } fprintf(fp, conf); fclose(fp); try { ConfigurationParser parser(CONFFILE); } catch(Exception &e) { printf("%s\n", e.what()); return 1; } fp = fopen(CONFFILE, "w"); if(!fp) { printf("Could not write to %s\n", CONFFILE); return 1; } fprintf(fp, confbad); fclose(fp); try { ConfigurationParser parser(CONFFILE); } catch(Exception &e) { printf("%s\n", e.what()); goto on; } return 1; on: unlink(CONFFILE); return 0; } #endif/*TEST_CONFIGURATIONPARSER*/