summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2021-03-29 13:29:30 (GMT)
committerKitware Robot <kwrobot@kitware.com>2021-03-29 13:29:39 (GMT)
commit0e37e0d215a3f9c5b6108bf4e5366b9d7f03ff7b (patch)
tree1a3783bad09a04dc9d2603131c677e25d355bb14 /Source
parent2a2afe0ae4eeb417583cf3d84ebbcb365973bbe0 (diff)
parent79d7bcaf4029ce7b78abfcbcaf8cd1a09a172437 (diff)
downloadCMake-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.h14
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);
}
}
}