diff options
author | Brad King <brad.king@kitware.com> | 2021-03-29 13:29:30 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2021-03-29 13:29:39 (GMT) |
commit | 0e37e0d215a3f9c5b6108bf4e5366b9d7f03ff7b (patch) | |
tree | 1a3783bad09a04dc9d2603131c677e25d355bb14 /Source | |
parent | 2a2afe0ae4eeb417583cf3d84ebbcb365973bbe0 (diff) | |
parent | 79d7bcaf4029ce7b78abfcbcaf8cd1a09a172437 (diff) | |
download | CMake-0e37e0d215a3f9c5b6108bf4e5366b9d7f03ff7b.zip CMake-0e37e0d215a3f9c5b6108bf4e5366b9d7f03ff7b.tar.gz CMake-0e37e0d215a3f9c5b6108bf4e5366b9d7f03ff7b.tar.bz2 |
Merge topic 'correct_arg_parsing' into release-3.20
79d7bcaf40 cmCommandLineArgument: correctly compute next parse index
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !5936
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmCommandLineArgument.h | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/Source/cmCommandLineArgument.h b/Source/cmCommandLineArgument.h index cbedf0a..495dc69 100644 --- a/Source/cmCommandLineArgument.h +++ b/Source/cmCommandLineArgument.h @@ -76,8 +76,9 @@ struct cmCommandLineArgument } else if (this->Type == Values::One || this->Type == Values::ZeroOrOne) { if (input.size() == this->Name.size()) { - ++index; - if (index >= allArgs.size() || allArgs[index][0] == '-') { + auto nextValueIndex = index + 1; + if (nextValueIndex >= allArgs.size() || + allArgs[nextValueIndex][0] == '-') { if (this->Type == Values::ZeroOrOne) { parseState = this->StoreCall(std::string{}, std::forward<CallState>(state)...) @@ -87,10 +88,11 @@ struct cmCommandLineArgument parseState = ParseMode::ValueError; } } else { - parseState = - this->StoreCall(allArgs[index], std::forward<CallState>(state)...) + parseState = this->StoreCall(allArgs[nextValueIndex], + std::forward<CallState>(state)...) ? ParseMode::Valid : ParseMode::Invalid; + index = nextValueIndex; } } else { // parse the string to get the value @@ -133,7 +135,8 @@ struct cmCommandLineArgument } else if (this->Type == Values::OneOrMore) { if (input.size() == this->Name.size()) { auto nextValueIndex = index + 1; - if (nextValueIndex >= allArgs.size() || allArgs[index + 1][0] == '-') { + if (nextValueIndex >= allArgs.size() || + allArgs[nextValueIndex][0] == '-') { parseState = ParseMode::ValueError; } else { std::string buffer = allArgs[nextValueIndex++]; @@ -145,6 +148,7 @@ struct cmCommandLineArgument this->StoreCall(buffer, std::forward<CallState>(state)...) ? ParseMode::Valid : ParseMode::Invalid; + index = (nextValueIndex - 1); } } } |