1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef __PERF_STRFILTER_H |
3 | #define __PERF_STRFILTER_H |
4 | /* General purpose glob matching filter */ |
5 | |
6 | #include <linux/list.h> |
7 | #include <stdbool.h> |
8 | |
9 | /* A node of string filter */ |
10 | struct strfilter_node { |
11 | struct strfilter_node *l; /* Tree left branch (for &,|) */ |
12 | struct strfilter_node *r; /* Tree right branch (for !,&,|) */ |
13 | const char *p; /* Operator or rule */ |
14 | }; |
15 | |
16 | /* String filter */ |
17 | struct strfilter { |
18 | struct strfilter_node *root; |
19 | }; |
20 | |
21 | /** |
22 | * strfilter__new - Create a new string filter |
23 | * @rules: Filter rule, which is a combination of glob expressions. |
24 | * @err: Pointer which points an error detected on @rules |
25 | * |
26 | * Parse @rules and return new strfilter. Return NULL if an error detected. |
27 | * In that case, *@err will indicate where it is detected, and *@err is NULL |
28 | * if a memory allocation is failed. |
29 | */ |
30 | struct strfilter *strfilter__new(const char *rules, const char **err); |
31 | |
32 | /** |
33 | * strfilter__or - Append an additional rule by logical-or |
34 | * @filter: Original string filter |
35 | * @rules: Filter rule to be appended at left of the root of |
36 | * @filter by using logical-or. |
37 | * @err: Pointer which points an error detected on @rules |
38 | * |
39 | * Parse @rules and join it to the @filter by using logical-or. |
40 | * Return 0 if success, or return the error code. |
41 | */ |
42 | int strfilter__or(struct strfilter *filter, |
43 | const char *rules, const char **err); |
44 | |
45 | /** |
46 | * strfilter__add - Append an additional rule by logical-and |
47 | * @filter: Original string filter |
48 | * @rules: Filter rule to be appended at left of the root of |
49 | * @filter by using logical-and. |
50 | * @err: Pointer which points an error detected on @rules |
51 | * |
52 | * Parse @rules and join it to the @filter by using logical-and. |
53 | * Return 0 if success, or return the error code. |
54 | */ |
55 | int strfilter__and(struct strfilter *filter, |
56 | const char *rules, const char **err); |
57 | |
58 | /** |
59 | * strfilter__compare - compare given string and a string filter |
60 | * @filter: String filter |
61 | * @str: target string |
62 | * |
63 | * Compare @str and @filter. Return true if the str match the rule |
64 | */ |
65 | bool strfilter__compare(struct strfilter *filter, const char *str); |
66 | |
67 | /** |
68 | * strfilter__delete - delete a string filter |
69 | * @filter: String filter to delete |
70 | * |
71 | * Delete @filter. |
72 | */ |
73 | void strfilter__delete(struct strfilter *filter); |
74 | |
75 | /** |
76 | * strfilter__string - Reconstruct a rule string from filter |
77 | * @filter: String filter to reconstruct |
78 | * |
79 | * Reconstruct a rule string from @filter. This will be good for |
80 | * debug messages. Note that returning string must be freed afterward. |
81 | */ |
82 | char *strfilter__string(struct strfilter *filter); |
83 | |
84 | #endif |
85 | |