|
|
@@ -1504,8 +1504,10 @@ int pevent_update_trivial(struct event_filter *dest, struct event_filter *source
|
|
|
* @type: remove only true, false, or both
|
|
|
*
|
|
|
* Removes filters that only contain a TRUE or FALES boolean arg.
|
|
|
+ *
|
|
|
+ * Returns 0 on success and -1 if there was a problem.
|
|
|
*/
|
|
|
-void pevent_filter_clear_trivial(struct event_filter *filter,
|
|
|
+int pevent_filter_clear_trivial(struct event_filter *filter,
|
|
|
enum filter_trivial_type type)
|
|
|
{
|
|
|
struct filter_type *filter_type;
|
|
|
@@ -1514,13 +1516,15 @@ void pevent_filter_clear_trivial(struct event_filter *filter,
|
|
|
int i;
|
|
|
|
|
|
if (!filter->filters)
|
|
|
- return;
|
|
|
+ return 0;
|
|
|
|
|
|
/*
|
|
|
* Two steps, first get all ids with trivial filters.
|
|
|
* then remove those ids.
|
|
|
*/
|
|
|
for (i = 0; i < filter->filters; i++) {
|
|
|
+ int *new_ids;
|
|
|
+
|
|
|
filter_type = &filter->event_filters[i];
|
|
|
if (filter_type->filter->type != FILTER_ARG_BOOLEAN)
|
|
|
continue;
|
|
|
@@ -1535,19 +1539,24 @@ void pevent_filter_clear_trivial(struct event_filter *filter,
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- ids = realloc(ids, sizeof(*ids) * (count + 1));
|
|
|
- if (!ids)
|
|
|
- die("Can't allocate ids");
|
|
|
+ new_ids = realloc(ids, sizeof(*ids) * (count + 1));
|
|
|
+ if (!new_ids) {
|
|
|
+ free(ids);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ ids = new_ids;
|
|
|
ids[count++] = filter_type->event_id;
|
|
|
}
|
|
|
|
|
|
if (!count)
|
|
|
- return;
|
|
|
+ return 0;
|
|
|
|
|
|
for (i = 0; i < count; i++)
|
|
|
pevent_filter_remove_event(filter, ids[i]);
|
|
|
|
|
|
free(ids);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/**
|