summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-10-22 21:49:50 +0000
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-10-22 21:49:50 +0000
commitb332dda6a32f4033bfd7d9dd86150e1c23e3cf62 (patch)
tree2601861e97fc02afd1db136c96132ca392885462 /include
parentb43fc66c17c2bef6dca66a966676b8128d5774ee (diff)
Split up configreader.cpp, it's a bit large
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11954 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'include')
-rw-r--r--include/configparser.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/include/configparser.h b/include/configparser.h
new file mode 100644
index 000000000..a1d7aff5b
--- /dev/null
+++ b/include/configparser.h
@@ -0,0 +1,52 @@
+struct fpos
+{
+ std::string filename;
+ int line;
+ int col;
+ fpos(const std::string& name, int l = 1, int c = 1) : filename(name), line(l), col(c) {}
+ std::string str()
+ {
+ return filename + ":" + ConvToStr(line) + ":" + ConvToStr(col);
+ }
+};
+
+enum ParseFlags
+{
+ FLAG_NO_EXEC = 1,
+ FLAG_NO_INC = 2
+};
+
+struct ParseStack
+{
+ std::vector<std::string> reading;
+ std::map<std::string, std::string> vars;
+ ConfigDataHash& output;
+ std::stringstream& errstr;
+
+ ParseStack(ServerConfig* conf)
+ : output(conf->config_data), errstr(conf->errstr)
+ {
+ vars["amp"] = "&";
+ vars["quot"] = "\"";
+ vars["newline"] = vars["nl"] = "\n";
+ }
+ bool ParseFile(const std::string& name, int flags);
+ bool ParseExec(const std::string& name, int flags);
+ void DoInclude(ConfigTag* includeTag, int flags);
+};
+
+/** RAII wrapper on FILE* to close files on exceptions */
+struct FileWrapper
+{
+ FILE* const f;
+ FileWrapper(FILE* file) : f(file) {}
+ operator bool() { return f; }
+ operator FILE*() { return f; }
+ ~FileWrapper()
+ {
+ if (f)
+ fclose(f);
+ }
+};
+
+