diff options
Diffstat (limited to 'ui/packet_list_utils.c')
-rw-r--r-- | ui/packet_list_utils.c | 56 |
1 files changed, 38 insertions, 18 deletions
diff --git a/ui/packet_list_utils.c b/ui/packet_list_utils.c index ce5a6d27..d6c13848 100644 --- a/ui/packet_list_utils.c +++ b/ui/packet_list_utils.c @@ -11,19 +11,22 @@ #include "config.h" +#include <stdint.h> +#include <stdbool.h> #include "packet_list_utils.h" #include <epan/column.h> -gboolean -right_justify_column (gint col, capture_file *cf) +bool +right_justify_column (int col, capture_file *cf) { header_field_info *hfi; - gboolean right_justify = FALSE; - guint num_fields, *field_idx, ii; - guint right_justify_count = 0; + bool right_justify = false; + unsigned num_fields, ii; + col_custom_t *col_custom; + unsigned right_justify_count = 0; - if (!cf) return FALSE; + if (!cf) return false; switch (cf->cinfo.columns[col].col_fmt) { @@ -37,16 +40,23 @@ right_justify_column (gint col, capture_file *cf) case COL_DEF_SRC_PORT: case COL_DELTA_TIME: case COL_DELTA_TIME_DIS: - right_justify = TRUE; + right_justify = true; break; case COL_CUSTOM: num_fields = g_slist_length(cf->cinfo.columns[col].col_custom_fields_ids); for (ii = 0; ii < num_fields; ii++) { - field_idx = (guint *) g_slist_nth_data(cf->cinfo.columns[col].col_custom_fields_ids, ii); - hfi = proto_registrar_get_nth(*field_idx); + col_custom = (col_custom_t *) g_slist_nth_data(cf->cinfo.columns[col].col_custom_fields_ids, ii); + if (col_custom->field_id == 0) { + /* XXX - If there were some way to check the compiled dfilter's + * expected return type, we could use that. + */ + return false; + } + hfi = proto_registrar_get_nth(col_custom->field_id); /* Check if this is a valid field and we have no strings lookup table */ + /* XXX - We should check every hfi with the same abbreviation */ if ((hfi != NULL) && ((hfi->strings == NULL) || !get_column_resolved(col))) { /* Check for bool, framenum, double, float, relative time and decimal/octal integer types */ if ((hfi->type == FT_BOOLEAN) || (hfi->type == FT_FRAMENUM) || (hfi->type == FT_DOUBLE) || @@ -61,7 +71,7 @@ right_justify_column (gint col, capture_file *cf) if ((num_fields > 0) && (right_justify_count == num_fields)) { /* All custom fields must meet the right-justify criteria */ - right_justify = TRUE; + right_justify = true; } break; @@ -72,22 +82,32 @@ right_justify_column (gint col, capture_file *cf) return right_justify; } -gboolean -resolve_column (gint col, capture_file *cf) +bool +resolve_column (int col, capture_file *cf) { header_field_info *hfi; - gboolean resolve = FALSE; - guint num_fields, *field_idx, ii; + bool resolve = false; + unsigned num_fields, ii; + col_custom_t *col_custom; - if (!cf) return FALSE; + if (!cf) return false; switch (cf->cinfo.columns[col].col_fmt) { case COL_CUSTOM: num_fields = g_slist_length(cf->cinfo.columns[col].col_custom_fields_ids); for (ii = 0; ii < num_fields; ii++) { - field_idx = (guint *) g_slist_nth_data(cf->cinfo.columns[col].col_custom_fields_ids, ii); - hfi = proto_registrar_get_nth(*field_idx); + col_custom = (col_custom_t *) g_slist_nth_data(cf->cinfo.columns[col].col_custom_fields_ids, ii); + if (col_custom->field_id == 0) { + /* XXX - A "resolved" string might be conceivable for certain + * expressions, but would require being able to know which + * hfinfo produced each value, if there are multiple hfi with + * the same abbreviation. + */ + continue; + } + hfi = proto_registrar_get_nth(col_custom->field_id); + /* XXX - We should check every hfi with the same abbreviation */ /* Check if we have an OID, a (potentially) resolvable network * address, a Boolean, or a strings table with integer values */ @@ -98,7 +118,7 @@ resolve_column (gint col, capture_file *cf) ((hfi->strings != NULL) && (FT_IS_INT(hfi->type) || FT_IS_UINT(hfi->type)))) { - resolve = TRUE; + resolve = true; break; } } |