diff options
author | Yabin Cui <yabinc@google.com> | 2020-11-03 09:24:48 -0800 |
---|---|---|
committer | Yabin Cui <yabinc@google.com> | 2020-11-03 09:56:10 -0800 |
commit | e09cb9f35fc57f5def294065d3cc20c5943db267 (patch) | |
tree | 8850aae19157efd026ac6a9a7e58c6fad1b83bc2 /simpleperf/cmd_inject.cpp | |
parent | 896defdd2e1edefa3fd06916fef872ff2c581ad0 (diff) | |
download | extras-e09cb9f35fc57f5def294065d3cc20c5943db267.tar.gz |
simpleperf: Use PreprocessOptions in inject cmd.
Bug: 172284638
Test: run simpleperf_unit_test
Change-Id: I6b49ba501cdd470f5ffd87dd22d047c9a4e15efa
Diffstat (limited to 'simpleperf/cmd_inject.cpp')
-rw-r--r-- | simpleperf/cmd_inject.cpp | 74 |
1 files changed, 37 insertions, 37 deletions
diff --git a/simpleperf/cmd_inject.cpp b/simpleperf/cmd_inject.cpp index 7487b21d..a37235c0 100644 --- a/simpleperf/cmd_inject.cpp +++ b/simpleperf/cmd_inject.cpp @@ -143,47 +143,47 @@ class InjectCommand : public Command { private: bool ParseOptions(const std::vector<std::string>& args) { - for (size_t i = 0; i < args.size(); i++) { - if (args[i] == "--binary") { - if (!NextArgumentOrError(args, &i)) { - return false; - } - binary_name_regex_ = args[i]; - } else if (args[i] == "-i") { - if (!NextArgumentOrError(args, &i)) { - return false; - } - input_filename_ = args[i]; - } else if (args[i] == "-o") { - if (!NextArgumentOrError(args, &i)) { - return false; - } - output_filename_ = args[i]; - } else if (args[i] == "--output") { - if (!NextArgumentOrError(args, &i)) { - return false; - } - if (args[i] == "autofdo") { - output_format_ = OutputFormat::AutoFDO; - } else if (args[i] == "branch-list") { - output_format_ = OutputFormat::BranchList; - } else { - LOG(ERROR) << "unknown format in --output option: " << args[i]; - return false; - } - } else if (args[i] == "--dump-etm") { - if (!NextArgumentOrError(args, &i) || !ParseEtmDumpOption(args[i], &etm_dump_option_)) { - return false; - } - } else if (args[i] == "--symdir") { - if (!NextArgumentOrError(args, &i) || !Dso::AddSymbolDir(args[i])) { - return false; - } + const OptionFormatMap option_formats = { + {"--binary", {OptionValueType::STRING, OptionType::SINGLE}}, + {"--dump-etm", {OptionValueType::STRING, OptionType::SINGLE}}, + {"-i", {OptionValueType::STRING, OptionType::SINGLE}}, + {"-o", {OptionValueType::STRING, OptionType::SINGLE}}, + {"--output", {OptionValueType::STRING, OptionType::SINGLE}}, + {"--symdir", {OptionValueType::STRING, OptionType::MULTIPLE}}, + }; + OptionValueMap options; + std::vector<std::pair<OptionName, OptionValue>> ordered_options; + if (!PreprocessOptions(args, option_formats, &options, &ordered_options, nullptr)) { + return false; + } + + if (auto value = options.PullValue("--binary"); value) { + binary_name_regex_ = *value->str_value; + } + if (auto value = options.PullValue("--dump-etm"); value) { + if (!ParseEtmDumpOption(*value->str_value, &etm_dump_option_)) { + return false; + } + } + options.PullStringValue("-i", &input_filename_); + options.PullStringValue("-o", &output_filename_); + if (auto value = options.PullValue("--output"); value) { + const std::string& output = *value->str_value; + if (output == "autofdo") { + output_format_ = OutputFormat::AutoFDO; + } else if (output == "branch-list") { + output_format_ = OutputFormat::BranchList; } else { - ReportUnknownOption(args, i); + LOG(ERROR) << "unknown format in --output option: " << output; + return false; + } + } + if (auto value = options.PullValue("--symdir"); value) { + if (!Dso::AddSymbolDir(*value->str_value)) { return false; } } + CHECK(options.values.empty()); return true; } |