X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Finspircd.cpp;h=1d8ce762517fd4aed0f873c2ac2503d63efbb67b;hb=5750fdaae86e2b1ef4a7ce4db3d02a9d0bf2c2e7;hp=d09dff84067f35612d4942559e42a5288b5628ac;hpb=98659aa0dcac7636627846555ef7d5f807152b7e;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/inspircd.cpp b/src/inspircd.cpp index d09dff840..1d8ce7625 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -11,6 +11,8 @@ * --------------------------------------------------- */ +/* w00t was here. ;p */ + /* $Install: src/inspircd $(BINPATH) */ #include "inspircd.h" #include @@ -93,7 +95,7 @@ void InspIRCd::Cleanup() /* Close all client sockets, or the new process inherits them */ for (std::vector::const_iterator i = this->Users->local_users.begin(); i != this->Users->local_users.end(); i++) { - (*i)->SetWriteError("Server shutdown"); + this->Users->QuitUser((*i), "Server shutdown"); (*i)->CloseSocket(); } @@ -224,8 +226,6 @@ void InspIRCd::Restart(const std::string &reason) */ this->SendError(reason); - this->Cleanup(); - /* Figure out our filename (if theyve renamed it, we're boned) */ std::string me; @@ -237,7 +237,11 @@ void InspIRCd::Restart(const std::string &reason) me = Config->MyDir + "/inspircd"; #endif - if (execv(me.c_str(), Config->argv) == -1) + char** argv = Config->argv; + + this->Cleanup(); + + if (execv(me.c_str(), argv) == -1) { /* Will raise a SIGABRT if not trapped */ throw CoreException(std::string("Failed to execv()! error: ") + strerror(errno)); @@ -349,7 +353,8 @@ bool InspIRCd::DaemonSeed() void InspIRCd::WritePID(const std::string &filename) { std::string fname = (filename.empty() ? "inspircd.pid" : filename); - if (*(fname.begin()) != '/') + std::replace(fname.begin(), fname.end(), '\\', '/'); + if ((fname[0] != '/') && (!Config->StartsWithWindowsDriveLetter(filename))) { std::string::size_type pos; std::string confpath = this->ConfigFileName; @@ -666,22 +671,15 @@ InspIRCd::InspIRCd(int argc, char** argv) this->BuildISupport(); InitializeDisabledCommands(Config->DisabledCommands, this); - /*if ((Config->ports.size() == 0) && (found_ports > 0)) - { - printf("\nERROR: I couldn't bind any ports! Are you sure you didn't start InspIRCd twice?\n"); - Logs->Log("STARTUP", DEFAULT,"ERROR: I couldn't bind any ports! Something else is bound to those ports!"); - Exit(EXIT_STATUS_BIND); - }*/ - if (Config->ports.size() != (unsigned int)found_ports) { printf("\nWARNING: Not all your client ports could be bound --\nstarting anyway with %d of %d client ports bound.\n\n", bounditems, found_ports); printf("The following port(s) failed to bind:\n"); - printf("Hint: Try using an IP instead of blank or *\n\n"); + printf("Hint: Try using a public IP instead of blank or *\n\n"); int j = 1; for (FailedPortList::iterator i = pl.begin(); i != pl.end(); i++, j++) { - printf("%d.\tIP: %s\tPort: %lu\n", j, i->first.empty() ? "" : i->first.c_str(), (unsigned long)i->second); + printf("%d.\tAddress: %s\tReason: %s\n", j, i->first.empty() ? "" : i->first.c_str(), i->second.c_str()); } } @@ -703,7 +701,7 @@ InspIRCd::InspIRCd(int argc, char** argv) * e.g. we are restarting, or being launched by cron. Dont kill parent, and dont * close stdin/stdout */ - if (!do_nofork) + if ((!do_nofork) && (!do_testsuite)) { fclose(stdin); fclose(stderr); @@ -792,7 +790,11 @@ int InspIRCd::Run() { if (TIME < OLDTIME) { - SNO->WriteToSnoMask('A', "\002EH?!\002 -- Time is flowing BACKWARDS in this dimension! Clock drifted backwards %lu secs.", (unsigned long)OLDTIME-TIME); + SNO->WriteToSnoMask('d', "\002EH?!\002 -- Time is flowing BACKWARDS in this dimension! Clock drifted backwards %lu secs.", (unsigned long)OLDTIME-TIME); + } + else if (TIME != OLDTIME + 1) + { + SNO->WriteToSnoMask('d', "\002EH?!\002 -- Time is jumping FORWARDS! Clock skipped %lu secs.", (unsigned long)TIME - OLDTIME); } if ((TIME % 3600) == 0)