From: Aki Tuomi Date: Wed, 26 Jun 2013 20:40:52 +0000 (+0300) Subject: Support for += syntax for options, candidate for ticket #502 X-Git-Tag: auth-3.3.1~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0c1fe2a997f8a5ad5ac15a032b075941a456d83d;p=thirdparty%2Fpdns.git Support for += syntax for options, candidate for ticket #502 --- diff --git a/pdns/arguments.cc b/pdns/arguments.cc index 40e176d9ff..49f981c4e3 100644 --- a/pdns/arguments.cc +++ b/pdns/arguments.cc @@ -293,8 +293,14 @@ void ArgvMap::parseOne(const string &arg, const string &parseOnly, bool lax) { string var, val; string::size_type pos; - - if(!arg.find("--") &&(pos=arg.find("="))!=string::npos) // this is a --port=25 case + bool incremental = false; + if(!arg.find("--") &&(pos=arg.find("+"))!=string::npos) // this is a --port+=25 case + { + var=arg.substr(2,pos-2); + val=arg.substr(pos+2); + incremental = true; + } + else if(!arg.find("--") &&(pos=arg.find("="))!=string::npos) // this is a --port=25 case { var=arg.substr(2,pos-2); val=arg.substr(pos+1); @@ -319,8 +325,15 @@ void ArgvMap::parseOne(const string &arg, const string &parseOnly, bool lax) if(pos && pos!=string::npos) val=val.substr(pos); - if(parmIsset(var)) - params[var]=val; + if(parmIsset(var)) { + if (incremental) { + if (!params[var].empty()) { + params[var]+=","; + } + params[var]+=val; + } else + params[var]=val; + } else if(!lax) throw ArgException("Trying to set unexisting parameter '"+var+"'");