]> granicus.if.org Git - pdns/commitdiff
Move entire file parsing to parseFile
authorAki Tuomi <cmouse@desteem.org>
Tue, 7 Apr 2015 18:29:32 +0000 (21:29 +0300)
committerAki Tuomi <cmouse@desteem.org>
Tue, 7 Apr 2015 18:53:03 +0000 (21:53 +0300)
pdns/arguments.cc
pdns/arguments.hh

index ba4bbb173486ffc03d3c7ca5520f4dc39aba6090..9f4e1caccd8443274a641615949c2349d88023b0 100644 (file)
@@ -378,38 +378,46 @@ void ArgvMap::preParse(int &argc, char **argv, const string &arg)
   }
 }
 
-bool ArgvMap::parseLine(ifstream& f, const string& arg, string& line, bool lax) {
+bool ArgvMap::parseFile(const char *fname, const string& arg, bool lax) {
+  string line;
   string pline;
   string::size_type pos;
 
-  if (!getline(f, pline)) return false;
-  trim_right(pline);
-  if(pline[pline.size()-1]=='\\') {
-    line+=pline.substr(0,pline.length()-1);
-    return true;
-  }
-  else
-   line+=pline;
-
-  // strip everything after a #
-  if((pos=line.find("#"))!=string::npos) {
-    // make sure it's either first char or has whitespace before
-    // fixes issue #354
-    if (pos == 0 || std::isspace(line[pos-1]))
-      line=line.substr(0,pos);
-  }
+  ifstream f(fname);
+  if(!f)
+    return false;
 
-  // strip trailing spaces
-  trim_right(line);
+  while(getline(f,pline)) {
+    trim_right(pline);
+    
+    if(pline[pline.size()-1]=='\\') {
+      line+=pline.substr(0,pline.length()-1);
+      continue;
+    }
+    else
+      line+=pline;
+
+    // strip everything after a #
+    if((pos=line.find("#"))!=string::npos) {
+      // make sure it's either first char or has whitespace before
+      // fixes issue #354
+      if (pos == 0 || std::isspace(line[pos-1]))
+        line=line.substr(0,pos);
+    }
+
+    // strip trailing spaces
+    trim_right(line);
 
-  // strip leading spaces
-  if((pos=line.find_first_not_of(" \t\r\n"))!=string::npos)
-    line=line.substr(pos);
+    // strip leading spaces
+    if((pos=line.find_first_not_of(" \t\r\n"))!=string::npos)
+      line=line.substr(pos);
 
-  // gpgsql-basic-query=sdfsdfs dfsdfsdf sdfsdfsfd
+    // gpgsql-basic-query=sdfsdfs dfsdfsdf sdfsdfsfd
+
+    parseOne( string("--") + line, arg, lax );
+    line="";
+  }
 
-  parseOne( string("--") + line, arg, lax );
-  line="";
   return true;
 }
 
@@ -418,15 +426,7 @@ bool ArgvMap::preParseFile(const char *fname, const string &arg, const string& t
 {
   params[arg]=theDefault;
 
-  ifstream f(fname);
-  if(!f)
-    return false;
-
-  string line;
-
-  while(parseLine(f, arg, line, false));
-
-  return true;
+  return parseFile(fname, arg, false);
 }
 
 bool ArgvMap::file(const char *fname, bool lax)
@@ -436,17 +436,13 @@ bool ArgvMap::file(const char *fname, bool lax)
 
 bool ArgvMap::file(const char *fname, bool lax, bool included)
 {
-  ifstream f(fname);
-  if(!f) {
-    return false;
-  }
-
   if (!parmIsset("include-dir"))  // inject include-dir
     set("include-dir","Directory to include configuration files from");
 
-  string line;
-
-  while(parseLine(f, "", line, lax));
+  if(!parseFile(fname, "", lax)) {
+    L << Logger::Warning << "Unable to open " << fname << std::endl;
+    return false;
+  }
 
   // handle include here (avoid re-include)
   if (!included && !params["include-dir"].empty()) {
index 87c9199fc5fe2d35ea14a7045b4729765202fa9d..93caa56397775a116a565f5152789511b8bdfd32 100644 (file)
@@ -92,7 +92,7 @@ public:
   {
     return file(fname,true);
   }
-  bool parseLine(ifstream& f, const string& arg, string& line, bool lax); //<! parse one line
+  bool parseFile(const char *fname, const string& arg, bool lax); //<! parse one line
   typedef map<string,string> param_t; //!< use this if you need to know the content of the map
   bool parmIsset(const string &var); //!< Checks if a parameter is set to *a* value
   bool mustDo(const string &var); //!< if a switch is given, if we must do something (--help)