Browse Source

config: trim spaces and tabs

Peter Cai 8 years ago
parent
commit
6ef38709a6
3 changed files with 22 additions and 2 deletions
  1. 11 0
      common.cpp
  2. 2 0
      common.h
  3. 9 2
      main.cpp

+ 11 - 0
common.cpp

@@ -607,3 +607,14 @@ int run_command_no_log(string command0,char * &output) {
     return 0;
 
 }*/
+
+// Remove preceding and trailing characters
+string trim(const string& str, char c) {
+	size_t first = str.find_first_not_of(c);
+	if(string::npos==first)
+	{
+		return "";
+	}
+	size_t last = str.find_last_not_of(c);
+	return str.substr(first,(last-first+1));
+}

+ 2 - 0
common.h

@@ -164,6 +164,8 @@ int read_file(const char * file,char * &output);
 vector<string> string_to_vec(const char * s,const char * sp);
 vector< vector <string> > string_to_vec2(const char * s);
 
+string trim(const string& str, char c);
+
 //extern string iptables_pattern;
 
 #endif /* COMMON_H_ */

+ 9 - 2
main.cpp

@@ -2545,6 +2545,12 @@ void print_help()
 	//printf("common options,these options must be same on both side\n");
 }
 void process_arg(int argc, char *argv[], bool read_config = true);
+std::string trim_config_line(std::string line)
+{
+	auto str = trim(line, ' '); // Space
+	str = trim(str, '	'); // Tab
+	return str;
+}
 void load_config(char *config_file, int argc_orig, char *argv_orig[])
 {
 	// Load configurations from config_file instead of the command line.
@@ -2554,6 +2560,7 @@ void load_config(char *config_file, int argc_orig, char *argv_orig[])
 	std::vector<std::string> arguments;
 	while(std::getline(conf_file,line))
 	{
+		line = trim_config_line(line);
 		if(line==""||line.at(0)=='#')
 		{
 			continue;
@@ -2567,8 +2574,8 @@ void load_config(char *config_file, int argc_orig, char *argv_orig[])
 		{
 			auto p1 = line.substr(0,pos);
 			auto p2 = line.substr(pos+1,line.length() - pos - 1);
-			arguments.push_back(p1);
-			arguments.push_back(p2);
+			arguments.push_back(trim_config_line(p1));
+			arguments.push_back(trim_config_line(p2));
 		}
 	}
 	conf_file.close();