in src/vswhere.lib/CommandParser.cpp [34:69]
vector<CommandParser::Token> CommandParser::Parse(_In_ int argc, _In_ LPCWSTR argv[])
{
vector<CommandParser::Token> tokens;
// Parse program path from first argument.
if (argc < 1)
{
// TODO: Provide localized error message.
throw win32_error(ERROR_INVALID_PARAMETER, "missing program argument");
}
m_path = argv[0];
// Parse remaining arguments.
for (auto i = 1; i < argc; ++i)
{
auto arg = argv[i];
if (!arg || !*arg)
{
// TODO: Provide localized error message.
throw win32_error(ERROR_INVALID_PARAMETER, "empty argument");
}
if (L'-' == arg[0] || L'/' == arg[0])
{
tokens.push_back({ Token::eParameter, &arg[1] });
}
else
{
tokens.push_back({ Token::eArgument, arg });
}
}
return tokens;
}