InspIRCd  3.0
configparser.h
1 /*
2  * InspIRCd -- Internet Relay Chat Daemon
3  *
4  * Copyright (C) 2009 Daniel De Graaf <[email protected]>
5  *
6  * This file is part of InspIRCd. InspIRCd is free software: you can
7  * redistribute it and/or modify it under the terms of the GNU General Public
8  * License as published by the Free Software Foundation, version 2.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
13  * details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 
20 #pragma once
21 
22 struct fpos
23 {
24  std::string filename;
25  int line;
26  int col;
27  fpos(const std::string& name, int l = 1, int c = 1) : filename(name), line(l), col(c) {}
28  std::string str()
29  {
30  return filename + ":" + ConvToStr(line) + ":" + ConvToStr(col);
31  }
32 };
33 
34 enum ParseFlags
35 {
36  FLAG_USE_COMPAT = 1,
37  FLAG_NO_EXEC = 2,
38  FLAG_NO_INC = 4
39 };
40 
41 struct ParseStack
42 {
43  std::vector<std::string> reading;
45  ConfigDataHash& output;
46  ConfigFileCache& FilesOutput;
47  std::stringstream& errstr;
48 
50  : output(conf->config_data), FilesOutput(conf->Files), errstr(conf->errstr)
51  {
52  vars["amp"] = "&";
53  vars["quot"] = "\"";
54  vars["newline"] = vars["nl"] = "\n";
55  }
56  bool ParseFile(const std::string& name, int flags, const std::string& mandatory_tag = std::string(), bool isexec = false);
57  void DoInclude(ConfigTag* includeTag, int flags);
58  void DoReadFile(const std::string& key, const std::string& file, int flags, bool exec);
59 };
60 
63 {
64  FILE* const f;
65  bool close_with_pclose;
66  FileWrapper(FILE* file, bool use_pclose = false) : f(file), close_with_pclose(use_pclose) {}
67  operator bool() { return (f != NULL); }
68  operator FILE*() { return f; }
69  ~FileWrapper()
70  {
71  if (f)
72  {
73  if (close_with_pclose)
74  pclose(f);
75  else
76  fclose(f);
77  }
78  }
79 };
Definition: configparser.h:41
Definition: configreader.h:36
std::stringstream errstr
Definition: configreader.h:247
ConfigDataHash config_data
Definition: configreader.h:262
Definition: configparser.h:22
Definition: configparser.h:62
Definition: configreader.h:197
ConfigFileCache Files
Definition: configreader.h:267