summaryrefslogtreecommitdiff
path: root/src/configreader.cpp
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-11-11 23:49:03 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-11-11 23:49:03 +0000
commitbedbe6480de4af64c0e752bc5ed09d0d7a9aa72c (patch)
tree281e7e2af14c04c1591d1312557cb57084aac16a /src/configreader.cpp
parent5252b3095f1329c547559ae66774227c4629e2c4 (diff)
This works with multiple remote includes now except it hangs when an include is within an include
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8590 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/configreader.cpp')
-rw-r--r--src/configreader.cpp40
1 files changed, 27 insertions, 13 deletions
diff --git a/src/configreader.cpp b/src/configreader.cpp
index 993183b41..a72673363 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -1275,8 +1275,12 @@ void ServerConfig::Complete(const std::string &filename, bool error)
/* We should parse the new file here and check it for another level of include files */
CompletedFiles[filename] = true;
- LoadConf(this->newconfig, filename, errstr, 0, x->second);
- StartDownloads();
+
+ if (!error)
+ {
+ LoadConf(this->newconfig, filename, errstr, 0, x->second);
+ StartDownloads();
+ }
}
return;
@@ -1284,11 +1288,14 @@ void ServerConfig::Complete(const std::string &filename, bool error)
void ServerConfig::StartDownloads()
{
- if (isatty(0) && isatty(1) && isatty(2))
- printf("Downloading configuration ");
+ if (IncludedFiles.empty())
+ {
+ if (isatty(0) && isatty(1) && isatty(2))
+ printf("Downloading configuration ");
- TotalDownloaded = 0;
- FileErrors = 0;
+ 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)
@@ -1435,7 +1442,8 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const char* filename, std::o
if ((character_count++ < 2) && (ch == '\xFF' || ch == '\xFE'))
{
errorstream << "File " << filename << " cannot be read, as it is encoded in braindead UTF-16. Save your file as plain ASCII!" << std::endl;
- delete conf;
+ if (!scan_for_includes_only)
+ delete conf;
return false;
}
@@ -1491,7 +1499,8 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const char* filename, std::o
else
{
errorstream << "End of file after a \\, what did you want to escape?: " << filename << ":" << linenumber << std::endl;
- delete conf;
+ if (!scan_for_includes_only)
+ delete conf;
return false;
}
}
@@ -1506,7 +1515,8 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const char* filename, std::o
if (!in_quote)
{
errorstream << "Got another opening < when the first one wasn't closed: " << filename << ":" << linenumber << std::endl;
- delete conf;
+ if (!scan_for_includes_only)
+ delete conf;
return false;
}
}
@@ -1515,7 +1525,8 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const char* filename, std::o
if (in_quote)
{
errorstream << "We're in a quote but outside a tag, interesting. " << filename << ":" << linenumber << std::endl;
- delete conf;
+ if (!scan_for_includes_only)
+ delete conf;
return false;
}
else
@@ -1568,7 +1579,8 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const char* filename, std::o
if (!this->ParseLine(target, line, linenumber, errorstream, pass, scan_for_includes_only))
{
- delete conf;
+ if (!scan_for_includes_only)
+ delete conf;
return false;
}
@@ -1577,7 +1589,8 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const char* filename, std::o
else
{
errorstream << "Got a closing > when we weren't inside a tag: " << filename << ":" << linenumber << std::endl;
- delete conf;
+ if (!scan_for_includes_only)
+ delete conf;
return false;
}
}
@@ -1591,7 +1604,8 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const char* filename, std::o
is a newline missing from the end of the file: " << filename << ":" << linenumber << std::endl;
}
- delete conf;
+ if (!scan_for_includes_only)
+ delete conf;
return true;
}