From b332dda6a32f4033bfd7d9dd86150e1c23e3cf62 Mon Sep 17 00:00:00 2001 From: danieldg Date: Thu, 22 Oct 2009 21:49:50 +0000 Subject: 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 --- include/configparser.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 include/configparser.h (limited to 'include') 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 reading; + std::map 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); + } +}; + + -- cgit v1.2.3