1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#ifndef __PERF_STRFILTER_H 2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define __PERF_STRFILTER_H 3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* General purpose glob matching filter */ 4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <linux/list.h> 6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <stdbool.h> 7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* A node of string filter */ 9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct strfilter_node { 10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct strfilter_node *l; /* Tree left branche (for &,|) */ 11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct strfilter_node *r; /* Tree right branche (for !,&,|) */ 12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng const char *p; /* Operator or rule */ 13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* String filter */ 16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct strfilter { 17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct strfilter_node *root; 18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/** 21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * strfilter__new - Create a new string filter 22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * @rules: Filter rule, which is a combination of glob expressions. 23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * @err: Pointer which points an error detected on @rules 24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Parse @rules and return new strfilter. Return NULL if an error detected. 26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * In that case, *@err will indicate where it is detected, and *@err is NULL 27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * if a memory allocation is failed. 28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct strfilter *strfilter__new(const char *rules, const char **err); 30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/** 32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * strfilter__compare - compare given string and a string filter 33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * @self: String filter 34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * @str: target string 35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Compare @str and @self. Return true if the str match the rule 37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbool strfilter__compare(struct strfilter *self, const char *str); 39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/** 41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * strfilter__delete - delete a string filter 42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * @self: String filter to delete 43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Delete @self. 45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid strfilter__delete(struct strfilter *self); 47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif 49