X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Finspircd.cpp;h=527eb95b08bf865429908033b93124b2281e9ef3;hb=93b0661ddaebc82df76e0268ebe0ab0c17f7cbc7;hp=72b161b9b7d2f4997dbe9a8eeb2bf763d187b619;hpb=275f58a955407eda93c451273bee48e1637e3b4a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 72b161b9b..527eb95b0 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -90,6 +90,15 @@ const char* ExitCodes[] = "CreateEvent failed" /* 19 */ }; +template void DeleteZero(T* n) +{ + if (n != NULL) + { + delete n; + n = NULL; + } +} + void InspIRCd::Cleanup() { if (Config) @@ -132,102 +141,25 @@ void InspIRCd::Cleanup() for(servernamelist::iterator itr = servernames.begin(); itr != servernames.end(); ++itr) delete (*itr); - /* Delete objects dynamically allocated in constructor - * (destructor would be more appropriate, but we're likely exiting) - */ - - // Must be deleted before modes as it decrements modelines - if (this->Users) - { - delete this->Users; - this->Users = 0; - } - - if (this->Modes) - { - delete this->Modes; - this->Modes = 0; - } - - if (this->XLines) - { - delete this->XLines; - this->XLines = 0; - } - - if (this->Parser) - { - delete this->Parser; - this->Parser = 0; - - if (this->stats) - { - delete this->stats; - this->stats = 0; - } - - if (this->Modules) - { - delete this->Modules; - this->Modules = 0; - } - - if (this->BanCache) - delete this->BanCache; - this->BanCache = 0; - } - - if (this->SNO) - { - delete this->SNO; - this->SNO = 0; - } - - if (this->Config) - { - delete this->Config; - this->Config = 0; - } - - if (this->Res) - { - delete this->Res; - this->Res = 0; - } - - if (this->chanlist) - { - delete chanlist; - chanlist = 0; - } - - if (this->PI) - { - delete this->PI; - this->PI = 0; - } - - if (this->Threads) - { - delete this->Threads; - this->Threads = 0; - } - - /* Needs to be deleted after Res, DNS has a timer */ - if (this->Timers) - { - delete this->Timers; - this->Timers = 0; - } - + /* Delete objects dynamically allocated in constructor (destructor would be more appropriate, but we're likely exiting) */ + /* Must be deleted before modes as it decrements modelines */ + DeleteZero(this->Users); + DeleteZero(this->Modes); + DeleteZero(this->XLines); + DeleteZero(this->Parser); + DeleteZero(this->stats); + DeleteZero(this->Modules); + DeleteZero(this->BanCache); + DeleteZero(this->SNO); + DeleteZero(this->Config); + DeleteZero(this->Res); + DeleteZero(this->chanlist); + DeleteZero(this->PI); + DeleteZero(this->Threads); + DeleteZero(this->Timers); /* Close logging */ this->Logs->CloseLogs(); - - if (this->Logs) - { - delete this->Logs; - this->Logs = 0; - } + DeleteZero(this->Logs); delete RehashFinishMutex; } @@ -589,9 +521,19 @@ InspIRCd::InspIRCd(int argc, char** argv) if (!ServerConfig::FileExists(this->ConfigFileName)) { - printf("ERROR: Cannot open config file: %s\nExiting...\n", this->ConfigFileName); - this->Logs->Log("STARTUP",DEFAULT,"Unable to open config file %s", this->ConfigFileName); - Exit(EXIT_STATUS_CONFIG); +#ifdef WIN32 + /* Windows can (and defaults to) hide file extensions, so let's play a bit nice for windows users. */ + if (ServerConfig::FileExists(this->ConfigFileName + ".txt")) + { + strlcat(this->ConfigFileName, ".txt", MAXBUF); + } + else +#endif + { + printf("ERROR: Cannot open config file: %s\nExiting...\n", this->ConfigFileName); + this->Logs->Log("STARTUP",DEFAULT,"Unable to open config file %s", this->ConfigFileName); + Exit(EXIT_STATUS_CONFIG); + } } printf_c("\033[1;32mInspire Internet Relay Chat Server, compiled %s at %s\n",__DATE__,__TIME__);