diff options
author | om <om@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-04-04 05:55:54 +0000 |
---|---|---|
committer | om <om@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-04-04 05:55:54 +0000 |
commit | 54963bee7003f65f5412ea52133b1a00c3b0763e (patch) | |
tree | d36a4fac2a323cf7be8a42312dc95fabb4924500 /src/modules.cpp | |
parent | 7db1335b25f6a6cc884368138df4d16a1cafd493 (diff) |
All new shiny config parser, there's probably some bugs there somewhere but hey...I've been up all night. make clean before you try and compile this. Really. And nobody dare complain
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3817 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules.cpp')
-rw-r--r-- | src/modules.cpp | 116 |
1 files changed, 59 insertions, 57 deletions
diff --git a/src/modules.cpp b/src/modules.cpp index 529946220..680bd950a 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -849,30 +849,43 @@ Module* Server::FindModule(const std::string &name) ConfigReader::ConfigReader() { - Config->ClearStack(); - this->cache = new std::stringstream(std::stringstream::in | std::stringstream::out); - this->errorlog = new std::stringstream(std::stringstream::in | std::stringstream::out); - this->readerror = Config->LoadConf(CONFIG_FILE,this->cache,this->errorlog); - if (!this->readerror) - this->error = CONF_FILE_NOT_FOUND; + // Config->ClearStack(); + + /* Is there any reason to load the entire config file again here? + * it's needed if they specify another config file, but using the + * default one we can just use the global config data - pre-parsed! + */ + //~ this->cache = new std::stringstream(std::stringstream::in | std::stringstream::out); + this->errorlog = new std::ostringstream(std::stringstream::in | std::stringstream::out); + + //~ this->readerror = Config->LoadConf(CONFIG_FILE, this->cache,this->errorlog); + //~ if (!this->readerror) + //~ this->error = CONF_FILE_NOT_FOUND; + + this->data = &Config->config_data; + this->privatehash = false; } ConfigReader::~ConfigReader() { - if (this->cache) - delete this->cache; + //~ if (this->cache) + //~ delete this->cache; if (this->errorlog) delete this->errorlog; + if(this->privatehash) + delete this->data; } ConfigReader::ConfigReader(const std::string &filename) { Config->ClearStack(); - this->cache = new std::stringstream(std::stringstream::in | std::stringstream::out); - this->errorlog = new std::stringstream(std::stringstream::in | std::stringstream::out); - this->readerror = Config->LoadConf(filename.c_str(),this->cache,this->errorlog); + + this->data = new ConfigDataHash; + this->privatehash = true; + this->errorlog = new std::ostringstream(std::stringstream::in | std::stringstream::out); + this->readerror = Config->LoadConf(*this->data, filename, *this->errorlog); if (!this->readerror) this->error = CONF_FILE_NOT_FOUND; }; @@ -880,58 +893,39 @@ ConfigReader::ConfigReader(const std::string &filename) std::string ConfigReader::ReadValue(const std::string &tag, const std::string &name, int index) { /* Don't need to strlcpy() tag and name anymore, ReadConf() takes const char* */ - char val[MAXBUF]; - int res = Config->ReadConf(cache, tag.c_str(), name.c_str(), index, val); - if (!res) + std::string result; + + if (!Config->ConfValue(*this->data, tag, name, index, result)) { this->error = CONF_VALUE_NOT_FOUND; return ""; } - return val; + + return result; } bool ConfigReader::ReadFlag(const std::string &tag, const std::string &name, int index) { - /* Don't need to strlcpy() tag and name anymore, ReadConf() takes const char* */ - char val[MAXBUF]; - std::string s; - - int res = Config->ReadConf(cache, tag.c_str(), name.c_str(), index, val); - if (!res) - { - this->error = CONF_VALUE_NOT_FOUND; - return false; - } - - s = val; - - return ((s == "yes") || (s == "YES") || (s == "true") || (s == "TRUE") || (s == "1")); + return Config->ConfValueBool(*this->data, tag, name, index); } long ConfigReader::ReadInteger(const std::string &tag, const std::string &name, int index, bool needs_unsigned) { - char val[MAXBUF]; - - int res = Config->ReadConf(cache, tag.c_str(), name.c_str(), index, val); - if (!res) + int result; + + if(!Config->ConfValueInteger(*this->data, tag, name, index, result)) { this->error = CONF_VALUE_NOT_FOUND; return 0; } - for (char* i = val; *i; i++) - { - if (!isdigit(*i)) - { - this->error = CONF_NOT_A_NUMBER; - return 0; - } - } - if ((needs_unsigned) && (atoi(val)<0)) + + if ((needs_unsigned) && (result < 0)) { this->error = CONF_NOT_UNSIGNED; return 0; } - return atoi(val); + + return result; } long ConfigReader::GetError() @@ -943,36 +937,44 @@ long ConfigReader::GetError() void ConfigReader::DumpErrors(bool bail, userrec* user) { + /* XXX - Duplicated code */ + if (bail) { - printf("There were errors in your configuration:\n%s",errorlog->str().c_str()); - exit(0); + printf("There were errors in your configuration:\n%s", this->errorlog->str().c_str()); + Exit(0); } else { - char dataline[1024]; + std::string errors = this->errorlog->str(); + std::string::size_type start; + unsigned int prefixlen; + start = 0; + /* ":Config->ServerName NOTICE user->nick :" */ + prefixlen = strlen(Config->ServerName) + strlen(user->nick) + 11; + if (user) { WriteServ(user->fd,"NOTICE %s :There were errors in the configuration file:",user->nick); - - while (!errorlog->eof()) + + while(start < errors.length()) { - errorlog->getline(dataline,1024); - WriteServ(user->fd,"NOTICE %s :%s",user->nick,dataline); + WriteServ(user->fd, "NOTICE %s :%s",user->nick, errors.substr(start, 510 - prefixlen).c_str()); + start += 510 - prefixlen; } } else { - WriteOpers("There were errors in the configuration file:",user->nick); + WriteOpers("There were errors in the configuration file:"); - while (!errorlog->eof()) + while(start < errors.length()) { - errorlog->getline(dataline,1024); - WriteOpers(dataline); + WriteOpers(errors.substr(start, 360).c_str()); + start += 360; } } - + return; } } @@ -980,12 +982,12 @@ void ConfigReader::DumpErrors(bool bail, userrec* user) int ConfigReader::Enumerate(const std::string &tag) { - return Config->EnumConf(cache,tag.c_str()); + return Config->ConfValueEnum(*this->data, tag); } int ConfigReader::EnumerateValues(const std::string &tag, int index) { - return Config->EnumValues(cache, tag.c_str(), index); + return Config->ConfVarEnum(*this->data, tag, index); } bool ConfigReader::Verify() |