]> granicus.if.org Git - pdns/commitdiff
Move line parsing to its own method
authorAki Tuomi <cmouse@desteem.org>
Tue, 7 Apr 2015 18:13:01 +0000 (21:13 +0300)
committerAki Tuomi <cmouse@desteem.org>
Tue, 7 Apr 2015 18:52:19 +0000 (21:52 +0300)
pdns/arguments.cc
pdns/arguments.hh

index d430d7234af069ed72e80c1290c6ffbb14098c1e..ba4bbb173486ffc03d3c7ca5520f4dc39aba6090 100644 (file)
@@ -378,6 +378,42 @@ void ArgvMap::preParse(int &argc, char **argv, const string &arg)
   }
 }
 
+bool ArgvMap::parseLine(ifstream& f, const string& arg, string& line, bool lax) {
+  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);
+  }
+
+  // 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);
+
+  // gpgsql-basic-query=sdfsdfs dfsdfsdf sdfsdfsfd
+
+  parseOne( string("--") + line, arg, lax );
+  line="";
+  return true;
+}
+
+
 bool ArgvMap::preParseFile(const char *fname, const string &arg, const string& theDefault)
 {
   params[arg]=theDefault;
@@ -387,39 +423,8 @@ bool ArgvMap::preParseFile(const char *fname, const string &arg, const string& t
     return false;
 
   string line;
-  string pline;
-  string::size_type pos;
-
-  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);
 
-    // gpgsql-basic-query=sdfsdfs dfsdfsdf sdfsdfsfd
-
-    parseOne( string("--") + line, arg );
-    line="";
-  }
+  while(parseLine(f, arg, line, false));
 
   return true;
 }
@@ -440,36 +445,8 @@ bool ArgvMap::file(const char *fname, bool lax, bool included)
     set("include-dir","Directory to include configuration files from");
 
   string line;
-  string pline;
-  string::size_type pos;
 
-  while(getline(f,pline)) {
-    trim_right(pline);
-    if(pline.empty())
-      continue;
-
-    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(line);
-
-    parseOne(string("--")+line,"",lax);
-    line="";
-  }
+  while(parseLine(f, "", line, lax));
 
   // handle include here (avoid re-include)
   if (!included && !params["include-dir"].empty()) {
index a59ebc814797e01a5bfbc726fc97951af58a9582..87c9199fc5fe2d35ea14a7045b4729765202fa9d 100644 (file)
@@ -92,6 +92,7 @@ public:
   {
     return file(fname,true);
   }
+  bool parseLine(ifstream& f, const string& arg, string& line, 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)