diff options
author | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2009-10-22 21:49:50 +0000 |
---|---|---|
committer | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2009-10-22 21:49:50 +0000 |
commit | b332dda6a32f4033bfd7d9dd86150e1c23e3cf62 (patch) | |
tree | 2601861e97fc02afd1db136c96132ca392885462 /include/configparser.h | |
parent | b43fc66c17c2bef6dca66a966676b8128d5774ee (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/configparser.h')
-rw-r--r-- | include/configparser.h | 52 |
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); + } +}; + + |