diff --git a/NEWS b/NEWS index 0a2d066ce..ec6417f48 100644 --- a/NEWS +++ b/NEWS @@ -17,6 +17,7 @@ Version 0.16 * Under discussion. * OpenSSL lib upgrade to OpenSSL 1.0.0. * Sockets lib use dropped. + * dotconfpp lib use dropped. * Upgrade to client version 3.3.3a (build 11723). Version 0.15 diff --git a/src/game/GridMap.cpp b/src/game/GridMap.cpp index 4df4083b6..501ad807d 100644 --- a/src/game/GridMap.cpp +++ b/src/game/GridMap.cpp @@ -21,7 +21,6 @@ #include "GridStates.h" #include "CellImpl.h" #include "Map.h" -#include "Config/ConfigEnv.h" #include "DBCEnums.h" #include "DBCStores.h" #include "GridMap.h" diff --git a/src/game/InstanceSaveMgr.cpp b/src/game/InstanceSaveMgr.cpp index 81ebb0106..14befab57 100644 --- a/src/game/InstanceSaveMgr.cpp +++ b/src/game/InstanceSaveMgr.cpp @@ -30,7 +30,6 @@ #include "InstanceSaveMgr.h" #include "Timer.h" #include "GridNotifiersImpl.h" -#include "Config/ConfigEnv.h" #include "Transports.h" #include "ObjectMgr.h" #include "World.h" diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 800bea9fb..e6abfb8b2 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -43,7 +43,7 @@ #include "SkillDiscovery.h" #include "SkillExtraItems.h" #include "SystemConfig.h" -#include "Config/ConfigEnv.h" +#include "Config/Config.h" #include "Mail.h" #include "Util.h" #include "ItemEnchantmentMgr.h" diff --git a/src/game/Map.cpp b/src/game/Map.cpp index d27e35570..57f09ce13 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -26,7 +26,6 @@ #include "InstanceData.h" #include "Map.h" #include "GridNotifiersImpl.h" -#include "Config/ConfigEnv.h" #include "Transports.h" #include "ObjectAccessor.h" #include "ObjectMgr.h" diff --git a/src/game/World.cpp b/src/game/World.cpp index abf273dce..0d0a4c682 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -22,7 +22,7 @@ #include "Common.h" #include "Database/DatabaseEnv.h" -#include "Config/ConfigEnv.h" +#include "Config/Config.h" #include "SystemConfig.h" #include "Log.h" #include "Opcodes.h" @@ -402,9 +402,9 @@ Weather* World::AddWeather(uint32 zone_id) /// Initialize config values void World::LoadConfigSettings(bool reload) { - if(reload) + if (reload) { - if(!sConfig.Reload()) + if (!sConfig.Reload()) { sLog.outError("World settings reload fail: can't read settings from %s.",sConfig.GetFilename().c_str()); return; @@ -413,7 +413,7 @@ void World::LoadConfigSettings(bool reload) ///- Read the version of the configuration file and warn the user in case of emptiness or mismatch uint32 confVersion = sConfig.GetIntDefault("ConfVersion", 0); - if(!confVersion) + if (!confVersion) { sLog.outError("*****************************************************************************"); sLog.outError(" WARNING: mangosd.conf does not include a ConfVersion variable."); diff --git a/src/game/WorldSocketMgr.cpp b/src/game/WorldSocketMgr.cpp index 9f1927ecc..25ff79b10 100644 --- a/src/game/WorldSocketMgr.cpp +++ b/src/game/WorldSocketMgr.cpp @@ -40,7 +40,7 @@ #include "Log.h" #include "Common.h" -#include "Config/ConfigEnv.h" +#include "Config/Config.h" #include "Database/DatabaseEnv.h" #include "WorldSocket.h" diff --git a/src/mangosd/CliRunnable.cpp b/src/mangosd/CliRunnable.cpp index 0f23f71e9..437ff43d5 100644 --- a/src/mangosd/CliRunnable.cpp +++ b/src/mangosd/CliRunnable.cpp @@ -27,7 +27,7 @@ #include "ScriptCalls.h" #include "ObjectMgr.h" #include "WorldSession.h" -#include "Config/ConfigEnv.h" +#include "Config/Config.h" #include "Util.h" #include "AccountMgr.h" #include "CliRunnable.h" @@ -629,7 +629,7 @@ void CliRunnable::run() ///- Display the list of available CLI functions then beep sLog.outString(); - if(sConfig.GetBoolDefault("BeepAtStart", true)) + if (sConfig.GetBoolDefault("BeepAtStart", true)) printf("\a"); // \a = Alert // print this here the first time diff --git a/src/mangosd/Main.cpp b/src/mangosd/Main.cpp index af5daf420..049d2b6f1 100644 --- a/src/mangosd/Main.cpp +++ b/src/mangosd/Main.cpp @@ -22,7 +22,7 @@ #include "Common.h" #include "Database/DatabaseEnv.h" -#include "Config/ConfigEnv.h" +#include "Config/Config.h" #include "Log.h" #include "Master.h" #include "SystemConfig.h" @@ -78,11 +78,11 @@ extern int main(int argc, char **argv) ///- Command line parsing to get the configuration file name char const* cfg_file = _MANGOSD_CONFIG; int c=1; - while( c < argc ) + while(c < argc) { - if( strcmp(argv[c],"-c") == 0) + if (strcmp(argv[c],"-c") == 0) { - if( ++c >= argc ) + if (++c >= argc) { sLog.outError("Runtime-Error: -c option requires an input argument"); usage(argv[0]); @@ -92,7 +92,7 @@ extern int main(int argc, char **argv) cfg_file = argv[c]; } - if( strcmp(argv[c],"--version") == 0) + if (strcmp(argv[c],"--version") == 0) { printf("%s\n", _FULLVERSION(REVISION_DATE,REVISION_TIME,REVISION_NR,REVISION_ID)); return 0; @@ -102,22 +102,22 @@ extern int main(int argc, char **argv) //////////// //Services// //////////// - if( strcmp(argv[c],"-s") == 0) + if (strcmp(argv[c],"-s") == 0) { - if( ++c >= argc ) + if (++c >= argc) { sLog.outError("Runtime-Error: -s option requires an input argument"); usage(argv[0]); Log::WaitBeforeContinueIfNeed(); return 1; } - if( strcmp(argv[c],"install") == 0) + else if (strcmp(argv[c],"install") == 0) { if (WinServiceInstall()) sLog.outString("Installing service"); return 1; } - else if( strcmp(argv[c],"uninstall") == 0) + else if ( strcmp(argv[c],"uninstall") == 0) { if(WinServiceUninstall()) sLog.outString("Uninstalling service"); @@ -131,7 +131,7 @@ extern int main(int argc, char **argv) return 1; } } - if( strcmp(argv[c],"--service") == 0) + if (strcmp(argv[c],"--service") == 0) { WinServiceRun(); } diff --git a/src/mangosd/Master.cpp b/src/mangosd/Master.cpp index 9478a8d9d..2d9eca5b3 100644 --- a/src/mangosd/Master.cpp +++ b/src/mangosd/Master.cpp @@ -30,7 +30,7 @@ #include "Timer.h" #include "Policies/SingletonImp.h" #include "SystemConfig.h" -#include "Config/ConfigEnv.h" +#include "Config/Config.h" #include "Database/DatabaseEnv.h" #include "CliRunnable.h" #include "RASocket.h" diff --git a/src/mangosd/RASocket.cpp b/src/mangosd/RASocket.cpp index 15952fb97..1d291c23a 100644 --- a/src/mangosd/RASocket.cpp +++ b/src/mangosd/RASocket.cpp @@ -25,7 +25,7 @@ #include "Log.h" #include "RASocket.h" #include "World.h" -#include "Config/ConfigEnv.h" +#include "Config/Config.h" #include "Util.h" #include "AccountMgr.h" #include "Language.h" diff --git a/src/realmd/AuthSocket.cpp b/src/realmd/AuthSocket.cpp index 848579b97..8465eb381 100644 --- a/src/realmd/AuthSocket.cpp +++ b/src/realmd/AuthSocket.cpp @@ -22,7 +22,7 @@ #include "Common.h" #include "Database/DatabaseEnv.h" -#include "Config/ConfigEnv.h" +#include "Config/Config.h" #include "Log.h" #include "RealmList.h" #include "AuthSocket.h" diff --git a/src/realmd/Main.cpp b/src/realmd/Main.cpp index 1807b165f..3243b7fc2 100644 --- a/src/realmd/Main.cpp +++ b/src/realmd/Main.cpp @@ -24,7 +24,7 @@ #include "Database/DatabaseEnv.h" #include "RealmList.h" -#include "Config/ConfigEnv.h" +#include "Config/Config.h" #include "Log.h" #include "AuthSocket.h" #include "SystemConfig.h" diff --git a/src/shared/Config/Config.cpp b/src/shared/Config/Config.cpp index 80201329a..515a5f367 100644 --- a/src/shared/Config/Config.cpp +++ b/src/shared/Config/Config.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "ConfigEnv.h" +#include "Config.h" #include "ace/Configuration_Import_Export.h" #include "Policies/SingletonImp.h" diff --git a/src/shared/Config/Config.h b/src/shared/Config/Config.h index 7f33e99f4..29a524bfd 100644 --- a/src/shared/Config/Config.h +++ b/src/shared/Config/Config.h @@ -19,6 +19,7 @@ #ifndef CONFIG_H #define CONFIG_H +#include "Common.h" #include #include "Platform/Define.h" diff --git a/src/shared/Config/ConfigEnv.h b/src/shared/Config/ConfigEnv.h deleted file mode 100644 index 76f93347d..000000000 --- a/src/shared/Config/ConfigEnv.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2005-2010 MaNGOS - * - * This program 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. - * - * This program 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 this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#if !defined(CONFIGENVIRONMENT_H) - -#define CONFIGENVIRONMENT_H - -#include "Common.h" -#include "Config.h" - -#endif diff --git a/src/shared/Config/ConfigLibrary.vcproj b/src/shared/Config/ConfigLibrary.vcproj deleted file mode 100644 index a8f1fc322..000000000 --- a/src/shared/Config/ConfigLibrary.vcproj +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/shared/Config/Makefile.am b/src/shared/Config/Makefile.am index 7d670af90..77ea62b36 100644 --- a/src/shared/Config/Makefile.am +++ b/src/shared/Config/Makefile.am @@ -19,7 +19,7 @@ ## Sub-directories to parse ## CPP flags for includes, defines, etc. -AM_CPPFLAGS = $(MANGOS_INCLUDES) -I$(top_builddir)/src/shared -I$(srcdir) -I$(srcdir)/../../../dep/include -I$(srcdir)/../../framework -I$(srcdir)/../../shared -I$(srcdir)/../../../dep/include/g3dlite +AM_CPPFLAGS = $(MANGOS_INCLUDES) -I$(top_builddir)/src/shared -I$(srcdir) -I$(srcdir)/../../../dep/include -I$(srcdir)/../../framework -I$(srcdir)/../../shared ## Build MaNGOS shared library and its parts as convenience library. # All libraries will be convenience libraries. Might be changed to shared @@ -27,14 +27,5 @@ AM_CPPFLAGS = $(MANGOS_INCLUDES) -I$(top_builddir)/src/shared -I$(srcdir) -I$(sr noinst_LIBRARIES = libmangosconfig.a libmangosconfig_a_SOURCES = \ - dotconfpp/dotconfpp.cpp \ - dotconfpp/dotconfpp.h \ - dotconfpp/mempool.cpp \ - dotconfpp/mempool.h \ Config.cpp \ - Config.h \ - ConfigEnv.h - -# VC++ project workspace for dotconfpp -EXTRA_DIST = \ - ConfigLibrary.vcproj + Config.h diff --git a/src/shared/Config/dotconfpp/dotconfpp.cpp b/src/shared/Config/dotconfpp/dotconfpp.cpp deleted file mode 100644 index 85b515032..000000000 --- a/src/shared/Config/dotconfpp/dotconfpp.cpp +++ /dev/null @@ -1,703 +0,0 @@ -#include "Common.h" -#include "dotconfpp.h" -#include - -#ifdef WIN32 -# define strcasecmp stricmp -# include -#else -# include -# include -# include -# include -#endif - -#if !defined(R_OK) -# define R_OK 04 -#endif - -DOTCONFDocumentNode::DOTCONFDocumentNode() -: previousNode(NULL), nextNode(NULL), parentNode(NULL), childNode(NULL), -values(NULL), valuesCount(0), name(NULL), lineNum(0), -fileName(NULL), closed(true) -{ -} - -DOTCONFDocumentNode::~DOTCONFDocumentNode() -{ - free(name); - - if (values != NULL) - { - for (int i = 0; i < valuesCount; ++i) - free(values[i]); - - free(values); - } -} - -void DOTCONFDocumentNode::pushValue(char* _value) -{ - ++valuesCount; - values = (char**)realloc(values, valuesCount * sizeof(char*)); - values[valuesCount - 1] = strdup(_value); -} - -const char* DOTCONFDocumentNode::getValue(int index) const -{ - if (index >= valuesCount) - return NULL; - - return values[index]; -} - -DOTCONFDocument::DOTCONFDocument(DOTCONFDocument::CaseSensitive caseSensitivity) -: mempool(NULL), curParent(NULL), curPrev(NULL), curLine(0), file(NULL), fileName(NULL) -{ - switch (caseSensitivity) - { - case CASESENSITIVE: - cmp_func = strcmp; - break; - case CASEINSENSETIVE: - cmp_func = strcasecmp; - break; - } - - mempool = new AsyncDNSMemPool(1024); - mempool->initialize(); -} - -DOTCONFDocument::~DOTCONFDocument() -{ - for (NodeList::iterator i = nodeTree.begin(); i != nodeTree.end(); ++i) - delete(*i); - - for (CharList::iterator i = requiredOptions.begin(); i != requiredOptions.end(); ++i) - free(*i); - - for (CharList::iterator i = processedFiles.begin(); i != processedFiles.end(); ++i) - free(*i); - - free(fileName); - delete mempool; -} - -int DOTCONFDocument::cleanupLine(char* line) -{ - char* start = line; - char* bg = line; - bool multiline = false; - bool concat = false; - char* word = NULL; - - if (!words.empty() && quoted) - concat = true; - - while (*line) - { - if ((*line == '#' || *line == ';') && !quoted) - { - *bg = 0; - if (strlen(start)) - { - if (concat) - { - word = (char*)mempool->Alloc(strlen(words.back()) + strlen(start) + 1); - strcpy(word, words.back()); - strcat(word, start); - words.pop_back(); - concat = false; - } - else - word = mempool->Strdup(start); - - words.push_back(word); - } - - break; - } - - if (*line == '=' && !quoted) - { - *line = ' '; - continue; - } - - // Allowing \" in there causes problems with directory paths - // like "C:\MaNGOS\" - //if(*line == '\\' && (*(line+1) == '"' || *(line+1) == '\'')){ - if (*line == '\\' && (*(line + 1) == '\'')) - { - *bg++ = *(line + 1); - line += 2; - continue; - } - - if (*line == '\\' && *(line + 1) == 'n') - { - *bg++ = '\n'; - line += 2; - continue; - } - - if (*line == '\\' && *(line + 1) == 'r') - { - *bg++ = '\r'; - line += 2; - continue; - } - - if (*line == '\\' && (*(line + 1) == '\n' || *(line + 1) == '\r')) - { - *bg = 0; - if (strlen(start)) - { - if (concat) - { - word = (char*)mempool->Alloc(strlen(words.back()) + strlen(start) + 1); - strcpy(word, words.back()); - strcat(word, start); - words.pop_back(); - concat = false; - } - else - word = mempool->Strdup(start); - - words.push_back(word); - } - - multiline = true; - break; - } - - if (*line == '"' || *line == '\'') - { - quoted = !quoted; - ++line; - continue; - } - - if (isspace((unsigned char)*line) && !quoted) - { - *bg++ = 0; - if (strlen(start)) - { - if (concat) - { - word = (char*)mempool->Alloc(strlen(words.back()) + strlen(start) + 1); - strcpy(word, words.back()); - strcat(word, start); - words.pop_back(); - concat = false; - } - else - word = mempool->Strdup(start); - - words.push_back(word); - } - - start = bg; - while (isspace((unsigned char)*++line)) - { - } - - continue; - } - - *bg++ = *line++; - } - - if (quoted && !multiline) - { - error(curLine, fileName, "unterminated quote"); - return -1; - } - - return multiline ? 1 : 0; -} - -int DOTCONFDocument::parseLine() -{ - char* word = NULL; - char* nodeName = NULL; - char* nodeValue = NULL; - DOTCONFDocumentNode* tagNode = NULL; - bool newNode = false; - - for (CharList::iterator i = words.begin(); i != words.end(); ++i) - { - word = *i; - - if (*word == '<') - newNode = true; - - if (newNode) - { - nodeValue = NULL; - nodeName = NULL; - newNode = false; - } - - size_t wordLen = strlen(word); - if (word[wordLen - 1] == '>') - { - word[wordLen - 1] = 0; - newNode = true; - } - - if (nodeName == NULL) - { - nodeName = word; - bool closed = true; - if (*nodeName == '<') - { - if (*(nodeName + 1) != '/') - { - ++nodeName; - closed = false; - } - else - { - NodeList::reverse_iterator itr = nodeTree.rbegin(); - nodeName += 2; - for (; itr != nodeTree.rend(); ++itr) - { - if (!cmp_func(nodeName, (*itr)->name) && !(*itr)->closed) - { - (*itr)->closed = true; - curParent = (*itr)->parentNode; - curPrev = *itr; - break; - } - } - - if(itr == nodeTree.rend()) - { - error(curLine, fileName, "not matched closing tag ", nodeName); - return -1; - } - - continue; - } - } - - tagNode = new DOTCONFDocumentNode; - tagNode->name = strdup(nodeName); - tagNode->document = this; - tagNode->fileName = processedFiles.back(); - tagNode->lineNum = curLine; - tagNode->closed = closed; - - if(!nodeTree.empty()) - { - DOTCONFDocumentNode* prev = nodeTree.back(); - if (prev->closed) - { - curPrev->nextNode = tagNode; - tagNode->previousNode = curPrev; - tagNode->parentNode = curParent; - } - else - { - prev->childNode = tagNode; - tagNode->parentNode = prev; - curParent = prev; - } - } - - nodeTree.push_back(tagNode); - curPrev = tagNode; - } - else - { - nodeValue = word; - tagNode->pushValue(nodeValue); - } - } - - return 0; -} - -int DOTCONFDocument::parseFile(DOTCONFDocumentNode* _parent) -{ - char str[512]; - int ret = 0; - curLine = 0; - curParent = _parent; - - quoted = false; - size_t slen = 0; - - while (fgets(str, 511, file)) - { - ++curLine; - slen = strlen(str); - if (slen >= 510) - error(curLine, fileName, "warning: line too long"); - - if (str[slen - 1] != '\n') - { - str[slen] = '\n'; - str[slen + 1] = 0; - } - - if ((ret = cleanupLine(str)) == -1) - break; - - if (ret == 0) - { - if (!words.empty()) - { - ret = parseLine(); - mempool->Free(); - words.clear(); - - if(ret == -1) - break; - } - } - } - - return ret; -} - -int DOTCONFDocument::checkConfig(const NodeList::iterator& from) -{ - int ret = 0; - - DOTCONFDocumentNode* tagNode = NULL; - int vi = 0; - for (NodeList::iterator i = from; i != nodeTree.end(); ++i) - { - tagNode = *i; - if (!tagNode->closed) - { - error(tagNode->lineNum, tagNode->fileName, "unclosed tag %s", tagNode->name); - ret = -1; - break; - } - - vi = 0; - while (vi < tagNode->valuesCount) - { - if (strstr(tagNode->values[vi], "${") && strchr(tagNode->values[vi], '}')) - { - ret = macroSubstitute(tagNode, vi); - mempool->Free(); - if (ret == -1) - break; - } - - ++vi; - } - - if (ret == -1) - break; - } - - return ret; -} - -int DOTCONFDocument::setContent(const char* _fileName) -{ - int ret = 0; - char realpathBuf[MANGOS_PATH_MAX]; - - if (ACE_OS::realpath(_fileName, realpathBuf) == NULL) - { - error(0, NULL, "realpath (%s) failed: %s", _fileName, strerror(errno)); - return -1; - } - - fileName = strdup(realpathBuf); - - processedFiles.push_back(strdup(realpathBuf)); - - if ((file = fopen(fileName, "r")) == NULL) - { - error(0, NULL, "failed to open file '%s': %s", fileName, strerror(errno)); - return -1; - } - - // Try read utf8 header and skip it if exist - unsigned int utf8header = 0; - fgets((char*)&utf8header, 4, file); // Try read header - if (utf8header != 0x00BFBBEF) // If not exist - fseek(file, 0, SEEK_SET); // Reset read position - - ret = parseFile(); - - fclose(file); - - if (!ret) - { - if ((ret = checkConfig(nodeTree.begin())) == -1) - return -1; - - NodeList::iterator from; - DOTCONFDocumentNode* tagNode = NULL; - int vi = 0; - for (NodeList::iterator i = nodeTree.begin(); i != nodeTree.end(); ++i) - { - tagNode = *i; - if (!cmp_func("DOTCONFPPIncludeFile", tagNode->name)) - { - vi = 0; - while (vi < tagNode->valuesCount) - { - if (access(tagNode->values[vi], R_OK) == -1) - { - error(tagNode->lineNum, tagNode->fileName, "%s: %s", tagNode->values[vi], strerror(errno)); - return -1; - } - - if (ACE_OS::realpath(tagNode->values[vi], realpathBuf) == NULL) - { - error(tagNode->lineNum, tagNode->fileName, "realpath (%s) failed: %s", tagNode->values[vi], strerror(errno)); - return -1; - } - - bool processed = false; - for (CharList::const_iterator itInode = processedFiles.begin(); itInode != processedFiles.end(); ++itInode) - { - if (!strcmp(*itInode, realpathBuf)) - { - processed = true; - break; - } - } - - if(processed) - break; - - processedFiles.push_back(strdup(realpathBuf)); - - file = fopen(tagNode->values[vi], "r"); - if(file == NULL) - { - error(tagNode->lineNum, fileName, "failed to open file '%s': %s", tagNode->values[vi], strerror(errno)); - return -1; - } - - fileName = strdup(realpathBuf); - from = nodeTree.end(); - --from; - - ret = parseFile(); - fclose(file); - - if (ret == -1) - return -1; - if (checkConfig(++from) == -1) - return -1; - - ++vi; - } - } - } - - if (!requiredOptions.empty()) - ret = checkRequiredOptions(); - } - - return ret; -} - -int DOTCONFDocument::checkRequiredOptions() -{ - for (CharList::const_iterator ci = requiredOptions.begin(); ci != requiredOptions.end(); ++ci) - { - bool matched = false; - for (NodeList::iterator i = nodeTree.begin(); i != nodeTree.end(); ++i) - { - if (!cmp_func((*i)->name, *ci)) - { - matched = true; - break; - } - } - - if(!matched) - { - error(0, NULL, "required option '%s' not specified", *ci); - return -1; - } - } - - return 0; -} - -void DOTCONFDocument::error(int lineNum, const char* fileName_, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - - size_t len = (lineNum != 0 ? strlen(fileName_) : 0) + strlen(fmt) + 50; - char* buf = (char*)mempool->Alloc(len); - - if (lineNum) - snprintf(buf, len, "DOTCONF++: file '%s', line %d: %s\n", fileName_, lineNum, fmt); - else - snprintf(buf, len, "DOTCONF++: %s\n", fmt); - - vfprintf(stderr, buf, args); - - va_end(args); -} - -char* DOTCONFDocument::getSubstitution(char* macro, int lineNum) -{ - char* buf = NULL; - char* variable = macro + 2; - - char* endBr = strchr(macro, '}'); - - if (!endBr) - { - error(lineNum, fileName, "unterminated '{'"); - return NULL; - } - - *endBr = 0; - - char* defaultValue = strchr(variable, ':'); - - if (defaultValue) - { - *defaultValue++ = 0; - if (*defaultValue != '-') - { - error(lineNum, fileName, "incorrect macro substitution syntax"); - return NULL; - } - - ++defaultValue; - if (*defaultValue == '"' || *defaultValue == '\'') - { - ++defaultValue; - defaultValue[strlen(defaultValue) - 1] = 0; - } - } - else - defaultValue = NULL; - - char* subs = getenv(variable); - if (subs) - buf = mempool->Strdup(subs); - else - { - NodeList::iterator i = nodeTree.begin(); - DOTCONFDocumentNode* tagNode = NULL; - for (; i != nodeTree.end(); ++i) - { - tagNode = *i; - if (!cmp_func(tagNode->name, variable)) - { - if (tagNode->valuesCount != 0) - { - buf = mempool->Strdup(tagNode->values[0]); - break; - } - } - } - - if (i == nodeTree.end()) - { - if (defaultValue) - buf = mempool->Strdup(defaultValue); - else - { - error(lineNum, fileName, "substitution not found and default value not given"); - return NULL; - } - } - } - - return buf; -} - -int DOTCONFDocument::macroSubstitute(DOTCONFDocumentNode* tagNode, int valueIndex) -{ - int ret = 0; - char* macro = tagNode->values[valueIndex]; - size_t valueLen = strlen(tagNode->values[valueIndex]) + 1; - char* value = (char*)mempool->Alloc(valueLen); - char* v = value; - char* subs = NULL; - - while (*macro) - { - if (*macro == '$' && *(macro + 1) == '{') - { - char* m = strchr(macro, '}'); - subs = getSubstitution(macro, tagNode->lineNum); - if(subs == NULL) - { - ret = -1; - break; - } - - macro = m + 1; - *v = 0; - v = (char*)mempool->Alloc(strlen(value) + strlen(subs) + valueLen); - strcpy(v, value); - value = strcat(v, subs); - v = value + strlen(value); - continue; - } - - *v++ = *macro++; - } - - *v = 0; - - free(tagNode->values[valueIndex]); - tagNode->values[valueIndex] = strdup(value); - return ret; -} - -const DOTCONFDocumentNode* DOTCONFDocument::getFirstNode() const -{ - if (!nodeTree.empty()) - return *nodeTree.begin(); - else - return NULL; -} - -const DOTCONFDocumentNode* DOTCONFDocument::findNode(const char* nodeName, const DOTCONFDocumentNode* parentNode, const DOTCONFDocumentNode* startNode) const -{ - NodeList::const_iterator i = nodeTree.begin(); - - if (startNode == NULL) - startNode = parentNode; - - if (startNode != NULL) - { - while (i != nodeTree.end() && (*i) != startNode) - ++i; - - if (i != nodeTree.end()) - ++i; - } - - for (; i != nodeTree.end(); ++i) - { - if ((*i)->parentNode != parentNode) - continue; - - if (!cmp_func(nodeName, (*i)->name)) - return *i; - } - - return NULL; -} - -void DOTCONFDocument::setRequiredOptionNames(const char** requiredOptionNames) -{ - while (*requiredOptionNames) - { - requiredOptions.push_back(strdup(*requiredOptionNames)); - ++requiredOptionNames; - } -} diff --git a/src/shared/Config/dotconfpp/dotconfpp.h b/src/shared/Config/dotconfpp/dotconfpp.h deleted file mode 100644 index 55e6dd75d..000000000 --- a/src/shared/Config/dotconfpp/dotconfpp.h +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef DOTCONFPP_H -#define DOTCONFPP_H - -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include "mempool.h" - -class DOTCONFDocument; - -class DOTCONFDocumentNode -{ - friend class DOTCONFDocument; - - private: - - DOTCONFDocumentNode* previousNode; - DOTCONFDocumentNode* nextNode; - DOTCONFDocumentNode* parentNode; - DOTCONFDocumentNode* childNode; - char** values; - int valuesCount; - char* name; - const DOTCONFDocument* document; - int lineNum; - char* fileName; - bool closed; - - void pushValue(char* _value); - - public: - - DOTCONFDocumentNode(); - ~DOTCONFDocumentNode(); - - const char* getConfigurationFileName() const { return fileName; } - int getConfigurationLineNumber() const { return lineNum; } - - const DOTCONFDocumentNode* getNextNode() const { return nextNode; } - const DOTCONFDocumentNode* getPreviuosNode() const { return previousNode; } - const DOTCONFDocumentNode* getParentNode() const { return parentNode; } - const DOTCONFDocumentNode* getChildNode() const { return childNode; } - const char* getValue(int index = 0) const; - const char* getName() const { return name; } - const DOTCONFDocument * getDocument() const { return document; } -}; - -class DOTCONFDocument -{ - public: - - enum CaseSensitive - { - CASESENSITIVE, - CASEINSENSETIVE - }; - - protected: - - AsyncDNSMemPool* mempool; - - private: - - typedef std::list CharList; - typedef std::list NodeList; - - DOTCONFDocumentNode* curParent; - DOTCONFDocumentNode* curPrev; - int curLine; - bool quoted; - NodeList nodeTree; - CharList requiredOptions; - CharList processedFiles; - FILE* file; - char* fileName; - CharList words; - int (*cmp_func)(const char*, const char*); - - int checkRequiredOptions(); - int parseLine(); - int parseFile(DOTCONFDocumentNode* _parent = NULL); - int checkConfig(const NodeList::iterator& from); - int cleanupLine(char* line); - char* getSubstitution(char* macro, int lineNum); - int macroSubstitute(DOTCONFDocumentNode* tagNode, int valueIndex); - - protected: - - virtual void error(int lineNum, const char* fileName, const char* fmt, ...) ATTR_PRINTF(4,5); - - public: - - DOTCONFDocument(CaseSensitive caseSensitivity = CASESENSITIVE); - virtual ~DOTCONFDocument(); - - int setContent(const char* _fileName); - - void setRequiredOptionNames(const char** requiredOptionNames); - const DOTCONFDocumentNode * getFirstNode() const; - const DOTCONFDocumentNode * findNode(const char* nodeName, const DOTCONFDocumentNode* parentNode = NULL, const DOTCONFDocumentNode* startNode = NULL) const; -}; - -#endif diff --git a/src/shared/Config/dotconfpp/mempool.cpp b/src/shared/Config/dotconfpp/mempool.cpp deleted file mode 100644 index 45bdee24c..000000000 --- a/src/shared/Config/dotconfpp/mempool.cpp +++ /dev/null @@ -1,106 +0,0 @@ -#include "mempool.h" - -AsyncDNSMemPool::PoolChunk::PoolChunk(size_t _size) -: pool(NULL), pos(0), size(_size) -{ - pool = malloc(size); -} - -AsyncDNSMemPool::PoolChunk::~PoolChunk() -{ - ::free(pool); -} - -AsyncDNSMemPool::AsyncDNSMemPool(size_t _defaultSize) -: chunks(NULL), chunksCount(0), defaultSize(_defaultSize), -poolUsage(0), poolUsageCounter(0) -{ -} - -AsyncDNSMemPool::~AsyncDNSMemPool() -{ - for (size_t i = 0; i < chunksCount; ++i) - delete chunks[i]; - - ::free(chunks); -} - -bool AsyncDNSMemPool::initialize() -{ - chunksCount = 1; - chunks = (PoolChunk**)malloc(sizeof(PoolChunk*)); - if (chunks == NULL) - return false; - - chunks[chunksCount - 1] = new PoolChunk(defaultSize); - - return true; -} - -void AsyncDNSMemPool::addNewChunk(size_t size) -{ - ++chunksCount; - - chunks = (PoolChunk**)realloc(chunks, chunksCount * sizeof(PoolChunk*)); - if (size <= defaultSize) - chunks[chunksCount - 1] = new PoolChunk(defaultSize); - else - chunks[chunksCount - 1] = new PoolChunk(size); -} - -void* AsyncDNSMemPool::Alloc(size_t size) -{ - PoolChunk* chunk = NULL; - for (size_t i = 0; i < chunksCount; ++i) - { - chunk = chunks[i]; - if ((chunk->size - chunk->pos) >= size) - { - chunk->pos += size; - return ((char*)chunk->pool) + chunk->pos - size; - } - } - - addNewChunk(size); - chunks[chunksCount - 1]->pos = size; - return chunks[chunksCount - 1]->pool; -} - -void AsyncDNSMemPool::Free() -{ - size_t pu = 0; - size_t psz = 0; - ++poolUsageCounter; - - for (size_t i = 0; i < chunksCount; ++i) - { - pu += chunks[i]->pos; - psz += chunks[i]->size; - chunks[i]->pos = 0; - } - - poolUsage = poolUsage > pu ? poolUsage : pu; - - if (poolUsageCounter >= 10 && chunksCount > 1) - { - psz -= chunks[chunksCount - 1]->size; - if (poolUsage < psz) - { - --chunksCount; - delete chunks[chunksCount]; - } - - poolUsage = 0; - poolUsageCounter = 0; - } -} - -void* AsyncDNSMemPool::Calloc(size_t size) -{ - return ::memset(Alloc(size), 0, size); -} - -char* AsyncDNSMemPool::Strdup(const char *str) -{ - return ::strcpy((char*)Alloc(strlen(str) + 1), str); -} diff --git a/src/shared/Config/dotconfpp/mempool.h b/src/shared/Config/dotconfpp/mempool.h deleted file mode 100644 index 44b789551..000000000 --- a/src/shared/Config/dotconfpp/mempool.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef ASYNC_DNS_MEMPOOL_H -#define ASYNC_DNS_MEMPOOL_H - -#include -#include -#include - -class AsyncDNSMemPool -{ - private: - - struct PoolChunk - { - void* pool; - size_t pos; - size_t size; - - PoolChunk(size_t _size); - ~PoolChunk(); - }; - - PoolChunk** chunks; - size_t chunksCount; - size_t defaultSize; - - size_t poolUsage; - size_t poolUsageCounter; - - void addNewChunk(size_t size); - - public: - - AsyncDNSMemPool(size_t _defaultSize = 4096); - virtual ~AsyncDNSMemPool(); - - bool initialize(); - void Free(); - void* Alloc(size_t size); - void* Calloc(size_t size); - char* Strdup(const char *str); -}; - -#endif diff --git a/src/shared/Database/Database.cpp b/src/shared/Database/Database.cpp index 8bb729745..a0d9cc8b8 100644 --- a/src/shared/Database/Database.cpp +++ b/src/shared/Database/Database.cpp @@ -17,7 +17,7 @@ */ #include "DatabaseEnv.h" -#include "Config/ConfigEnv.h" +#include "Config/Config.h" #include #include diff --git a/src/shared/Log.cpp b/src/shared/Log.cpp index ebeee267d..c64199e4c 100644 --- a/src/shared/Log.cpp +++ b/src/shared/Log.cpp @@ -19,7 +19,7 @@ #include "Common.h" #include "Log.h" #include "Policies/SingletonImp.h" -#include "Config/ConfigEnv.h" +#include "Config/Config.h" #include "Util.h" #include "ByteBuffer.h" #include "ProgressBar.h" diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index fb8211e82..4b40ecede 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10081" + #define REVISION_NR "10082" #endif // __REVISION_NR_H__ diff --git a/win/VC100/shared.vcxproj b/win/VC100/shared.vcxproj index c67029dd2..6d1e05f74 100644 --- a/win/VC100/shared.vcxproj +++ b/win/VC100/shared.vcxproj @@ -437,8 +437,6 @@ - - @@ -475,9 +473,6 @@ - - - diff --git a/win/VC100/shared.vcxproj.filters b/win/VC100/shared.vcxproj.filters index a72367461..8733657b2 100644 --- a/win/VC100/shared.vcxproj.filters +++ b/win/VC100/shared.vcxproj.filters @@ -16,9 +16,6 @@ {adb98dec-d22a-40b3-84be-51eaf2974a15} - - {dff0e90b-cab5-4d0b-bd5d-3cacbb638630} - {e35fd108-bd39-46ae-83f9-09cf1ebf4ea8} @@ -66,12 +63,6 @@ Config - - Config\dotconfpp - - - Config\dotconfpp - Auth @@ -194,15 +185,6 @@ Config - - Config - - - Config\dotconfpp - - - Config\dotconfpp - Auth diff --git a/win/VC80/shared.vcproj b/win/VC80/shared.vcproj index f23732b84..fbba29694 100644 --- a/win/VC80/shared.vcproj +++ b/win/VC80/shared.vcproj @@ -672,30 +672,6 @@ RelativePath="..\..\src\shared\Config\Config.h" > - - - - - - - - - - - - - - - - - - - - - - - -