fixed cmd parser when arg is like -+

pull/1590/head
Ilya Lavrenov 11 years ago
parent 6b69a66c3c
commit d57a7008f1
  1. 30
      modules/core/src/cmdparser.cpp

@ -92,6 +92,22 @@ string del_space(string name)
}//namespace
static bool keyIsNumber(const std::string & option, size_t start)
{
bool isNumber = true;
size_t end = option.find_first_of('=', start);
end = option.npos == end ? option.length() : end;
for ( ; start < end; ++start)
if (!isdigit(option[start]))
{
isNumber = false;
break;
}
return isNumber;
}
CommandLineParser::CommandLineParser(int argc, const char* const argv[], const char* keys)
{
std::string keys_buffer;
@ -144,13 +160,13 @@ CommandLineParser::CommandLineParser(int argc, const char* const argv[], const c
if (!argv[i])
break;
curName = argv[i];
if (curName.find('-') == 0 && ((curName[1] < '0') || (curName[1] > '9')))
{
while (curName.find('-') == 0)
curName.erase(curName.begin(), (curName.begin() + 1));
}
else
withNoKey = true;
size_t nondash = curName.find_first_not_of("-");
if (nondash == 0 || nondash == curName.npos || keyIsNumber(curName, nondash))
withNoKey = true;
else
curName.erase(0, nondash);
if (curName.find('=') != curName.npos)
{
hasValueThroughEq = true;

Loading…
Cancel
Save