summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epan/column-utils.c16
-rw-r--r--epan/frame_data.h1
-rw-r--r--file.c29
-rw-r--r--gtk/main.c37
4 files changed, 30 insertions, 53 deletions
diff --git a/epan/column-utils.c b/epan/column-utils.c
index 0105ad423c..a465aaa3fd 100644
--- a/epan/column-utils.c
+++ b/epan/column-utils.c
@@ -1206,7 +1206,6 @@ col_set_port(packet_info *pinfo, int col, gboolean is_res, gboolean is_src)
g_strlcpy(pinfo->cinfo->col_expr.col_expr[col], "tcp.dstport",
COL_MAX_LEN);
g_snprintf(pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN, "%u", port);
- pinfo->cinfo->col_expr.col_expr_val[col][COL_MAX_LEN - 1] = '\0';
break;
case PT_UDP:
@@ -1221,7 +1220,6 @@ col_set_port(packet_info *pinfo, int col, gboolean is_res, gboolean is_src)
g_strlcpy(pinfo->cinfo->col_expr.col_expr[col], "udp.dstport",
COL_MAX_LEN);
g_snprintf(pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN, "%u", port);
- pinfo->cinfo->col_expr.col_expr_val[col][COL_MAX_LEN - 1] = '\0';
break;
case PT_DDP:
@@ -1233,7 +1231,6 @@ col_set_port(packet_info *pinfo, int col, gboolean is_res, gboolean is_src)
COL_MAX_LEN);
g_snprintf(pinfo->cinfo->col_buf[col], COL_MAX_LEN, "%u", port);
g_snprintf(pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN, "%u", port);
- pinfo->cinfo->col_expr.col_expr_val[col][COL_MAX_LEN - 1] = '\0';
break;
case PT_IPX:
@@ -1246,7 +1243,6 @@ col_set_port(packet_info *pinfo, int col, gboolean is_res, gboolean is_src)
g_strlcpy(pinfo->cinfo->col_expr.col_expr[col], "ipx.dst.socket",
COL_MAX_LEN);
g_snprintf(pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN, "0x%04x", port);
- pinfo->cinfo->col_expr.col_expr_val[col][COL_MAX_LEN - 1] = '\0';
break;
case PT_IDP:
@@ -1259,7 +1255,6 @@ col_set_port(packet_info *pinfo, int col, gboolean is_res, gboolean is_src)
g_strlcpy(pinfo->cinfo->col_expr.col_expr[col], "idp.dst.socket",
COL_MAX_LEN);
g_snprintf(pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN, "0x%04x", port);
- pinfo->cinfo->col_expr.col_expr_val[col][COL_MAX_LEN - 1] = '\0';
break;
case PT_USB:
@@ -1272,13 +1267,11 @@ col_set_port(packet_info *pinfo, int col, gboolean is_res, gboolean is_src)
g_strlcpy(pinfo->cinfo->col_expr.col_expr[col], "usb.dst.endpoint",
COL_MAX_LEN);
g_snprintf(pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN, "0x%08x", port);
- pinfo->cinfo->col_expr.col_expr_val[col][COL_MAX_LEN - 1] = '\0';
break;
default:
break;
}
- pinfo->cinfo->col_buf[col][COL_MAX_LEN - 1] = '\0';
pinfo->cinfo->col_data[col] = pinfo->cinfo->col_buf[col];
}
@@ -1332,7 +1325,6 @@ col_set_circuit_id(packet_info *pinfo, int col)
g_snprintf(pinfo->cinfo->col_buf[col], COL_MAX_LEN, "%u", pinfo->circuit_id);
g_strlcpy(pinfo->cinfo->col_expr.col_expr[col], "fr.dlci", COL_MAX_LEN);
g_snprintf(pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN, "%u", pinfo->circuit_id);
- pinfo->cinfo->col_expr.col_expr_val[col][COL_MAX_LEN - 1] = '\0';
break;
case CT_ISDN:
@@ -1341,7 +1333,6 @@ col_set_circuit_id(packet_info *pinfo, int col)
g_strlcpy(pinfo->cinfo->col_expr.col_expr[col], "isdn.channel",
COL_MAX_LEN);
g_snprintf(pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN, "%u", pinfo->circuit_id);
- pinfo->cinfo->col_expr.col_expr_val[col][COL_MAX_LEN - 1] = '\0';
break;
case CT_X25:
@@ -1352,13 +1343,11 @@ col_set_circuit_id(packet_info *pinfo, int col)
g_snprintf(pinfo->cinfo->col_buf[col], COL_MAX_LEN, "%u", pinfo->circuit_id);
g_strlcpy(pinfo->cinfo->col_expr.col_expr[col], "isup.cic", COL_MAX_LEN);
g_snprintf(pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN, "%u", pinfo->circuit_id);
- pinfo->cinfo->col_expr.col_expr_val[col][COL_MAX_LEN - 1] = '\0';
break;
default:
break;
}
- pinfo->cinfo->col_buf[col][COL_MAX_LEN - 1] = '\0';
pinfo->cinfo->col_data[col] = pinfo->cinfo->col_buf[col];
}
@@ -1497,13 +1486,11 @@ col_fill_in(packet_info *pinfo)
case COL_OXID:
g_snprintf(pinfo->cinfo->col_buf[i], COL_MAX_LEN, "0x%x", pinfo->oxid);
- pinfo->cinfo->col_buf[i][COL_MAX_LEN - 1] = '\0';
pinfo->cinfo->col_data[i] = pinfo->cinfo->col_buf[i];
break;
case COL_RXID:
g_snprintf(pinfo->cinfo->col_buf[i], COL_MAX_LEN, "0x%x", pinfo->rxid);
- pinfo->cinfo->col_buf[i][COL_MAX_LEN - 1] = '\0';
pinfo->cinfo->col_data[i] = pinfo->cinfo->col_buf[i];
break;
@@ -1516,19 +1503,16 @@ col_fill_in(packet_info *pinfo)
case COL_SRCIDX:
g_snprintf(pinfo->cinfo->col_buf[i], COL_MAX_LEN, "0x%x", pinfo->src_idx);
- pinfo->cinfo->col_buf[i][COL_MAX_LEN - 1] = '\0';
pinfo->cinfo->col_data[i] = pinfo->cinfo->col_buf[i];
break;
case COL_DSTIDX:
g_snprintf(pinfo->cinfo->col_buf[i], COL_MAX_LEN, "0x%x", pinfo->dst_idx);
- pinfo->cinfo->col_buf[i][COL_MAX_LEN - 1] = '\0';
pinfo->cinfo->col_data[i] = pinfo->cinfo->col_buf[i];
break;
case COL_VSAN:
g_snprintf(pinfo->cinfo->col_buf[i], COL_MAX_LEN, "%u", pinfo->vsan);
- pinfo->cinfo->col_buf[i][COL_MAX_LEN - 1] = '\0';
pinfo->cinfo->col_data[i] = pinfo->cinfo->col_buf[i];
break;
diff --git a/epan/frame_data.h b/epan/frame_data.h
index 197cf332bf..4f94f94dbd 100644
--- a/epan/frame_data.h
+++ b/epan/frame_data.h
@@ -58,7 +58,6 @@ typedef struct _frame_data {
unsigned int ref_time : 1; /* 1 = marked as a reference time frame, 0 = normal */
} flags;
void *color_filter; /* Per-packet matching color_filter_t object */
- col_expr_t col_expr; /* Column expressions & values */
} frame_data;
/*
diff --git a/file.c b/file.c
index 8efc014687..1f72fceedc 100644
--- a/file.c
+++ b/file.c
@@ -330,12 +330,6 @@ cf_reset_state(capture_file *cf)
cf->user_saved = FALSE;
if (cf->plist_chunk != NULL) {
- frame_data *fdata = cf->plist;
- while (fdata) {
- g_strfreev(fdata->col_expr.col_expr);
- g_strfreev(fdata->col_expr.col_expr_val);
- fdata = fdata->next;
- }
g_mem_chunk_destroy(cf->plist_chunk);
cf->plist_chunk = NULL;
}
@@ -1111,25 +1105,6 @@ add_packet_to_packet_list(frame_data *fdata, capture_file *cf,
/* This is the last frame we've seen so far. */
cf->last_displayed = fdata;
- /* XXX - GLIB1 implementation provided to support backport of this feature. */
-#if (GLIB_MAJOR_VERSION >= 2)
- fdata->col_expr.col_expr = g_strdupv(cf->cinfo.col_expr.col_expr);
- fdata->col_expr.col_expr_val = g_strdupv(cf->cinfo.col_expr.col_expr_val);
-#else
- {
- gint i;
-
- fdata->col_expr.col_expr = (gchar **) g_malloc(sizeof(gchar *) * (cf->cinfo.num_cols + 1));
- fdata->col_expr.col_expr_val = (gchar **) g_malloc(sizeof(gchar *) * (cf->cinfo.num_cols + 1));
-
- for (i=0; i <= cf->cinfo.num_cols; i++)
- {
- fdata->col_expr.col_expr[i] = g_strdup(cf->cinfo.col_expr.col_expr[i]);
- fdata->col_expr.col_expr_val[i] = g_strdup(cf->cinfo.col_expr.col_expr_val[i]);
- }
- }
-#endif
-
#ifdef NEW_PACKET_LIST
/* This function returns the color_t that was applied to the packet (in
* the old packet list). Applying the color to the packet is only done
@@ -1196,8 +1171,6 @@ read_packet(capture_file *cf, dfilter_t *dfcode,
fdata->flags.marked = 0;
fdata->flags.ref_time = 0;
fdata->color_filter = NULL;
- fdata->col_expr.col_expr = NULL;
- fdata->col_expr.col_expr_val = NULL;
fdata->abs_ts.secs = phdr->ts.secs;
fdata->abs_ts.nsecs = phdr->ts.nsecs;
@@ -1241,8 +1214,6 @@ read_packet(capture_file *cf, dfilter_t *dfcode,
...but, at least in one test I did, where I just made the chunk
a G_ALLOC_ONLY chunk and read in a huge capture file, it didn't
seem to save a noticeable amount of time or space. */
- g_strfreev(fdata->col_expr.col_expr);
- g_strfreev(fdata->col_expr.col_expr_val);
g_mem_chunk_free(cf->plist_chunk, fdata);
}
diff --git a/gtk/main.c b/gtk/main.c
index cc1020a3e0..04299b68fe 100644
--- a/gtk/main.c
+++ b/gtk/main.c
@@ -501,14 +501,37 @@ get_filter_from_packet_list_row_and_column(gpointer data)
gint row = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(data), E_MPACKET_LIST_ROW_KEY));
gint column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(data), E_MPACKET_LIST_COL_KEY));
frame_data *fdata = (frame_data *)packet_list_get_row_data(row);
-
- if(strlen(fdata->col_expr.col_expr[column]) != 0 &&
- strlen(fdata->col_expr.col_expr_val[column]) != 0)
- return ep_strdup_printf("%s == %s",
- fdata->col_expr.col_expr[column],
- fdata->col_expr.col_expr_val[column]);
- else
+ epan_dissect_t *edt;
+ gchar *buf=NULL;
+ int err;
+ gchar *err_info;
+
+ if (fdata != NULL) {
+ if (!wtap_seek_read(cfile.wth, fdata->file_off, &cfile.pseudo_header,
+ cfile.pd, fdata->cap_len, &err, &err_info)) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+ cf_read_error_message(err, err_info), cfile.filename);
return NULL;
+ }
+ /* proto tree, visible. We need a proto tree if there's custom columns */
+ edt = epan_dissect_new(have_custom_cols(&cfile.cinfo), FALSE);
+ col_custom_prime_edt(edt, &cfile.cinfo);
+
+ epan_dissect_run(edt, &cfile.pseudo_header, cfile.pd, fdata,
+ &cfile.cinfo);
+ epan_dissect_fill_in_columns(edt);
+
+ if (strlen(cfile.cinfo.col_expr.col_expr[column]) != 0 &&
+ strlen(cfile.cinfo.col_expr.col_expr_val[column]) != 0) {
+ /* leak a little but safer than ep_ here*/
+ buf = se_strdup_printf("%s == %s", cfile.cinfo.col_expr.col_expr[column],
+ cfile.cinfo.col_expr.col_expr_val[column]);
+ }
+
+ epan_dissect_free(edt);
+ }
+
+ return buf;
}
void