• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 branche (for &,|) */
12  	struct strfilter_node *r;	/* Tree right branche (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