Skip to content

Commit addfb01

Browse files
authored
cli: add --premium option for license file (danmar#6858)
1 parent 3466bdc commit addfb01

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

cli/cmdlineparser.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -969,7 +969,8 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
969969
}
970970

971971
// Special Cppcheck Premium options
972-
else if (std::strncmp(argv[i], "--premium=", 10) == 0 && isCppcheckPremium()) {
972+
else if ((std::strncmp(argv[i], "--premium=", 10) == 0 || std::strncmp(argv[i], "--premium-", 10) == 0) && isCppcheckPremium()) {
973+
// valid options --premium=..
973974
const std::set<std::string> valid{
974975
"autosar",
975976
"cert-c-2016",
@@ -983,6 +984,11 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
983984
"misra-cpp-2023",
984985
"bughunting",
985986
"safety"};
987+
// valid options --premium-..=
988+
const std::set<std::string> valid2{
989+
"cert-c-int-precision",
990+
"license-file"
991+
};
986992

987993
if (std::strcmp(argv[i], "--premium=safety-off") == 0) {
988994
mSettings.safety = false;
@@ -993,8 +999,9 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
993999
if (!mSettings.premiumArgs.empty())
9941000
mSettings.premiumArgs += " ";
9951001
const std::string p(argv[i] + 10);
996-
if (!valid.count(p) && !startsWith(p, "cert-c-int-precision=")) {
997-
mLogger.printError("invalid --premium option '" + p + "'.");
1002+
const std::string p2(p.find('=') != std::string::npos ? p.substr(0, p.find('=')) : "");
1003+
if (!valid.count(p) && !valid2.count(p2)) {
1004+
mLogger.printError("invalid --premium option '" + (p2.empty() ? p : p2) + "'.");
9981005
return Result::Fail;
9991006
}
10001007
mSettings.premiumArgs += "--" + p;

test/testcmdlineparser.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,8 @@ class TestCmdlineParser : public TestFixture {
213213
TEST_CASE(premiumOptions3);
214214
TEST_CASE(premiumOptions4);
215215
TEST_CASE(premiumOptions5);
216+
TEST_CASE(premiumOptionsCertCIntPrecision);
217+
TEST_CASE(premiumOptionsLicenseFile);
216218
TEST_CASE(premiumOptionsInvalid1);
217219
TEST_CASE(premiumOptionsInvalid2);
218220
TEST_CASE(premiumSafety);
@@ -1290,6 +1292,22 @@ class TestCmdlineParser : public TestFixture {
12901292
ASSERT_EQUALS(false, settings->severity.isEnabled(Severity::warning));
12911293
}
12921294

1295+
void premiumOptionsCertCIntPrecision() {
1296+
REDIRECT;
1297+
asPremium();
1298+
const char * const argv[] = {"cppcheck", "--premium-cert-c-int-precision=12", "file.c"};
1299+
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(3, argv));
1300+
ASSERT_EQUALS("--cert-c-int-precision=12", settings->premiumArgs);
1301+
}
1302+
1303+
void premiumOptionsLicenseFile() {
1304+
REDIRECT;
1305+
asPremium();
1306+
const char * const argv[] = {"cppcheck", "--premium-license-file=file.lic", "file.c"};
1307+
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(3, argv));
1308+
ASSERT_EQUALS("--license-file=file.lic", settings->premiumArgs);
1309+
}
1310+
12931311
void premiumOptionsInvalid1() {
12941312
REDIRECT;
12951313
asPremium();

0 commit comments

Comments
 (0)