From e79b242ce292c807dc0e5c046e0ff156b770901a Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Mon, 16 Dec 2024 22:22:31 -0500 Subject: [PATCH] options: clean up the parser, prepare for new options with no short form We're not adding any more short options, but the debugging code doesn't work with optvals above 255. Also clean up constness and variable lifetimes. Signed-off-by: Zygo Blaxell --- src/bees.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/bees.cc b/src/bees.cc index 1268d0f..635ec3f 100644 --- a/src/bees.cc +++ b/src/bees.cc @@ -735,10 +735,10 @@ bees_main(int argc, char *argv[]) // Build getopt_long's short option list from the long_options table. // While we're at it, make sure we didn't duplicate any options. string getopt_list; - set option_vals; + map option_vals; for (const struct option *op = long_options; op->val; ++op) { - THROW_CHECK1(runtime_error, op->val, !option_vals.count(op->val)); - option_vals.insert(op->val); + const auto ins_rv = option_vals.insert(make_pair(op->val, op->name)); + THROW_CHECK1(runtime_error, op->val, ins_rv.second); if ((op->val & 0xff) != op->val) { continue; } @@ -749,16 +749,17 @@ bees_main(int argc, char *argv[]) } // Parse options - int c; while (true) { int option_index = 0; - c = getopt_long(argc, argv, getopt_list.c_str(), long_options, &option_index); + const auto c = getopt_long(argc, argv, getopt_list.c_str(), long_options, &option_index); if (-1 == c) { break; } - BEESLOGDEBUG("Parsing option '" << static_cast(c) << "'"); + // getopt_long should have weeded out any invalid options, + // so we can go ahead and throw here + BEESLOGDEBUG("Parsing option '" << option_vals.at(c) << "'"); switch (c) {