From 4171a0a082c4c41263d9a08944e1c668bdd489e1 Mon Sep 17 00:00:00 2001 From: Gerhard Sittig Date: Fri, 19 Apr 2019 16:38:11 +0200 Subject: [PATCH] decode: rephrase logic which looks up -A specs The previous logic scanned for specific annotation classes listed in -A, broke the loop when nothing was found, otherwise registered the matching annotation for display later on. Rephrase the logic such that classes get registered when found, and then advance to the next spec. Only mismatch will "fall through" to the error path and terminate the setup routine with a fatal error. This prepares for an optional lookup of annotation rows when class lookup fails, before a fatal error is returned. --- decode.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/decode.c b/decode.c index b3d9bb2..c885824 100644 --- a/decode.c +++ b/decode.c @@ -336,6 +336,7 @@ int setup_pd_annotations(char *opt_pd_annotations) annlist = g_strsplit(ann_txt, ":", 0); for (ann = annlist; *ann && **ann; ann++) { ann_id = *ann; + /* Lookup annotation class. */ ann_class = 0; for (l = dec->annotations; l; l = l->next, ann_class++) { ann_descr = l->data; @@ -343,18 +344,20 @@ int setup_pd_annotations(char *opt_pd_annotations) /* Found it. */ break; } - if (!l) { - g_critical("Annotation '%s' not found " - "for protocol decoder '%s'.", ann_id, dec_id); - g_strfreev(keyval); - g_strfreev(pds); - return 1; + if (l) { + l_ann = g_hash_table_lookup(pd_ann_visible, dec_id); + l_ann = g_slist_append(l_ann, GINT_TO_POINTER(ann_class)); + g_hash_table_replace(pd_ann_visible, g_strdup(dec_id), l_ann); + g_debug("cli: Showing protocol decoder %s annotation " + "class %d (%s).", dec_id, ann_class, ann_descr[0]); + continue; } - l_ann = g_hash_table_lookup(pd_ann_visible, dec_id); - l_ann = g_slist_append(l_ann, GINT_TO_POINTER(ann_class)); - g_hash_table_replace(pd_ann_visible, g_strdup(dec_id), l_ann); - g_debug("cli: Showing protocol decoder %s annotation " - "class %d (%s).", dec_id, ann_class, ann_descr[0]); + /* No match found. */ + g_critical("Annotation '%s' not found " + "for protocol decoder '%s'.", ann_id, dec_id); + g_strfreev(keyval); + g_strfreev(pds); + return 1; } } else { /* No class specified: show all of them. */ -- 2.30.2