core/sal: pass commandline parameters by reference

This allows the commandline parameter parser to modify argc, as it finds
arguments for the Fail* client.  Additionally argv is correctly null
terminated when removing arguments.

This fixes a bug introduced in eb17e9ef82.

Change-Id: Iabe84530790ecb7c587b0af139127015aad868d5
This commit is contained in:
Horst Schirmeier
2013-04-02 21:41:46 +02:00
parent f18cddc63c
commit 3fb58de4a5
3 changed files with 16 additions and 7 deletions

View File

@ -36,16 +36,20 @@ BaseListener* SimulatorController::resume(void)
return m_LstList.getLastFired(); return m_LstList.getLastFired();
} }
void SimulatorController::startup(int argc, char **argv) void SimulatorController::startup(int& argc, char **& argv)
{
if (argv) {
CommandLine::Inst().collect_args(argc, argv);
}
startup();
}
void SimulatorController::startup()
{ {
// Some greetings to the user: // Some greetings to the user:
std::cout << "[SimulatorController] Initializing..." << std::endl; std::cout << "[SimulatorController] Initializing..." << std::endl;
// TODO: Log-Level? // TODO: Log-Level?
if (argv) {
CommandLine::Inst().collect_args(argc, argv);
}
// Activate previously added experiments to allow initialization: // Activate previously added experiments to allow initialization:
initExperiments(); initExperiments();
} }

View File

@ -52,7 +52,11 @@ public:
* @param argc main()'s argument counter * @param argc main()'s argument counter
* @param argv main()'s argument value vector * @param argv main()'s argument value vector
*/ */
void startup(int argc = 0, char **argv = 0); void startup(int& argc, char **& argv);
/**
* @brief Parameter-less version of startup() for backends that do not (yet) handle parameters
*/
void startup();
/** /**
* Experiments need to hook here. * Experiments need to hook here.
*/ */

View File

@ -13,7 +13,8 @@ namespace fail {
if (strncmp(argv[i], "-Wf,", 4) == 0) { if (strncmp(argv[i], "-Wf,", 4) == 0) {
this->argv.push_back(std::string(argv[i] + 4)); this->argv.push_back(std::string(argv[i] + 4));
for (int x = i + 1; x < argc; ++x) { // also copy argv[argc], which equals 0
for (int x = i + 1; x <= argc; ++x) {
argv[x - 1] = argv[x]; argv[x - 1] = argv[x];
} }
i --; i --;