summaryrefslogtreecommitdiffstats
path: root/cmd-show-options.c
diff options
context:
space:
mode:
authornicm <nicm>2019-03-18 11:58:40 +0000
committernicm <nicm>2019-03-18 11:58:40 +0000
commitce6be7afd4d10b542f9cce8634d6bdd81754f775 (patch)
tree01a13843f212816c057069a13d02b46743ed8fd0 /cmd-show-options.c
parentd2d43987d0f35af2bc012f1260fdb81c851fe390 (diff)
Make array options a sparse tree instead of an array of char * and
remove the size limit.
Diffstat (limited to 'cmd-show-options.c')
-rw-r--r--cmd-show-options.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/cmd-show-options.c b/cmd-show-options.c
index f043beca..872f0c45 100644
--- a/cmd-show-options.c
+++ b/cmd-show-options.c
@@ -89,20 +89,20 @@ static void
cmd_show_options_print(struct cmd *self, struct cmdq_item *item,
struct options_entry *o, int idx)
{
- const char *name;
- const char *value;
- char *tmp, *escaped;
- u_int size, i;
+ struct options_array_item *a;
+ const char *name, *value;
+ char *tmp, *escaped;
if (idx != -1) {
xasprintf(&tmp, "%s[%d]", options_name(o), idx);
name = tmp;
} else {
- if (options_array_size(o, &size) != -1) {
- for (i = 0; i < size; i++) {
- if (options_array_get(o, i) == NULL)
- continue;
- cmd_show_options_print(self, item, o, i);
+ if (options_isarray(o)) {
+ a = options_array_first(o);
+ while (a != NULL) {
+ idx = options_array_item_index(a);
+ cmd_show_options_print(self, item, o, idx);
+ a = options_array_next(a);
}
return;
}
@@ -165,9 +165,10 @@ static enum cmd_retval
cmd_show_options_all(struct cmd *self, struct cmdq_item *item,
struct options *oo)
{
- struct options_entry *o;
+ struct options_entry *o;
const struct options_table_entry *oe;
- u_int size, idx;
+ struct options_array_item *a;
+ u_int idx;
o = options_first(oo);
while (o != NULL) {
@@ -176,13 +177,14 @@ cmd_show_options_all(struct cmd *self, struct cmdq_item *item,
o = options_next(o);
continue;
}
- if (options_array_size(o, &size) == -1)
+ if (!options_isarray(o))
cmd_show_options_print(self, item, o, -1);
else {
- for (idx = 0; idx < size; idx++) {
- if (options_array_get(o, idx) == NULL)
- continue;
+ a = options_array_first(o);
+ while (a != NULL) {
+ idx = options_array_item_index(a);
cmd_show_options_print(self, item, o, idx);
+ a = options_array_next(a);
}
}
o = options_next(o);