blob: 82e71d261827fcd3a3977952e83faef59a17216d [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <cstdio>
#include <string>
#include "base/environment.h"
#include "foomatic_shell/shell.h"
namespace {
// Description of the supported parameters.
const char kDescription[] =
"Supported parameters:\n -c - execute the script given in the next "
"parameter\n -v - verbose mode\n -e - this parameter is ignored.\n";
// Prints a message |msg| to stderr and append to it the description of the
// supported parameters.
void PrintErrorMessage(const std::string& msg) {
fprintf(stderr, "Incorrect parameters: %s.\n%s", msg.c_str(), kDescription);
}
} // namespace
int main(int argc, char** argv) {
char* script = nullptr;
bool verbose = false;
bool verify = base::Environment::Create()->HasVar("FOOMATIC_VERIFY_MODE");
// Parse the input parameters.
for (int i = 1; i < argc; ++i) {
const std::string parameter = argv[i];
// Option -c is supposed to be followed by a script to execute.
if (parameter == "-c") {
if (script != nullptr) {
PrintErrorMessage("No more than one -c parameter is allowed");
return -1;
}
if (++i == argc) {
PrintErrorMessage("No script after -c parameter");
return -1;
}
script = argv[i];
continue;
}
// Parameter -v means verbose mode.
if (parameter == "-v") {
verbose = true;
continue;
}
// Parameter -e is ignored.
if (parameter == "-e")
continue;
// Unknown parameter - exit with an error.
PrintErrorMessage("Unknown parameter " + parameter);
return -1;
}
// The parameter -c must be specified.
if (script == nullptr) {
PrintErrorMessage("Parameter -c must be set");
return -1;
}
// Run in the standard mode (execute given script).
if (strlen(script) > foomatic_shell::kMaxSourceSize) {
PrintErrorMessage("The script provided with -c parameter is too large");
return -1;
}
return (foomatic_shell::ExecuteShellScript(std::string(script), 1, verbose,
verify));
}