1
0
mirror of https://github.com/Zygo/bees.git synced 2025-05-17 21:35:45 +02:00

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 <bees@furryterror.org>
This commit is contained in:
Zygo Blaxell 2024-12-16 22:22:31 -05:00
parent ea45982293
commit e79b242ce2

View File

@ -735,10 +735,10 @@ bees_main(int argc, char *argv[])
// Build getopt_long's short option list from the long_options table. // 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. // While we're at it, make sure we didn't duplicate any options.
string getopt_list; string getopt_list;
set<decltype(option::val)> option_vals; map<decltype(option::val), string> option_vals;
for (const struct option *op = long_options; op->val; ++op) { for (const struct option *op = long_options; op->val; ++op) {
THROW_CHECK1(runtime_error, op->val, !option_vals.count(op->val)); const auto ins_rv = option_vals.insert(make_pair(op->val, op->name));
option_vals.insert(op->val); THROW_CHECK1(runtime_error, op->val, ins_rv.second);
if ((op->val & 0xff) != op->val) { if ((op->val & 0xff) != op->val) {
continue; continue;
} }
@ -749,16 +749,17 @@ bees_main(int argc, char *argv[])
} }
// Parse options // Parse options
int c;
while (true) { while (true) {
int option_index = 0; 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) { if (-1 == c) {
break; break;
} }
BEESLOGDEBUG("Parsing option '" << static_cast<char>(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) { switch (c) {