Skip to content

Commit

Permalink
Be more strict with constness of argv variable (#18365)
Browse files Browse the repository at this point in the history
Theoretically, we could use "const char * const argv[]", however,
functions getopt()/getopt_long() expect char to be non-const.
  • Loading branch information
arkq authored and pull[bot] committed Oct 27, 2023
1 parent 0406546 commit 1473746
Show file tree
Hide file tree
Showing 13 changed files with 34 additions and 31 deletions.
2 changes: 1 addition & 1 deletion examples/platform/linux/AppMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ static bool EnsureWiFiIsStarted()
}
#endif

int ChipLinuxAppInit(int argc, char ** argv, OptionSet * customOptions)
int ChipLinuxAppInit(int argc, char * const argv[], OptionSet * customOptions)
{
CHIP_ERROR err = CHIP_NO_ERROR;
#if CONFIG_NETWORK_LAYER_BLE
Expand Down
2 changes: 1 addition & 1 deletion examples/platform/linux/AppMain.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

#include "Options.h"

int ChipLinuxAppInit(int argc, char ** argv, chip::ArgParser::OptionSet * customOptions = nullptr);
int ChipLinuxAppInit(int argc, char * const argv[], chip::ArgParser::OptionSet * customOptions = nullptr);
void ChipLinuxAppMainLoop();

#if CHIP_DEVICE_CONFIG_ENABLE_BOTH_COMMISSIONER_AND_COMMISSIONEE
Expand Down
2 changes: 1 addition & 1 deletion examples/platform/linux/Options.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,7 @@ OptionSet sDeviceOptions = { HandleOption, sDeviceOptionDefs, "GENERAL OPTIONS",
OptionSet * sLinuxDeviceOptionSets[] = { &sDeviceOptions, nullptr, nullptr, nullptr };
} // namespace

CHIP_ERROR ParseArguments(int argc, char * argv[], OptionSet * customOptions)
CHIP_ERROR ParseArguments(int argc, char * const argv[], OptionSet * customOptions)
{
// Index 0 is for the general Linux options
uint8_t optionSetIndex = 1;
Expand Down
2 changes: 1 addition & 1 deletion examples/platform/linux/Options.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,4 @@ struct LinuxDeviceOptions
static LinuxDeviceOptions & GetInstance();
};

CHIP_ERROR ParseArguments(int argc, char * argv[], chip::ArgParser::OptionSet * customOptions = nullptr);
CHIP_ERROR ParseArguments(int argc, char * const argv[], chip::ArgParser::OptionSet * customOptions = nullptr);
4 changes: 2 additions & 2 deletions src/inet/tests/TestInetLayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ struct TestState

static void HandleSignal(int aSignal);
static bool HandleOption(const char * aProgram, OptionSet * aOptions, int aIdentifier, const char * aName, const char * aValue);
static bool HandleNonOptionArgs(const char * aProgram, int argc, char * argv[]);
static bool HandleNonOptionArgs(const char * aProgram, int argc, char * const argv[]);

static void StartTest();
static void CleanupTest();
Expand Down Expand Up @@ -429,7 +429,7 @@ static bool HandleOption(const char * aProgram, OptionSet * aOptions, int aIdent
return (retval);
}

bool HandleNonOptionArgs(const char * aProgram, int argc, char * argv[])
bool HandleNonOptionArgs(const char * aProgram, int argc, char * const argv[])
{
if (Common::IsSender())
{
Expand Down
4 changes: 2 additions & 2 deletions src/inet/tests/TestLwIPDNS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ using namespace chip::Inet;

#define TOOL_NAME "TestLwIPDNS"

static bool HandleNonOptionArgs(const char * progName, int argc, char * argv[]);
static bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[]);

// Globals

Expand Down Expand Up @@ -239,7 +239,7 @@ int main(int argc, char * argv[])
return (EXIT_SUCCESS);
}

static bool HandleNonOptionArgs(const char * progName, int argc, char * argv[])
static bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[])
{
if (argc < 2)
{
Expand Down
18 changes: 10 additions & 8 deletions src/lib/support/CHIPArgParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ OptionSet ** gActiveOptionSets = nullptr;
void (*PrintArgError)(const char * msg, ...) = DefaultPrintArgError;

/**
* @fn bool ParseArgs(const char *progName, int argc, char *argv[], OptionSet *optSets[], NonOptionArgHandlerFunct nonOptArgHandler,
* bool ignoreUnknown)
* @fn bool ParseArgs(const char *progName, int argc, char * const argv[], OptionSet *optSets[],
* NonOptionArgHandlerFunct nonOptArgHandler, bool ignoreUnknown)
*
* @brief
* Parse a set of command line-style arguments, calling handling functions to process each
Expand All @@ -119,8 +119,9 @@ void (*PrintArgError)(const char * msg, ...) = DefaultPrintArgError;
* messages and warnings.
* @param[in] argc The number of arguments to be parsed, plus 1.
* @param[in] argv An array of argument strings to be parsed. The array length must
* be 1 greater than the value specified for argc, and
* argv[argc] must be set to NULL. Argument parsing begins with the *second* array element (argv[1]); element 0 is ignored.
* be 1 greater than the value specified for argc, and
* argv[argc] must be set to NULL. Argument parsing begins with the
* *second* array element (argv[1]); element 0 is ignored.
* @param[in] optSets A list of pointers to `OptionSet` structures that define the legal
* options. The supplied list must be terminated with a NULL.
* @param[in] nonOptArgHandler A pointer to a function that will be called once option parsing
Expand Down Expand Up @@ -280,8 +281,8 @@ void (*PrintArgError)(const char * msg, ...) = DefaultPrintArgError;
* a common section title.
*
*/
bool ParseArgs(const char * progName, int argc, char * argv[], OptionSet * optSets[], NonOptionArgHandlerFunct nonOptArgHandler,
bool ignoreUnknown)
bool ParseArgs(const char * progName, int argc, char * const argv[], OptionSet * optSets[],
NonOptionArgHandlerFunct nonOptArgHandler, bool ignoreUnknown)
{
bool res = false;
char optName[64];
Expand Down Expand Up @@ -433,12 +434,13 @@ bool ParseArgs(const char * progName, int argc, char * argv[], OptionSet * optSe
return res;
}

bool ParseArgs(const char * progName, int argc, char * argv[], OptionSet * optSets[], NonOptionArgHandlerFunct nonOptArgHandler)
bool ParseArgs(const char * progName, int argc, char * const argv[], OptionSet * optSets[],
NonOptionArgHandlerFunct nonOptArgHandler)
{
return ParseArgs(progName, argc, argv, optSets, nonOptArgHandler, false);
}

bool ParseArgs(const char * progName, int argc, char * argv[], OptionSet * optSets[])
bool ParseArgs(const char * progName, int argc, char * const argv[], OptionSet * optSets[])
{
return ParseArgs(progName, argc, argv, optSets, nullptr, false);
}
Expand Down
11 changes: 6 additions & 5 deletions src/lib/support/CHIPArgParser.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ typedef bool (*OptionHandlerFunct)(const char * progName, OptionSet * optSet, in
/**
* A function that can be called to handle any remaining, non-option command line arguments.
*/
typedef bool (*NonOptionArgHandlerFunct)(const char * progName, int argc, char * argv[]);
typedef bool (*NonOptionArgHandlerFunct)(const char * progName, int argc, char * const argv[]);

/**
* Defines the argument requirements for a command line option.
Expand Down Expand Up @@ -94,10 +94,11 @@ class OptionSetBase : public OptionSet
static bool CallHandleFunct(const char * progName, OptionSet * optSet, int id, const char * name, const char * arg);
};

bool ParseArgs(const char * progName, int argc, char * argv[], OptionSet * optSets[]);
bool ParseArgs(const char * progName, int argc, char * argv[], OptionSet * optSets[], NonOptionArgHandlerFunct nonOptArgHandler);
bool ParseArgs(const char * progName, int argc, char * argv[], OptionSet * optSets[], NonOptionArgHandlerFunct nonOptArgHandler,
bool ignoreUnknown);
bool ParseArgs(const char * progName, int argc, char * const argv[], OptionSet * optSets[]);
bool ParseArgs(const char * progName, int argc, char * const argv[], OptionSet * optSets[],
NonOptionArgHandlerFunct nonOptArgHandler);
bool ParseArgs(const char * progName, int argc, char * const argv[], OptionSet * optSets[],
NonOptionArgHandlerFunct nonOptArgHandler, bool ignoreUnknown);

bool ParseArgsFromString(const char * progName, const char * argStr, OptionSet * optSets[]);
bool ParseArgsFromString(const char * progName, const char * argStr, OptionSet * optSets[],
Expand Down
4 changes: 2 additions & 2 deletions src/lib/support/tests/TestCHIPArgParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
using namespace chip::ArgParser;

static bool HandleOption(const char * progName, OptionSet * optSet, int id, const char * name, const char * arg);
static bool HandleNonOptionArgs(const char * progName, int argc, char * argv[]);
static bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[]);
static void HandleArgError(const char * msg, ...);
static void ClearCallbackRecords();

Expand Down Expand Up @@ -701,7 +701,7 @@ static bool HandleOption(const char * progName, OptionSet * optSet, int id, cons
return true;
}

static bool HandleNonOptionArgs(const char * progName, int argc, char * argv[])
static bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[])
{
#if DEBUG_TESTS
// clang-format off
Expand Down
4 changes: 2 additions & 2 deletions src/tools/chip-cert/Cmd_ConvertCert.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ using namespace chip::Credentials;
#define CMD_NAME "chip-cert convert-cert"

bool HandleOption(const char * progName, OptionSet * optSet, int id, const char * name, const char * arg);
bool HandleNonOptionArgs(const char * progName, int argc, char * argv[]);
bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[]);

// clang-format off
OptionDef gCmdOptionDefs[] =
Expand Down Expand Up @@ -131,7 +131,7 @@ bool HandleOption(const char * progName, OptionSet * optSet, int id, const char
return true;
}

bool HandleNonOptionArgs(const char * progName, int argc, char * argv[])
bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[])
{
if (argc == 0)
{
Expand Down
4 changes: 2 additions & 2 deletions src/tools/chip-cert/Cmd_ConvertKey.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ using namespace chip::Credentials;
#define CMD_NAME "chip-cert convert-key"

bool HandleOption(const char * progName, OptionSet * optSet, int id, const char * name, const char * arg);
bool HandleNonOptionArgs(const char * progName, int argc, char * argv[]);
bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[]);

// clang-format off
OptionDef gCmdOptionDefs[] =
Expand Down Expand Up @@ -132,7 +132,7 @@ bool HandleOption(const char * progName, OptionSet * optSet, int id, const char
return true;
}

bool HandleNonOptionArgs(const char * progName, int argc, char * argv[])
bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[])
{
if (argc == 0)
{
Expand Down
4 changes: 2 additions & 2 deletions src/tools/chip-cert/Cmd_PrintCert.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ using namespace chip::ASN1;
#define CMD_NAME "chip-cert print-cert"

bool HandleOption(const char * progName, OptionSet * optSet, int id, const char * name, const char * arg);
bool HandleNonOptionArgs(const char * progName, int argc, char * argv[]);
bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[]);

// clang-format off
OptionDef gCmdOptionDefs[] =
Expand Down Expand Up @@ -101,7 +101,7 @@ bool HandleOption(const char * progName, OptionSet * optSet, int id, const char
return true;
}

bool HandleNonOptionArgs(const char * progName, int argc, char * argv[])
bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[])
{
if (argc == 0)
{
Expand Down
4 changes: 2 additions & 2 deletions src/tools/chip-cert/Cmd_ValidateCert.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ using namespace chip::ASN1;
#define CMD_NAME "chip-cert validate-cert"

bool HandleOption(const char * progName, OptionSet * optSet, int id, const char * name, const char * arg);
bool HandleNonOptionArgs(const char * progName, int argc, char * argv[]);
bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[]);

// clang-format off
OptionDef gCmdOptionDefs[] =
Expand Down Expand Up @@ -118,7 +118,7 @@ bool HandleOption(const char * progName, OptionSet * optSet, int id, const char
return true;
}

bool HandleNonOptionArgs(const char * progName, int argc, char * argv[])
bool HandleNonOptionArgs(const char * progName, int argc, char * const argv[])
{
if (argc == 0)
{
Expand Down

0 comments on commit 1473746

Please sign in to comment.