summaryrefslogtreecommitdiffstats
path: root/ui/packet_list_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'ui/packet_list_utils.c')
-rw-r--r--ui/packet_list_utils.c56
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;
}
}