|
@@ -750,31 +750,32 @@ static int filter_pred_none(struct filter_pred *pred, void *event)
|
|
|
*
|
|
|
* Note:
|
|
|
* - @str might not be NULL-terminated if it's of type DYN_STRING
|
|
|
- * or STATIC_STRING
|
|
|
+ * or STATIC_STRING, unless @len is zero.
|
|
|
*/
|
|
|
|
|
|
static int regex_match_full(char *str, struct regex *r, int len)
|
|
|
{
|
|
|
- if (strncmp(str, r->pattern, len) == 0)
|
|
|
- return 1;
|
|
|
- return 0;
|
|
|
+ /* len of zero means str is dynamic and ends with '\0' */
|
|
|
+ if (!len)
|
|
|
+ return strcmp(str, r->pattern) == 0;
|
|
|
+
|
|
|
+ return strncmp(str, r->pattern, len) == 0;
|
|
|
}
|
|
|
|
|
|
static int regex_match_front(char *str, struct regex *r, int len)
|
|
|
{
|
|
|
- if (len < r->len)
|
|
|
+ if (len && len < r->len)
|
|
|
return 0;
|
|
|
|
|
|
- if (strncmp(str, r->pattern, r->len) == 0)
|
|
|
- return 1;
|
|
|
- return 0;
|
|
|
+ return strncmp(str, r->pattern, r->len) == 0;
|
|
|
}
|
|
|
|
|
|
static int regex_match_middle(char *str, struct regex *r, int len)
|
|
|
{
|
|
|
- if (strnstr(str, r->pattern, len))
|
|
|
- return 1;
|
|
|
- return 0;
|
|
|
+ if (!len)
|
|
|
+ return strstr(str, r->pattern) != NULL;
|
|
|
+
|
|
|
+ return strnstr(str, r->pattern, len) != NULL;
|
|
|
}
|
|
|
|
|
|
static int regex_match_end(char *str, struct regex *r, int len)
|