X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fconfigparser.h;h=8292fdda5c6207182cd4129bdf6b27bcc41d4f2a;hb=3624c137a6db85eaab0372550c9dca79d6d21e55;hp=3240ff5f9360874afffff7d2ae79f18d66693460;hpb=5d73e8928826340aaca9e78205ffb093a6b4f95c;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/configparser.h b/include/configparser.h index 3240ff5f9..8292fdda5 100644 --- a/include/configparser.h +++ b/include/configparser.h @@ -1,3 +1,24 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2009 Daniel De Graaf + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#pragma once + struct fpos { std::string filename; @@ -12,7 +33,7 @@ struct fpos enum ParseFlags { - FLAG_USE_XML = 1, + FLAG_USE_COMPAT = 1, FLAG_NO_EXEC = 2, FLAG_NO_INC = 4 }; @@ -22,32 +43,38 @@ struct ParseStack std::vector reading; std::map vars; ConfigDataHash& output; + ConfigFileCache& FilesOutput; std::stringstream& errstr; ParseStack(ServerConfig* conf) - : output(conf->config_data), errstr(conf->errstr) + : output(conf->config_data), FilesOutput(conf->Files), 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); + bool ParseFile(const std::string& name, int flags, const std::string& mandatory_tag = ""); + bool ParseExec(const std::string& name, int flags, const std::string& mandatory_tag = ""); void DoInclude(ConfigTag* includeTag, int flags); + void DoReadFile(const std::string& key, const std::string& file, int flags, bool exec); }; /** RAII wrapper on FILE* to close files on exceptions */ struct FileWrapper { FILE* const f; - FileWrapper(FILE* file) : f(file) {} - operator bool() { return f; } + bool close_with_pclose; + FileWrapper(FILE* file, bool use_pclose = false) : f(file), close_with_pclose(use_pclose) {} + operator bool() { return (f != NULL); } operator FILE*() { return f; } ~FileWrapper() { if (f) - fclose(f); + { + if (close_with_pclose) + pclose(f); + else + fclose(f); + } } }; - -