diff options
Diffstat (limited to 'include')
-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); + } +}; + + |