aboutsummaryrefslogtreecommitdiffstats
path: root/dfilter-grammar.y
diff options
context:
space:
mode:
authorGilbert Ramirez <gram@alumni.rice.edu>1999-08-13 23:47:43 +0000
committerGilbert Ramirez <gram@alumni.rice.edu>1999-08-13 23:47:43 +0000
commitab6490398c47842880a96cef88161a535f825aa1 (patch)
tree8d1cb07df40b15146867574b7a920c1df7eb572c /dfilter-grammar.y
parenta5acc58fe3e5d2b5e8dde83ccda2ad5b5f3246c8 (diff)
Moved global memory alloction used in display filters (which was stored
in dfilter-grammar.y) to a new struct dfilter. Display filters now have their own struct, rather than simply being GNode's. This allows multiple display filters to exist at once, aiding John McDermott in his work on colorization. svn path=/trunk/; revision=480
Diffstat (limited to 'dfilter-grammar.y')
-rw-r--r--dfilter-grammar.y79
1 files changed, 24 insertions, 55 deletions
diff --git a/dfilter-grammar.y b/dfilter-grammar.y
index 47cb4738a9..8fe13809c0 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.8 1999/08/12 21:16:31 guy Exp $
+ * $Id: dfilter-grammar.y,v 1.9 1999/08/13 23:47:39 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -67,7 +67,6 @@
#include "resolv.h"
#endif
-void dfilter_yacc_init(void);
static GNode* dfilter_mknode_join(GNode *n1, enum node_type ntype, int operand, GNode *n2);
static GNode* dfilter_mknode_unary(int operand, GNode *n2);
static GNode* dfilter_mknode_numeric_variable(gint id);
@@ -86,15 +85,10 @@ static GNode* dfilter_mknode_boolean_variable(gint id);
static guint32 string_to_value(char *s);
-/* space for dfilter_nodes */
-GMemChunk *gmc_dfilter_nodes = NULL;
-
-/* this is how we pass display filter tree (dfcode) back to calling routine */
-GNode *dfilter_tree = NULL;
-
-/* list of byte arrays we allocate during parse. We can traverse this list
- * faster than the tree when we go back and free the byte arrays */
-GSList *dfilter_list_byte_arrays = NULL;
+/* This is the dfilter we're currently processing. It's how
+ * dfilter_compile communicates with us.
+ */
+dfilter *global_df = NULL;;
%}
@@ -155,9 +149,9 @@ GSList *dfilter_list_byte_arrays = NULL;
statement: expression
{
- dfilter_tree = $1;
+ global_df->dftree = $1;
}
- | /* NULL */ { dfilter_tree = NULL; }
+ | /* NULL */ { global_df->dftree = NULL; }
;
expression: '(' expression ')' { $$ = $2; }
@@ -262,7 +256,7 @@ bytes_value: T_VAL_BYTES
{ /* one or 4 bytes */
GByteArray *barray;
- /* the next function appends to dfilter_list_byte_arrays for me */
+ /* the next function appends to list_of_byte_arrays for me */
barray = byte_str_to_guint8_array($1);
$$ = dfilter_mknode_bytes_value(barray);
g_free($1);
@@ -272,7 +266,7 @@ bytes_value: T_VAL_BYTES
{ /* 6 bytes */
GByteArray *barray = g_byte_array_new();
- dfilter_list_byte_arrays = g_slist_append(dfilter_list_byte_arrays, barray);
+ global_df->list_of_byte_arrays = g_slist_append(global_df->list_of_byte_arrays, barray);
g_byte_array_append(barray, $1, 6);
$$ = dfilter_mknode_bytes_value(barray);
}
@@ -341,38 +335,13 @@ bytes_relation: TOK_EQ { $$ = TOK_EQ; }
%%
-void
-dfilter_yacc_init(void)
-{
- if (gmc_dfilter_nodes)
- g_mem_chunk_destroy(gmc_dfilter_nodes);
-
- gmc_dfilter_nodes = g_mem_chunk_new("gmc_dfilter_nodes",
- sizeof(dfilter_node), 50 * sizeof(dfilter_node),
- G_ALLOC_ONLY);
-
- if (dfilter_list_byte_arrays) {
- /* clear the byte arrays */
- g_slist_free(dfilter_list_byte_arrays);
- }
-
-}
-
-void
-dfilter_yacc_cleanup(void)
-{
- if (gmc_dfilter_nodes)
- g_mem_chunk_destroy(gmc_dfilter_nodes);
-}
-
-
static GNode*
dfilter_mknode_join(GNode *n1, enum node_type ntype, int operand, GNode *n2)
{
dfilter_node *node_root;
GNode *gnode_root;
- node_root = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node_root = g_mem_chunk_alloc(global_df->node_memchunk);
node_root->ntype = ntype;
node_root->elem_size = 0;
node_root->fill_array_func = NULL;
@@ -400,7 +369,7 @@ dfilter_mknode_unary(int operand, GNode *n2)
dfilter_node *node_root;
GNode *gnode_root;
- node_root = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node_root = g_mem_chunk_alloc(global_df->node_memchunk);
node_root->ntype = logical;
node_root->value.logical = operand;
node_root->elem_size = 0;
@@ -420,7 +389,7 @@ dfilter_mknode_numeric_variable(gint id)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = variable;
node->elem_size = sizeof(guint32);
node->fill_array_func = fill_array_numeric_variable;
@@ -437,7 +406,7 @@ dfilter_mknode_ether_variable(gint id)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = variable;
node->elem_size = sizeof(guint8) * 6;
node->fill_array_func = fill_array_ether_variable;
@@ -454,7 +423,7 @@ dfilter_mknode_ipxnet_variable(gint id)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = variable;
node->elem_size = sizeof(guint8) * 4;
node->fill_array_func = fill_array_numeric_variable; /* cheating ! */
@@ -471,7 +440,7 @@ dfilter_mknode_ipv4_variable(gint id)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = variable;
node->elem_size = sizeof(guint32);
node->fill_array_func = fill_array_numeric_variable; /* cheating ! */
@@ -488,7 +457,7 @@ dfilter_mknode_bytes_variable(gint id, gint offset, guint length)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = variable;
node->elem_size = sizeof(GByteArray*);
node->fill_array_func = fill_array_bytes_variable;
@@ -507,7 +476,7 @@ dfilter_mknode_boolean_variable(gint id)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = variable;
node->elem_size = sizeof(guint32);
node->fill_array_func = fill_array_boolean_variable; /* cheating ! */
@@ -524,7 +493,7 @@ dfilter_mknode_numeric_value(guint32 val)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = numeric;
node->elem_size = sizeof(guint32);
node->fill_array_func = fill_array_numeric_value;
@@ -541,7 +510,7 @@ dfilter_mknode_ether_value(guint8 *ether_bytes)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = ether;
node->elem_size = sizeof(guint8) * 6;
node->fill_array_func = fill_array_ether_value;
@@ -559,7 +528,7 @@ dfilter_mknode_ipxnet_value(guint32 ipx_net_val)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = ipxnet;
node->elem_size = sizeof(guint8) * 4;
node->fill_array_func = fill_array_numeric_value; /* cheating ! */
@@ -576,7 +545,7 @@ dfilter_mknode_ipv4_value(char *host)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = numeric;
node->elem_size = sizeof(guint32);
node->fill_array_func = fill_array_numeric_value; /* cheating ! */
@@ -594,7 +563,7 @@ dfilter_mknode_bytes_value(GByteArray *barray)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = bytes;
node->elem_size = sizeof(GByteArray*);
node->fill_array_func = fill_array_bytes_value;
@@ -613,7 +582,7 @@ dfilter_mknode_boolean_value(gint truth_value)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = numeric;
node->elem_size = sizeof(guint32);
node->fill_array_func = fill_array_boolean_value;
@@ -642,7 +611,7 @@ dfilter_mknode_existence(gint id)
dfilter_node *node;
GNode *gnode;
- node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node = g_mem_chunk_alloc(global_df->node_memchunk);
node->ntype = existence;
node->elem_size = sizeof(guint32);
node->fill_array_func = NULL;