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.
annlist = g_strsplit(ann_txt, ":", 0);
for (ann = annlist; *ann && **ann; ann++) {
ann_id = *ann;
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;
ann_class = 0;
for (l = dec->annotations; l; l = l->next, ann_class++) {
ann_descr = l->data;
- 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. */
}
} else {
/* No class specified: show all of them. */