summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/configreader.h1
-rw-r--r--src/configreader.cpp14
-rw-r--r--src/inspircd.cpp13
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);