fix wrong parsing of values containing '='

fixes #5074
This commit is contained in:
Pavel Rojtberg
2015-09-23 16:20:07 +02:00
parent 1dd7f546af
commit 46ada3886f
2 changed files with 27 additions and 16 deletions

View File

@@ -234,25 +234,21 @@ CommandLineParser::CommandLineParser(int argc, const char* const argv[], const S
jj = 0;
for (int i = 1; i < argc; i++)
{
String s = String(argv[i]);
String s(argv[i]);
bool hasSingleDash = s.length() > 1 && s[0] == '-';
if (s.find('=') != String::npos && s.find('=') < s.length())
if (hasSingleDash)
{
std::vector<String> k_v = impl->split_string(s, '=', true);
for (int h = 0; h < 2; h++)
{
if (k_v[0][0] == '-')
k_v[0] = k_v[0].substr(1, k_v[0].length() -1);
bool hasDoubleDash = s.length() > 2 && s[1] == '-';
String key = s.substr(hasDoubleDash ? 2 : 1);
String value = "true";
size_t equalsPos = key.find('=');
if(equalsPos != String::npos) {
value = key.substr(equalsPos + 1);
key = key.substr(0, equalsPos);
}
impl->apply_params(k_v[0], k_v[1]);
}
else if (s.length() > 2 && s[0] == '-' && s[1] == '-')
{
impl->apply_params(s.substr(2), "true");
}
else if (s.length() > 1 && s[0] == '-')
{
impl->apply_params(s.substr(1), "true");
impl->apply_params(key, value);
}
else
{