aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-02-15 22:54:44 -0500
committerSteven Rostedt <rostedt@goodmis.org>2010-02-15 22:54:44 -0500
commit4c56b91a773279bedf4e9ec945cf7eca0959f976 (patch)
tree169b16ce56430d4c3ddc9a00b5405941f4b22625
parent67add772f442fd05ca8f97dc7149f10a6846ba88 (diff)
parse-events: Make filter add just events without filter
Let the filter string contain just events. This will make all records that have this event match. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--parse-filter.c56
1 files changed, 43 insertions, 13 deletions
diff --git a/parse-filter.c b/parse-filter.c
index 156b7e9..3cfcb4a 100644
--- a/parse-filter.c
+++ b/parse-filter.c
@@ -518,18 +518,16 @@ process_not(struct event_format *event, struct filter_arg **parg,
518 return type; 518 return type;
519} 519}
520 520
521static int filter_event(struct event_filter *filter, 521static int
522 struct event_format *event, 522process_event(struct event_format *event, const char *filter_str,
523 const char *filter_str, char **error_str) 523 struct filter_arg **parg, char **error_str)
524{ 524{
525 struct filter_type *filter_type;
526 enum event_type type; 525 enum event_type type;
527 struct filter_arg *arg;
528 char *token; 526 char *token;
529 527
530 pevent_buffer_init(filter_str, strlen(filter_str)); 528 pevent_buffer_init(filter_str, strlen(filter_str));
531 529
532 type = process_token(event, &arg, &token, error_str, 1); 530 type = process_token(event, parg, &token, error_str, 1);
533 531
534 if (type == EVENT_ERROR) 532 if (type == EVENT_ERROR)
535 return -1; 533 return -1;
@@ -539,9 +537,31 @@ static int filter_event(struct event_filter *filter,
539 "Expected end where %s was found", 537 "Expected end where %s was found",
540 token); 538 token);
541 free_token(token); 539 free_token(token);
542 free_arg(arg); 540 free_arg(*parg);
541 *parg = NULL;
543 return -1; 542 return -1;
544 } 543 }
544 return 0;
545}
546
547static int filter_event(struct event_filter *filter,
548 struct event_format *event,
549 const char *filter_str, char **error_str)
550{
551 struct filter_type *filter_type;
552 struct filter_arg *arg;
553 int ret;
554
555 if (filter_str) {
556 ret = process_event(event, filter_str, &arg, error_str);
557 if (ret < 0)
558 return ret;
559 } else {
560 /* just add a TRUE arg */
561 arg = allocate_arg();
562 arg->type = FILTER_ARG_BOOLEAN;
563 arg->bool.value = FILTER_TRUE;
564 }
545 565
546 filter_type = add_filter_type(filter, event->id); 566 filter_type = add_filter_type(filter, event->id);
547 if (filter_type->filter) 567 if (filter_type->filter)
@@ -577,25 +597,35 @@ int pevent_filter_add_filter_str(struct event_filter *filter,
577 char *sys_name = NULL; 597 char *sys_name = NULL;
578 char *token; 598 char *token;
579 int rtn = 0; 599 int rtn = 0;
600 int len;
580 int ret; 601 int ret;
581 602
582 if (error_str) 603 if (error_str)
583 *error_str = NULL; 604 *error_str = NULL;
584 605
585 filter_start = strchr(filter_str, ':'); 606 filter_start = strchr(filter_str, ':');
586 if (!filter_start) { 607 if (filter_start) {
587 show_error(error_str, "No filter found"); 608 len = filter_start - filter_str;
588 return -1; 609 filter_start++;
589 } 610 } else
611 len = strlen(filter_str);
590 612
591 pevent_buffer_init(filter_str, filter_start - filter_str); 613 pevent_buffer_init(filter_str, len);
592 614
593 again: 615 again:
594 type = read_token(&token); 616 type = read_token(&token);
617 if (type == EVENT_NONE) {
618 show_error(error_str, "No filter found");
619 /* This can only happen when events is NULL, but still */
620 free_events(events);
621 return -1;
622 }
623
595 if (type != EVENT_ITEM) { 624 if (type != EVENT_ITEM) {
596 show_error(error_str, "Expected an event name but got %s", 625 show_error(error_str, "Expected an event name but got %s",
597 token); 626 token);
598 free_token(token); 627 free_token(token);
628 free_events(events);
599 return -1; 629 return -1;
600 } 630 }
601 631
@@ -657,7 +687,7 @@ int pevent_filter_add_filter_str(struct event_filter *filter,
657 687
658 /* filter starts here */ 688 /* filter starts here */
659 for (event = events; event; event = event->next) { 689 for (event = events; event; event = event->next) {
660 ret = filter_event(filter, event->event, filter_start + 1, 690 ret = filter_event(filter, event->event, filter_start,
661 error_str); 691 error_str);
662 /* Failures are returned if a parse error happened */ 692 /* Failures are returned if a parse error happened */
663 if (ret < 0) 693 if (ret < 0)