From didier gautheron via bug 3762:
This patch removes col_expr in frame_data structure, it can be recomputed when needed. svn path=/trunk/; revision=29159
This commit is contained in:
parent
8300e59b2f
commit
8c4abdfb47
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
/*
|
||||
|
|
29
file.c
29
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);
|
||||
}
|
||||
|
||||
|
|
35
gtk/main.c
35
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);
|
||||
epan_dissect_t *edt;
|
||||
gchar *buf=NULL;
|
||||
int err;
|
||||
gchar *err_info;
|
||||
|
||||
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
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue