X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Ffilter.c;h=06c8370c8f8ce960bfcc7f18f1bcc05f947f9993;hb=826f1ab264718e5e4c6b101557cd205422d3d20b;hp=604339c9b83d10d26f597e866885c1d122791cb7;hpb=72911c5d83d73a7dbe06c505fb7723b0713066fc;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/filter.c b/ltt/branches/poly/lttv/lttv/filter.c index 604339c9..06c8370c 100644 --- a/ltt/branches/poly/lttv/lttv/filter.c +++ b/ltt/branches/poly/lttv/lttv/filter.c @@ -63,6 +63,10 @@ * - remove the idle expressions in the tree */ +#ifdef HAVE_CONFIG_H +#include +#endif + //#define TEST #ifdef TEST #include @@ -70,6 +74,9 @@ #endif #include +#include +#include +#include /** * @fn LttvSimpleExpression* lttv_simple_expression_new() @@ -105,7 +112,7 @@ lttv_simple_expression_assign_field(GPtrArray* fp, LttvSimpleExpression* se) { GString* f = NULL; if(fp->len < 2) return FALSE; - g_assert(f=g_ptr_array_remove_index(fp,0)); + g_assert((f=g_ptr_array_remove_index(fp,0))); /* * Parse through the specified @@ -372,7 +379,6 @@ lttv_simple_expression_assign_value(LttvSimpleExpression* se, char* value) { gboolean is_double = FALSE; LttTime t = ltt_time_zero; GString* v; - GQuark quark; switch(se->field) { /* @@ -417,14 +423,14 @@ lttv_simple_expression_assign_value(LttvSimpleExpression* se, char* value) { /* cannot specify number with more than one '.' */ if(is_double) return FALSE; else is_double = TRUE; - t.tv_sec = atoi(v); + t.tv_sec = atoi(v->str); g_string_free(v,TRUE); v = g_string_new(""); } else g_string_append_c(v,value[i]); } /* number can be integer or double */ - if(is_double) t.tv_nsec = atoi(v); - else t.tv_sec = atoi(v); + if(is_double) t.tv_nsec = atoi(v->str); + else t.tv_sec = atoi(v->str); g_string_free(v,TRUE); @@ -588,7 +594,7 @@ gboolean lttv_apply_op_eq_string(const gpointer v1, LttvFieldValue v2) { */ gboolean lttv_apply_op_eq_quark(const gpointer v1, LttvFieldValue v2) { GQuark* r = (GQuark*) v1; - g_print("v1:%i v2:%i\n",*r,v2.v_uint32); +// g_print("v1:%i v2:%i\n",*r,v2.v_uint32); return (*r == v2.v_uint32); } @@ -1042,7 +1048,9 @@ lttv_filter_tree_clone(const LttvFilterTree* tree) { */ LttvFilter* lttv_filter_clone(const LttvFilter* filter) { - + + if(!filter) return NULL; + LttvFilter* newfilter = g_new(LttvFilter,1); strcpy(newfilter->expression,filter->expression); @@ -1190,15 +1198,8 @@ lttv_filter_update(LttvFilter* filter) { t3->node = LTTV_LOGICAL_NOT; t2->left = LTTV_TREE_NODE; t2->l_child.t = t3; -// g_print("%i\n",t2->left); -// g_print("*************************************\n"); -// lttv_print_tree(t2,0); -// g_print("*************************************\n"); -// lttv_print_tree(t3,0); -// g_print("*************************************\n"); t2 = t3; not = 0; -// g_print("ici t1:%p t2:%p t3:%p\n",t1,t2,t3); } if(subtree != NULL) { /* append subtree to current tree */ t2->left = LTTV_TREE_NODE; @@ -1493,8 +1494,12 @@ lttv_filter_update(LttvFilter* filter) { void lttv_filter_destroy(LttvFilter* filter) { - g_free(filter->expression); - lttv_filter_tree_destroy(filter->head); + if(!filter) return; + + if(filter->expression) + g_free(filter->expression); + if(filter->head) + lttv_filter_tree_destroy(filter->head); g_free(filter); } @@ -1534,6 +1539,7 @@ lttv_filter_append_expression(LttvFilter* filter, const char *expression) { if(expression == NULL) return FALSE; if(filter == NULL) return FALSE; + if(expression[0] == '\0') return FALSE; /* Empty expression */ GString* s = g_string_new(""); if(filter->expression != NULL) { @@ -1673,7 +1679,8 @@ lttv_filter_tree_parse( else if(t->right == LTTV_TREE_LEAF) { rresult = lttv_filter_tree_parse_branch(t->r_child.leaf,event,tracefile,trace,state,context); } - + + /* * Apply and return the * logical link between the @@ -1722,16 +1729,14 @@ lttv_filter_tree_parse_branch( case LTTV_FILTER_TRACE_NAME: if(trace == NULL) return TRUE; else { - char* trace_name = ltt_trace_name(trace); - GQuark quark = g_quark_from_string(trace_name); + GQuark quark = ltt_trace_name(trace); return se->op((gpointer)&quark,v); } break; case LTTV_FILTER_TRACEFILE_NAME: if(tracefile == NULL) return TRUE; else { - char* tracefile_name = ltt_tracefile_name(tracefile); - GQuark quark = g_quark_from_string(tracefile_name); + GQuark quark = ltt_tracefile_name(tracefile); return se->op((gpointer)&quark,v); } break; @@ -1790,8 +1795,7 @@ lttv_filter_tree_parse_branch( else { LttEventType* et; et = ltt_event_eventtype(event); - char* event_name = ltt_eventtype_name(et); - GQuark quark = g_quark_from_string(event_name); + GQuark quark = ltt_eventtype_name(et); return se->op((gpointer)&quark,v); } break;