summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--colors.c23
-rw-r--r--dfilter-grammar.y24
-rw-r--r--dfilter-int.h3
-rw-r--r--dfilter.c137
-rw-r--r--dfilter.h10
-rw-r--r--file.c54
-rw-r--r--file.h8
-rw-r--r--gtk/file_dlg.c7
-rw-r--r--gtk/main.c36
-rw-r--r--summary.c6
10 files changed, 118 insertions, 190 deletions
diff --git a/colors.c b/colors.c
index 323b7dc513..7cd4074e61 100644
--- a/colors.c
+++ b/colors.c
@@ -1,7 +1,7 @@
/* colors.c
* Definitions for color structures and routines
*
- * $Id: colors.c,v 1.12 1999/10/07 22:50:44 guy Exp $
+ * $Id: colors.c,v 1.13 1999/10/11 06:39:02 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -116,9 +116,8 @@ colors_init(capture_file *cf)
new_color_filter(cf->colors, default_colors[i].proto, default_colors[i].proto);
color_filter(cf,i)->bg_color = color;
- color_filter(cf,i)->c_colorfilter = dfilter_new();
- if(dfilter_compile((color_filter(cf,i)->c_colorfilter),
- default_colors[i].proto) != 0){
+ color_filter(cf,i)->c_colorfilter = dfilter_compile(default_colors[i].proto);
+ if(color_filter(cf,i)->c_colorfilter == NULL){
simple_dialog(ESD_TYPE_WARN, NULL,
"Cannot compile default filter %s.\n%s",
default_colors[i].proto, dfilter_error_msg);
@@ -244,14 +243,11 @@ read_filters(capture_file *cf)
name, filter, &bg_r, &bg_g, &bg_b, &fg_r, &fg_g, &fg_b) == 8){
/* we got a filter */
- /* test the dfilter before putting it into the list of color dfilters */
- /*if(dfilter_compile((color_filter(cf,i)->c_colorfilter),filter) != 0){*/
- temp_dfilter = dfilter_new();
- if(dfilter_compile(temp_dfilter, filter) != 0){
+ temp_dfilter = dfilter_compile(filter);
+ if(temp_dfilter == NULL){
simple_dialog(ESD_TYPE_WARN, NULL,
"Could not compile filter %s from saved filters because\n%s",
name, dfilter_error_msg);
- dfilter_destroy(temp_dfilter);
continue;
}
new_color_filter(cf->colors, name, filter);
@@ -493,7 +489,7 @@ color_ok_cb (GtkButton *button,
/* colorize list */
- filter_packets(&cf);
+ colorize_packets(&cf);
gtk_container_remove(GTK_CONTAINER(GTK_WIDGET(cf.colors->color_filters)->parent),
cf.colors->color_filters);
gtk_widget_destroy(dialog);
@@ -507,7 +503,7 @@ color_apply_cb (GtkButton *button,
{
capture_file *cf;
cf = (capture_file *)user_data;
- filter_packets(cf);
+ colorize_packets(cf);
}
/* Exit dialog and do not process list */
@@ -593,12 +589,11 @@ colorize_ok_cb (GtkButton *button,
- compiled_filter = dfilter_new();
+ compiled_filter = dfilter_compile(filter_text);
- if( dfilter_compile( compiled_filter, filter_text) != 0 ){
+ if(compiled_filter == NULL ){
simple_dialog(ESD_TYPE_WARN, NULL, "Filter \"%s\" did not compile correctly.\n"
" Please try again. Filter unchanged.\n%s\n", filter_name,dfilter_error_msg);
- dfilter_destroy(compiled_filter);
} else {
if( color_filter(&cf, cf.colors->row_selected)->c_colorfilter != NULL)
diff --git a/dfilter-grammar.y b/dfilter-grammar.y
index 0677cb5e13..0f298bd2a0 100644
--- a/dfilter-grammar.y
+++ b/dfilter-grammar.y
@@ -3,7 +3,7 @@
/* dfilter-grammar.y
* Parser for display filters
*
- * $Id: dfilter-grammar.y,v 1.21 1999/10/11 03:03:10 guy Exp $
+ * $Id: dfilter-grammar.y,v 1.22 1999/10/11 06:39:04 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -94,14 +94,7 @@ static int ether_str_to_guint8_array(const char *s, guint8 *mac);
/* This is the dfilter we're currently processing. It's how
* dfilter_compile communicates with us.
*/
-dfilter *global_df = NULL;;
-
-/* list of GNodes allocated during parsing. If the parsing fails, we'll
- * use this list to free all the GNodes. If the parsing succeeds, we'll
- * just clear this list since dfilter_clear_filter() will take care of
- * freeing the GNodes when they're no longer needed.
- */
-GSList *gnode_slist = NULL;
+dfilter *global_df = NULL;
%}
@@ -369,7 +362,6 @@ dfilter_mknode_join(GNode *n1, enum node_type ntype, int operand, GNode *n2)
g_node_append(gnode_root, n1);
g_node_append(gnode_root, n2);
- gnode_slist = g_slist_append(gnode_slist, gnode_root);
return gnode_root;
}
@@ -389,7 +381,6 @@ dfilter_mknode_unary(int operand, GNode *n2)
gnode_root = g_node_new(node_root);
g_node_append(gnode_root, n2);
- gnode_slist = g_slist_append(gnode_slist, gnode_root);
return gnode_root;
}
@@ -408,7 +399,6 @@ dfilter_mknode_numeric_variable(gint id)
node->value.variable = id;
gnode = g_node_new(node);
- gnode_slist = g_slist_append(gnode_slist, gnode);
return gnode;
}
@@ -426,7 +416,6 @@ dfilter_mknode_ether_variable(gint id)
node->value.variable = id;
gnode = g_node_new(node);
- gnode_slist = g_slist_append(gnode_slist, gnode);
return gnode;
}
@@ -444,7 +433,6 @@ dfilter_mknode_ipxnet_variable(gint id)
node->value.variable = id;
gnode = g_node_new(node);
- gnode_slist = g_slist_append(gnode_slist, gnode);
return gnode;
}
@@ -462,7 +450,6 @@ dfilter_mknode_ipv4_variable(gint id)
node->value.variable = id;
gnode = g_node_new(node);
- gnode_slist = g_slist_append(gnode_slist, gnode);
return gnode;
}
@@ -482,7 +469,6 @@ dfilter_mknode_bytes_variable(gint id, gint offset, guint length)
node->length = length;
gnode = g_node_new(node);
- gnode_slist = g_slist_append(gnode_slist, gnode);
return gnode;
}
@@ -500,7 +486,6 @@ dfilter_mknode_numeric_value(guint32 val)
node->value.numeric = val;
gnode = g_node_new(node);
- gnode_slist = g_slist_append(gnode_slist, gnode);
return gnode;
}
@@ -528,7 +513,6 @@ dfilter_mknode_ether_value(gchar *byte_string)
}
gnode = g_node_new(node);
- gnode_slist = g_slist_append(gnode_slist, gnode);
return gnode;
}
@@ -546,7 +530,6 @@ dfilter_mknode_ipxnet_value(guint32 ipx_net_val)
node->value.numeric = ipx_net_val;
gnode = g_node_new(node);
- gnode_slist = g_slist_append(gnode_slist, gnode);
return gnode;
}
@@ -570,7 +553,6 @@ dfilter_mknode_ipv4_value(char *host)
node->value.numeric = htonl(node->value.numeric);
gnode = g_node_new(node);
- gnode_slist = g_slist_append(gnode_slist, gnode);
return gnode;
}
@@ -590,7 +572,6 @@ dfilter_mknode_bytes_value(GByteArray *barray)
node->length = barray->len;
gnode = g_node_new(node);
- gnode_slist = g_slist_append(gnode_slist, gnode);
return gnode;
}
@@ -620,7 +601,6 @@ dfilter_mknode_existence(gint id)
node->value.variable = id;
gnode = g_node_new(node);
- gnode_slist = g_slist_append(gnode_slist, gnode);
return gnode;
}
diff --git a/dfilter-int.h b/dfilter-int.h
index 213d9ccba6..e447701d2e 100644
--- a/dfilter-int.h
+++ b/dfilter-int.h
@@ -2,7 +2,7 @@
* Definitions for routines common to multiple modules in the display
* filter code, but not used outside that code.
*
- * $Id: dfilter-int.h,v 1.7 1999/10/11 03:03:11 guy Exp $
+ * $Id: dfilter-int.h,v 1.8 1999/10/11 06:39:04 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -34,7 +34,6 @@ void dfilter_scanner_cleanup(void);
/* in dfilter-grammar.y */
extern dfilter *global_df;
-extern GSList *gnode_slist;
/* Here we provide interfaces to make our scanner act and look like lex */
int dfilter_lex(void);
diff --git a/dfilter.c b/dfilter.c
index 5d162ccce4..9efbff124c 100644
--- a/dfilter.c
+++ b/dfilter.c
@@ -1,7 +1,7 @@
/* dfilter.c
* Routines for display filters
*
- * $Id: dfilter.c,v 1.25 1999/10/11 03:03:10 guy Exp $
+ * $Id: dfilter.c,v 1.26 1999/10/11 06:39:05 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -94,8 +94,6 @@ static GArray* get_values_from_ptree(dfilter_node *dnode, proto_tree *ptree, con
static GArray* get_values_from_dfilter(dfilter_node *dnode, GNode *gnode);
static gboolean check_existence_in_ptree(dfilter_node *dnode, proto_tree *ptree);
static void clear_byte_array(gpointer data, gpointer user_data);
-static void unlink_gnode_children(gpointer gnode_ptr, gpointer user_data);
-static void destroy_gnode(gpointer gnode_ptr, gpointer user_data);
/* this is not so pretty. I need my own g_array "function" (macro) to
* retreive the pointer to the data stored in an array cell. I need this
@@ -135,28 +133,28 @@ dfilter_cleanup(void)
* display filter each time, without having to clear any memory used, since
* dfilter_compile will take care of that automatically.
*
- * Returns 0 on success, non-zero on failure.
+ * Returns a pointer to a newly-allocated dfilter strucutre on success,
+ * NULL on failure.
* If a failure, dfilter_error_msg points to an appropriate error message.
* This error message is a global string, so another invocation of
* dfilter_compile will clear it. If the caller needs is stored, he
* needs to g_strdup it himself.
*/
-int
-dfilter_compile(dfilter *df, gchar *dfilter_text)
+dfilter*
+dfilter_compile(gchar *dfilter_text)
{
+ dfilter *df;
int retval;
g_assert(dfilter_text != NULL);
- dfilter_clear_filter(df);
- df->dftext = g_strdup(dfilter_text);
+ df = dfilter_new();
- /* tell the scanner to use this string as input */
- dfilter_scanner_text(df->dftext);
+ /* tell the scanner to use the filter string as input */
+ dfilter_scanner_text(dfilter_text);
/* Assign global variable so dfilter_parse knows which dfilter we're
- * talking about. Reset the global error message. We don't have to set
- * gnode_slist since it will always be NULL by the time we get here.
+ * talking about. Reset the global error message.
*/
global_df = df;
dfilter_error_msg = NULL;
@@ -183,42 +181,15 @@ dfilter_compile(dfilter *df, gchar *dfilter_text)
}
}
- /* Clear the list of allocated nodes */
- if (gnode_slist) {
- g_slist_free(gnode_slist);
- gnode_slist = NULL;
- }
-
- return retval;
-}
-
-/* clear the current filter, w/o clearing memchunk area which is where we'll
- * put new nodes in a future filter */
-void
-dfilter_clear_filter(dfilter *df)
-{
- if (!df)
- return;
-
- if (df->dftext)
- g_free(df->dftext);
-
- if (df->dftree != NULL)
- g_node_destroy(df->dftree);
-
- /* clear the memory that the tree was using for nodes */
- if (df->node_memchunk)
- g_mem_chunk_reset(df->node_memchunk);
+ /* Set global_df to NULL just to be tidy. */
+ global_df = NULL;
- /* clear the memory that the tree was using for byte arrays */
- if (df->list_of_byte_arrays) {
- g_slist_foreach(df->list_of_byte_arrays, clear_byte_array, NULL);
- g_slist_free(df->list_of_byte_arrays);
+ if (retval == 0)
+ return df;
+ else {
+ dfilter_destroy(df);
+ return NULL;
}
-
- df->dftext = NULL;
- df->dftree = NULL;
- df->list_of_byte_arrays = NULL;
}
/* Allocates new dfilter, initializes values, and returns pointer to dfilter */
@@ -229,7 +200,6 @@ dfilter_new(void)
df = g_malloc(sizeof(dfilter));
- df->dftext = NULL;
df->dftree = NULL;
df->node_memchunk = g_mem_chunk_new("df->node_memchunk",
sizeof(dfilter_node), 20 * sizeof(dfilter_node), G_ALLOC_ONLY);
@@ -245,7 +215,21 @@ dfilter_destroy(dfilter *df)
if (!df)
return;
- dfilter_clear_filter(df);
+ if (df->dftree != NULL)
+ g_node_destroy(df->dftree);
+
+ /* clear the memory that the tree was using for nodes */
+ if (df->node_memchunk)
+ g_mem_chunk_reset(df->node_memchunk);
+
+ /* clear the memory that the tree was using for byte arrays */
+ if (df->list_of_byte_arrays) {
+ g_slist_foreach(df->list_of_byte_arrays, clear_byte_array, NULL);
+ g_slist_free(df->list_of_byte_arrays);
+ }
+
+ df->dftree = NULL;
+ df->list_of_byte_arrays = NULL;
/* Git rid of memchunk */
if (df->node_memchunk)
@@ -267,64 +251,25 @@ clear_byte_array(gpointer data, gpointer user_data)
void
dfilter_error(char *s)
{
- /* The only data we have to worry about freeing is the
- * data used by any GNodes that were allocated during
- * parsing. The data in those Gnodes will be cleared
- * later via df->node_memchunk. Use gnode_slist to
- * clear the GNodes, and set global_df to NULL just
- * to be tidy.
- */
- global_df = NULL;
-
- /* I don't want to call g_node_destroy on each GNode ptr,
- * since that function frees any children. That could
- * mess me up later in the list if I try to free a GNode
- * that has already been freed. So, I'll unlink the
- * children firs,t then call g_node_destroy on each GNode ptr.
- */
- if (!gnode_slist)
- return;
-
- g_slist_foreach(gnode_slist, unlink_gnode_children, NULL);
- g_slist_foreach(gnode_slist, destroy_gnode, NULL);
-
- /* notice we don't clear gnode_slist itself. dfilter_compile()
- * will take care of that.
- */
}
/* Called when an error other than a parsing error occurs. */
void
dfilter_fail(char *format, ...)
{
- va_list ap;
+ va_list ap;
- /* If we've already reported one error, don't overwrite it with this
- * one. */
- if (dfilter_error_msg != NULL)
- return;
-
- va_start(ap, format);
- vsnprintf(dfilter_error_msg_buf, sizeof dfilter_error_msg_buf, format, ap);
- dfilter_error_msg = dfilter_error_msg_buf;
- va_end(ap);
-}
-
-static void
-unlink_gnode_children(gpointer gnode_ptr, gpointer user_data)
-{
- if (gnode_ptr)
- g_node_unlink((GNode*) gnode_ptr);
-}
+ /* If we've already reported one error, don't overwrite it with this
+ * one. */
+ if (dfilter_error_msg != NULL)
+ return;
-static void
-destroy_gnode(gpointer gnode_ptr, gpointer user_data)
-{
- if (gnode_ptr)
- g_node_destroy((GNode*) gnode_ptr);
+ va_start(ap, format);
+ vsnprintf(dfilter_error_msg_buf, sizeof dfilter_error_msg_buf, format, ap);
+ dfilter_error_msg = dfilter_error_msg_buf;
+ va_end(ap);
}
-
/* lookup an abbreviation in our token tree, returing the ID #
* If the abbreviation doesn't exit, returns -1 */
int dfilter_lookup_token(char *abbrev)
diff --git a/dfilter.h b/dfilter.h
index c42676061a..f0c6f18a3b 100644
--- a/dfilter.h
+++ b/dfilter.h
@@ -1,7 +1,7 @@
/* dfilter.h
* Definitions for display filters
*
- * $Id: dfilter.h,v 1.10 1999/08/26 06:20:49 gram Exp $
+ * $Id: dfilter.h,v 1.11 1999/10/11 06:39:04 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -26,7 +26,7 @@
#ifndef __DFILTER_H__
#define __DFILTER_H__
-#define DFILTER_CONTAINS_FILTER(x) ((x)->dftree)
+#define DFILTER_CONTAINS_FILTER(x) ((x) != NULL && (x)->dftree)
/* dfilter_error_msg is NULL if there was no error during dfilter_compile,
* otherwise it points to a displayable error message. */
@@ -36,7 +36,6 @@ extern gchar dfilter_error_msg_buf[1024];
typedef struct {
GNode *dftree;
- gchar *dftext;
/* space for dfilter_nodes */
GMemChunk *node_memchunk;
@@ -59,12 +58,9 @@ dfilter* dfilter_new(void);
void dfilter_destroy(dfilter *df);
/* Compile display filter text */
-int dfilter_compile(dfilter* df, gchar* dfilter_text);
+dfilter* dfilter_compile(gchar* dfilter_text);
/* Apply compiled dfilter to a proto_tree */
gboolean dfilter_apply(dfilter *df, proto_tree *ptree, const guint8* pd);
-/* Clears the current filter int the dfilter */
-void dfilter_clear_filter(dfilter *df);
-
#endif /* ! __DFILTER_H__ */
diff --git a/file.c b/file.c
index ccc84f2fba..cadd519754 100644
--- a/file.c
+++ b/file.c
@@ -1,7 +1,7 @@
/* file.c
* File I/O routines
*
- * $Id: file.c,v 1.104 1999/10/10 11:50:38 sharpe Exp $
+ * $Id: file.c,v 1.105 1999/10/11 06:39:06 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -771,25 +771,57 @@ wtap_dispatch_cb(u_char *user, const struct wtap_pkthdr *phdr, int offset,
}
void
-filter_packets(capture_file *cf)
+filter_packets(capture_file *cf, gchar *dftext)
{
- frame_data *fd;
- guint32 progbar_quantum;
- guint32 progbar_nextstep;
+ dfilter *dfcode;
- if (cf->dfilter == NULL) {
- dfilter_clear_filter(cf->dfcode);
- }
- else {
+ if (dftext == NULL) {
+ /* The new filter is an empty filter (i.e., display all packets). */
+ dfcode = NULL;
+ } else {
/*
- * Compile the filter.
+ * We have a filter; try to compile it.
*/
- if (dfilter_compile(cf->dfcode, cf->dfilter) != 0) {
+ dfcode = dfilter_compile(dftext);
+ if (dfcode == NULL) {
simple_dialog(ESD_TYPE_WARN, NULL, dfilter_error_msg);
return;
}
+
+ /* Was it empty? */
+ if (dfcode->dftree == NULL) {
+ /* Yes - free the filter text and filter code, and set them to
+ NULL. */
+ g_free(dftext);
+ dftext = NULL;
+ dfilter_destroy(dfcode);
+ dfcode = NULL;
+ }
}
+ /* We have a valid filter. Replace the current filter. */
+ if (cf->dfilter != NULL)
+ g_free(cf->dfilter);
+ cf->dfilter = dftext;
+ if (cf->dfcode != NULL)
+ dfilter_destroy(cf->dfcode);
+ cf->dfcode = dfcode;
+
+ /* Now go through the list of packets we've read from the capture file,
+ applying the current display filter, and, if the packet passes the
+ display filter, add it to the summary display, appropriately
+ colored. (That's how we colorize the display - it's like filtering
+ the display, only we don't install a new filter.) */
+ colorize_packets(cf);
+}
+
+void
+colorize_packets(capture_file *cf)
+{
+ frame_data *fd;
+ guint32 progbar_quantum;
+ guint32 progbar_nextstep;
+
gtk_progress_set_activity_mode(GTK_PROGRESS(prog_bar), FALSE);
/* Freeze the packet list while we redo it, so we don't get any
diff --git a/file.h b/file.h
index 031ed6aaa0..39ba7b0f2e 100644
--- a/file.h
+++ b/file.h
@@ -1,7 +1,7 @@
/* file.h
* Definitions for file structures and routines
*
- * $Id: file.h,v 1.48 1999/10/02 20:23:53 guy Exp $
+ * $Id: file.h,v 1.49 1999/10/11 06:39:03 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -104,9 +104,6 @@ typedef struct _capture_file {
wtap *wth; /* Wiretap session */
dfilter *rfcode; /* Compiled read filter program */
gchar *dfilter; /* Display filter string */
-#if 0
- GNode *dfcode; /* Compiled display filter program */
-#endif
colfilter *colors; /* Colors for colorizing packet window */
dfilter *dfcode; /* Compiled display filter program */
#ifdef HAVE_LIBPCAP
@@ -130,8 +127,9 @@ int read_cap_file(capture_file *);
int tail_cap_file(char *, capture_file *);
/* size_t read_frame_header(capture_file *); */
+void filter_packets(capture_file *cf, gchar *dfilter);
+void colorize_packets(capture_file *);
int print_packets(capture_file *cf, print_args_t *print_args);
-void filter_packets(capture_file *);
void change_time_formats(capture_file *);
void select_packet(capture_file *, int);
void unselect_packet(capture_file *);
diff --git a/gtk/file_dlg.c b/gtk/file_dlg.c
index f7e8c7c3d4..571dd1c47f 100644
--- a/gtk/file_dlg.c
+++ b/gtk/file_dlg.c
@@ -1,7 +1,7 @@
/* file_dlg.c
* Dialog boxes for handling files
*
- * $Id: file_dlg.c,v 1.8 1999/10/08 07:31:10 guy Exp $
+ * $Id: file_dlg.c,v 1.9 1999/10/11 06:39:25 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -122,10 +122,9 @@ file_open_ok_cb(GtkWidget *w, GtkFileSelection *fs) {
filter_te = gtk_object_get_data(GTK_OBJECT(w), E_RFILTER_TE_KEY);
rfilter = gtk_entry_get_text(GTK_ENTRY(filter_te));
if (rfilter[0] != '\0') {
- rfcode = dfilter_new();
- if (dfilter_compile(rfcode, rfilter) != 0) {
+ rfcode = dfilter_compile(rfilter);
+ if (rfcode != NULL) {
simple_dialog(ESD_TYPE_WARN, NULL, dfilter_error_msg);
- dfilter_destroy(rfcode);
return;
}
}
diff --git a/gtk/main.c b/gtk/main.c
index 59a0a26f0f..14c219fdf4 100644
--- a/gtk/main.c
+++ b/gtk/main.c
@@ -1,6 +1,6 @@
/* main.c
*
- * $Id: main.c,v 1.18 1999/10/09 14:05:04 deniel Exp $
+ * $Id: main.c,v 1.19 1999/10/11 06:39:26 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -162,6 +162,7 @@ follow_stream_cb( GtkWidget *w, gpointer data ) {
char filename1[128+1];
GtkWidget *streamwindow, *box, *text, *vscrollbar, *table;
int tmp_fd;
+ gchar *follow_filter;
if( pi.ipproto == 6 ) {
/* we got tcp so we can follow */
@@ -191,10 +192,10 @@ follow_stream_cb( GtkWidget *w, gpointer data ) {
/* Create a new filter that matches all packets in the TCP stream,
and set the display filter entry accordingly */
reset_tcp_reassembly();
- cf.dfilter = build_follow_filter( &pi );
+ follow_filter = build_follow_filter( &pi );
/* Run the display filter so it goes in effect. */
- filter_packets(&cf);
+ filter_packets(&cf, follow_filter);
/* the data_out_file should now be full of the streams information */
fclose( data_out_file );
@@ -317,17 +318,12 @@ match_selected_cb(GtkWidget *w, gpointer data)
}
}
- if( cf.dfilter != NULL ) {
- /* get rid of this one */
- g_free( cf.dfilter );
- }
/* create a new one and set the display filter entry accordingly */
- cf.dfilter = buf;
if (filter_te) {
- gtk_entry_set_text(GTK_ENTRY(filter_te), cf.dfilter);
+ gtk_entry_set_text(GTK_ENTRY(filter_te), buf);
}
/* Run the display filter so it goes in effect. */
- filter_packets(&cf);
+ filter_packets(&cf, buf);
}
/* Run the current display filter on the current packet set, and
@@ -337,18 +333,7 @@ filter_activate_cb(GtkWidget *w, gpointer data)
{
char *s = gtk_entry_get_text(GTK_ENTRY(w));
- if (cf.dfilter)
- g_free(cf.dfilter);
-
- /* simple check for empty string. XXX - need to modify to search for /^\s+$/ */
- if (s[0] == '\0' ) {
- cf.dfilter = NULL;
- }
- else {
- cf.dfilter = g_strdup(s);
- }
-
- filter_packets(&cf);
+ filter_packets(&cf, g_strdup(s));
}
/* What to do when a list item is selected/unselected */
@@ -522,7 +507,7 @@ main(int argc, char *argv[])
cf.fh = NULL;
cf.rfcode = NULL;
cf.dfilter = NULL;
- cf.dfcode = dfilter_new();
+ cf.dfcode = NULL;
#ifdef HAVE_LIBPCAP
cf.cfilter = NULL;
#endif
@@ -876,10 +861,9 @@ main(int argc, char *argv[])
up on top of us. */
if (cf_name) {
if (rfilter != NULL) {
- rfcode = dfilter_new();
- if (dfilter_compile(rfcode, rfilter) != 0) {
+ rfcode = dfilter_compile(rfilter);
+ if (rfcode == NULL) {
simple_dialog(ESD_TYPE_WARN, NULL, dfilter_error_msg);
- dfilter_destroy(rfcode);
rfilter_parse_failed = TRUE;
}
}
diff --git a/summary.c b/summary.c
index 9375ce8bd1..77a0b23162 100644
--- a/summary.c
+++ b/summary.c
@@ -1,7 +1,7 @@
/* summary.c
* Routines for capture file summary window
*
- * $Id: summary.c,v 1.12 1999/09/09 02:42:26 gram Exp $
+ * $Id: summary.c,v 1.13 1999/10/11 06:39:01 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -249,8 +249,8 @@ traffic_bytes/seconds);
add_string_to_box(string_buff, capture_box);
/* Display filter */
- if (DFILTER_CONTAINS_FILTER(cf.dfcode)) {
- snprintf(string_buff, SUM_STR_MAX, "Display filter: %s", cf.dfcode->dftext);
+ if (cf.dfilter) {
+ snprintf(string_buff, SUM_STR_MAX, "Display filter: %s", cf.dfilter);
} else {
sprintf(string_buff, "Display filter: none");
}