add re support using pcre
This commit is contained in:
parent
e4530495f9
commit
b871d2fc3d
@ -21,6 +21,10 @@
|
|||||||
#include "sigar_util.h"
|
#include "sigar_util.h"
|
||||||
#include "sigar_ptql.h"
|
#include "sigar_ptql.h"
|
||||||
|
|
||||||
|
#ifdef SIGAR_HAS_PCRE
|
||||||
|
#include "pcre.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#define strtoull strtoul /*XXX*/
|
#define strtoull strtoul /*XXX*/
|
||||||
#endif
|
#endif
|
||||||
@ -325,7 +329,15 @@ static int ptql_op_str_sw(ptql_branch_t *branch,
|
|||||||
static int ptql_op_str_re(ptql_branch_t *branch,
|
static int ptql_op_str_re(ptql_branch_t *branch,
|
||||||
char *haystack, char *needle)
|
char *haystack, char *needle)
|
||||||
{
|
{
|
||||||
return 0; /*XXX pcre?*/
|
#ifdef SIGAR_HAS_PCRE
|
||||||
|
pcre *re = (pcre *)branch->value.ptr;
|
||||||
|
int len = strlen(haystack);
|
||||||
|
int rc =
|
||||||
|
pcre_exec(re, NULL, haystack, len, 0, 0, NULL, 0);
|
||||||
|
return rc >= 0;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ptql_op_str_ct(ptql_branch_t *branch,
|
static int ptql_op_str_ct(ptql_branch_t *branch,
|
||||||
@ -935,6 +947,26 @@ static int ptql_branch_add(ptql_parse_branch_t *parsed,
|
|||||||
/* self reference */
|
/* self reference */
|
||||||
return SIGAR_PTQL_MALFORMED_QUERY;
|
return SIGAR_PTQL_MALFORMED_QUERY;
|
||||||
}
|
}
|
||||||
|
else if (branch->op_name == PTQL_OP_RE) {
|
||||||
|
/* not for use with .re */
|
||||||
|
return SIGAR_PTQL_MALFORMED_QUERY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (branch->op_name == PTQL_OP_RE) {
|
||||||
|
#ifdef SIGAR_HAS_PCRE
|
||||||
|
const char *error;
|
||||||
|
int offset;
|
||||||
|
pcre *re =
|
||||||
|
pcre_compile(parsed->value, 0, &error, &offset, NULL);
|
||||||
|
if (!re) {
|
||||||
|
return SIGAR_PTQL_MALFORMED_QUERY;
|
||||||
|
}
|
||||||
|
is_set = 1;
|
||||||
|
branch->value.ptr = re;
|
||||||
|
branch->value_free = pcre_free;
|
||||||
|
#else
|
||||||
|
return SIGAR_PTQL_MALFORMED_QUERY;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (lookup->type) {
|
switch (lookup->type) {
|
||||||
|
Loading…
Reference in New Issue
Block a user