From d847f50827e6818ba257a119b4595355873bf34b Mon Sep 17 00:00:00 2001 From: Patrick Venture Date: Tue, 26 Mar 2019 11:12:39 -0700 Subject: transition to cli11 instead of custom arg parser Transition to use cli11 for argument parsing instead of a custom argument parser. Tested: Not tested on hardware. Signed-off-by: Patrick Venture Change-Id: I9c516c8c2d76e35c6c31592f96e8f281e9d47ad6 --- readeeprom.cpp | 79 ++++++++-------------------------------------------------- 1 file changed, 10 insertions(+), 69 deletions(-) (limited to 'readeeprom.cpp') diff --git a/readeeprom.cpp b/readeeprom.cpp index f5fa148..2c74fbd 100644 --- a/readeeprom.cpp +++ b/readeeprom.cpp @@ -1,6 +1,6 @@ -#include "argument.hpp" #include "writefrudata.hpp" +#include #include #include #include @@ -9,52 +9,6 @@ using namespace phosphor::logging; -static void exit_with_error(const char* err, char** argv) -{ - ArgumentParser::usage(argv); - std::cerr << std::endl; - std::cerr << "ERROR: " << err << std::endl; - exit(-1); -} - -static uint8_t parse_fruid_or_exit(const char* fruid_str, char** argv) -{ - const uint8_t MAX_FRU_ID = 0xfe; - unsigned long fruid; - char* endptr = NULL; - - // The FRUID string must not be empty. - if (fruid_str == nullptr || *fruid_str == '\0') - { - exit_with_error("Empty fruid.", argv); - } - - errno = 0; - fruid = std::strtoul(fruid_str, &endptr, 16); - - // Handle error cases - if (errno == ERANGE) - { - exit_with_error("fruid is out of range.", argv); - } - if (errno != 0) - { - exit_with_error("Could not parse fruid.", argv); - } - if (*endptr != '\0') - { - // The string was not fully parsed, e.g. contains invalid characters - exit_with_error("Invalid fruid.", argv); - } - if (fruid > MAX_FRU_ID) - { - // The string was parsed, but the set FRUID is too large. - exit_with_error("fruid is out of range.", argv); - } - - return fruid; -} - //-------------------------------------------------------------------------- // This gets called by udev monitor soon after seeing hog plugs for EEPROMS. //-------------------------------------------------------------------------- @@ -62,30 +16,17 @@ int main(int argc, char** argv) { int rc = 0; uint8_t fruid; + std::string eeprom_file; + const int MAX_FRU_ID = 0xfe; - // Read the arguments. - auto cli_options = std::make_unique(argc, argv); - - // Parse out each argument. - auto eeprom_file = (*cli_options)["eeprom"]; - if (eeprom_file == ArgumentParser::empty_string) - { - // User has not passed in the appropriate argument value - exit_with_error("eeprom data not found.", argv); - } + CLI::App app{"OpenBMC IPMI-FRU-Parser"}; + app.add_option("-e,--eeprom", eeprom_file, "Absolute file name of eeprom") + ->check(CLI::ExistingFile); + app.add_option("-f,--fruid", fruid, "valid fru id in integer") + ->check(CLI::Range(0, MAX_FRU_ID)); - auto fruid_str = (*cli_options)["fruid"]; - if (fruid_str == ArgumentParser::empty_string) - { - // User has not passed in the appropriate argument value - exit_with_error("fruid data not found.", argv); - } - - // Extract the fruid - fruid = parse_fruid_or_exit(fruid_str.c_str(), argv); - - // Finished getting options out, so release the parser. - cli_options.release(); + // Read the arguments. + CLI11_PARSE(app, argc, argv); // Now that we have the file that contains the eeprom data, go read it // and update the Inventory DB. -- cgit v1.2.1