diff options
-rw-r--r-- | include/configreader.h | 1 | ||||
-rw-r--r-- | src/configreader.cpp | 14 | ||||
-rw-r--r-- | src/inspircd.cpp | 13 |
3 files changed, 26 insertions, 2 deletions
diff --git a/include/configreader.h b/include/configreader.h index 8a389ed02..a903bd5d6 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -247,6 +247,7 @@ class CoreExport ServerConfig : public Extensible public: size_t TotalDownloaded; + size_t FileErrors; /** Used to indicate who we announce invites to on a channel */ enum InviteAnnounceState { INVITE_ANNOUNCE_NONE, INVITE_ANNOUNCE_ALL, INVITE_ANNOUNCE_OPS, INVITE_ANNOUNCE_DYNAMIC }; diff --git a/src/configreader.cpp b/src/configreader.cpp index 2138d0638..e9301d70a 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -1243,14 +1243,24 @@ void ServerConfig::Read(bool bail, User* user, int pass) bool ServerConfig::Downloading() { - ServerInstance->Log(DEBUG, "ServerConfig::Downloading() TotalDownloaded %u of %u", TotalDownloaded, IncludedFiles.size()); + if (isatty(0) && isatty(1) && isatty(2)) + { + printf("."); + fflush(stdout); + } + /* Returns true if there are still files in the process of downloading */ return (TotalDownloaded < IncludedFiles.size()); } void ServerConfig::StartDownloads() { + if (isatty(0) && isatty(1) && isatty(2)) + printf("Downloading configuration "); + TotalDownloaded = 0; + FileErrors = 0; + /* Reads all local files into the IncludedFiles map, then initiates sockets for the remote ones */ for (std::map<std::string, std::istream*>::iterator x = IncludedFiles.begin(); x != IncludedFiles.end(); ++x) { @@ -1271,6 +1281,8 @@ void ServerConfig::StartDownloads() delete x->second; x->second = conf; } + else + FileErrors++; TotalDownloaded++; } diff --git a/src/inspircd.cpp b/src/inspircd.cpp index e6d453ed2..87af7b06e 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -498,7 +498,8 @@ InspIRCd::InspIRCd(int argc, char** argv) Config->StartDownloads(); /* Now the downloads are started, we monitor them for completion. - * On completion, we call Read again with pass = 1 + * On completion, we call Read again with pass = 1. + * NOTE: We really should add a timeout here */ while (Config->Downloading()) @@ -507,6 +508,16 @@ InspIRCd::InspIRCd(int argc, char** argv) this->BufferedSocketCull(); } + printf("\n"); + + if (Config->FileErrors) + { + /* One or more file download/access errors, do not + * proceed to second pass + */ + Exit(EXIT_STATUS_CONFIG); + } + /* We have all the files we can get, initiate pass 1 */ Config->Read(true, NULL, 1); |