From 625789d0ea5645abfca3cc4cdeb2906e2a8e754d Mon Sep 17 00:00:00 2001 From: Max Wash Date: Mon, 25 Nov 2024 22:04:21 +0000 Subject: [PATCH] cmd: fix arglist iterator not finding all relevant opts/args in certain cases --- cmd/arglist.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/cmd/arglist.c b/cmd/arglist.c index 954e12b..3b3f617 100644 --- a/cmd/arglist.c +++ b/cmd/arglist.c @@ -5,9 +5,9 @@ #include #include #include +#include #include #include -#include B_BTREE_DEFINE_SIMPLE_INSERT( struct b_arglist_option, opt_node, opt_id, put_arglist_option) @@ -859,14 +859,15 @@ int b_arglist_iterator_begin( } b_btree_iterator_begin(&opt->opt_values, &it->_arg_it); + bool done = false; + while (1) { if (!b_btree_iterator_is_valid(&it->_arg_it)) { if (arg_filter == B_COMMAND_INVALID_ID) { - break; + done = true; } - val = NULL; - return -1; + break; } val = b_unbox( @@ -878,10 +879,15 @@ int b_arglist_iterator_begin( continue; } + done = true; break; } - break; + if (done) { + break; + } + + b_btree_iterator_next(&it->_opt_it); } it->opt_id = opt->opt_id;