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);
};
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);
+ }
}
};