Beispiel #1
0
/**
 * Parses a config file with lines of the form
 *
 *     flag = value
 *
 * and sets flags as appropriate.
 */
Status ParseConfigFile() {
  Trace();
  if (!g_configFile.wasSet()) {
    Log(LL::Trace) << "No flag config file specified.";
    return Status::ok();
  }
  const std::string &filename = g_configFile.get();
  Log(LL::Trace) << "Begining parse of config file: " << filename;

  std::ifstream ifile(filename.c_str());
  if (!ifile.is_open()) {
    Log(LL::Trace) << "Config file " << filename << " not found.";
    return Status(Status::NOT_FOUND);
  }

  std::string line;
  int lineno = 0;
  while (std::getline(ifile, line)) {
    if (line.empty()) {
      lineno++;
      continue;
    }

    std::vector< std::string > argstr =
        Splitter().on('=').trimWhitespace().split(line, 2);

    RET_SM(
        argstr.size() == 2,
        Status::BAD_INPUT,
        "Error in config file \"" << filename << "\" "
                                  << "on line " << lineno
                                  << " is not a valid flag=value pair");

    tFlagIter itr = GetGlobalFlags().find(argstr[0]);
    RET_SM(
        itr != GetGlobalFlags().end(),
        Status::BAD_INPUT,
        "Unknown flag: " << argstr[0] << " @ line " << lineno);

    iFlagBase *pFlag = itr->second;
    RET_SM(
        pFlag->fromString(TrimQuotes(argstr[1])),
        Status::BAD_INPUT,
        "Invalid flag value for " << argstr[0] << " at line " << lineno
                                  << ". can't parse: " << argstr[1]);

    lineno++;
  }
  return Status::ok();
}
Beispiel #2
0
Status ParseFlags(const int argc, const char **argv) {
  Trace();

  for (int i = 0; i < argc; ++i) {
    Log(LL::Info) << "argv[" << i << "] = " << argv[i];
  }

  for (int i = 1; i < argc; ++i) {
    const char *arg = argv[i];
    if ((arg[0] != '-') || (arg[0] != '\0' && arg[1] != '-')) {
      Log(LL::Error) << "Unknown commandline input #" << i << ": " << arg;
      return Status::BAD_ARGUMENT;
    }

    std::vector< std::string > argstr =
        Splitter().on('=').trimWhitespace().split(std::string(arg + 2), 2);
    RET_SM(!argstr.empty(), Status::BAD_ARGUMENT, "Unknown flag: " << arg);

    tFlagIter itr = GetGlobalFlags().find(argstr[0]);
    RET_SM(
        itr != GetGlobalFlags().end(),
        Status::BAD_ARGUMENT,
        "Unknown flag: " << arg);

    iFlagBase *pFlag = itr->second;

    if (argstr.size() == 2) {
      // Parse case where we have [flag][=][value]
      RET_SM(
          pFlag->fromString(argstr.at(1)),
          Status::BAD_ARGUMENT,
          "Invalid flag value for " << argstr[0] << " can't parse "
                                    << argstr[1]);
    } else if (i + 1 < argc) {
      // Parse case where we have [flag][space][value]
      ++i;
      RET_SM(
          pFlag->fromString(std::string(argv[i])),
          Status::BAD_ARGUMENT,
          "Invalid flag value for " << argstr[0] << " can't parse " << argv[i]);
    } else {
      // Error on case where we have [flag] alone.  Booleans must be specified
      // as [flag][=][true]
      Log(LL::Error) << "Found flag with no value: " << argstr[0];
      return Status::BAD_ARGUMENT;
    }
  }

  return ParseConfigFile();
}
Beispiel #3
0
bool ParseFlags(const int argc, const char **argv) {
  Trace("Parsing " << argc << " flags from the cli");

  for (int i = 0; i < argc; ++i) {
    Log(LL::Info) << "argv[" << i << "] = " << argv[i] << std::endl;
  }

  for (int i = 1; i < argc; ++i) {
    const char *arg = argv[i];
    if ((arg[0] != '-') || (argv[0] != '\0' && arg[1] != '-')) {
      Log(LL::Error) << "Unknown commandline input #" << i
                     << ": " << arg << std::endl;
      return false;
    }

    std::vector<std::string> argstr = core::util::Splitter()
                                      .on('=')
                                      .trimWhitespace()
                                      .split(std::string(arg + 2), 2);
    RET_M(!argstr.empty(), "Unknown flag: " << arg);

    tFlagIter itr = GetGlobalFlags().find(argstr[0]);
    RET_M(itr != GetGlobalFlags().end(), "Unknown flag: " << arg);

    iFlagBase *pFlag = itr->second;

    if (argstr.size() == 2) {
      // Parse case where we have [flag][=][value]
      RET_M(pFlag->fromString(argstr.at(1)),
            "Invalid flag value for " << argstr[0] << " can't parse " << argstr[1]);
    } else if (i + 1 < argc) {
      // Parse case where we have [flag][space][value]
      ++i;
      RET_M(pFlag->fromString(std::string(argv[i])),
            "Invalid flag value for " << argstr[0] << " can't parse " << argv[i]);
    } else {
      // Error on case where we have [flag] alone.  Booleans must be specified as [flag][=][true]
      Log(LL::Error) << "Found flag with no value: " << argstr[0] << std::endl;
      return false;
    }
  }

  Trace("Finished parsing cli flags");
  return ParseConfigFile(g_configFile.get());
}
Beispiel #4
0
/**
 * Parses a config file with lines of the form
 *
 *     flag = value
 *
 * and sets flags as appropriate.
 */
bool ParseConfigFile(const std::string &filename) {
  Trace("Begining parse of config file: " << filename);
  std::ifstream ifile(filename.c_str());
  if (!ifile.is_open()) {
    Log(LL::Info) << "Config file " << filename << " not found." << std::endl;
    return true;
  }

  std::string line;
  int lineno = 0;
  while (std::getline(ifile, line)) {
    if (line.empty()) {
      lineno++;
      continue;
    }

    std::vector<std::string> argstr = core::util::Splitter()
                                      .on('=')
                                      .trimWhitespace()
                                      .split(line, 2);

    RET_M(argstr.size() == 2, "Error in config file \"" << filename << "\" "
          << "on line " << lineno << " is not a valid flag=value pair");

    tFlagIter itr = GetGlobalFlags().find(argstr[0]);
    RET_M(itr != GetGlobalFlags().end(), "Unknown flag: " << argstr[0]);

    iFlagBase *pFlag = itr->second;
    RET_M(pFlag->fromString(core::util::trimQuotes(argstr[1])),
          "Invalid flag value for " << argstr[0] << " can't parse " << argstr[1]);

    lineno++;
  }

  Trace("Finished parsing config file of length: " << lineno);
  return true;
}