filter.c: dont print error in 'compile()'.
Make compile store the error information in a struct so that both filter_check_syntax and filter_match, can share the code.
This commit is contained in:
parent
a2f2e58353
commit
45736b3845
1 changed files with 14 additions and 9 deletions
23
filter.c
23
filter.c
|
|
@ -24,7 +24,12 @@
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "filter.h"
|
#include "filter.h"
|
||||||
|
|
||||||
static inline pcre* compile(const char *pattern) {
|
struct __error_info {
|
||||||
|
const char *msg;
|
||||||
|
int offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline pcre* compile(const char *pattern, struct __error_info *info) {
|
||||||
|
|
||||||
const char *err;
|
const char *err;
|
||||||
int eoffset;
|
int eoffset;
|
||||||
|
|
@ -32,7 +37,10 @@ static inline pcre* compile(const char *pattern) {
|
||||||
|
|
||||||
regex = pcre_compile(pattern, 0, &err, &eoffset, NULL);
|
regex = pcre_compile(pattern, 0, &err, &eoffset, NULL);
|
||||||
if (!regex) {
|
if (!regex) {
|
||||||
error("Error compiling expression\n");
|
if (info) {
|
||||||
|
info->msg = error;
|
||||||
|
info->offset = eoffset;
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -49,14 +57,11 @@ static inline int match(pcre *pcre, const char *subject) {
|
||||||
|
|
||||||
int filter_check_syntax(const char *pattern) {
|
int filter_check_syntax(const char *pattern) {
|
||||||
|
|
||||||
const char *err;
|
struct __error_info info;
|
||||||
int eoffset;
|
|
||||||
pcre *regex;
|
|
||||||
|
|
||||||
regex = pcre_compile(pattern, 0, &err, &eoffset, NULL);
|
if (!compile(pattern, &info)) {
|
||||||
if (!regex) {
|
|
||||||
error("filter: error in expression '%s': %s\n",
|
error("filter: error in expression '%s': %s\n",
|
||||||
pattern, err);
|
pattern, info.msg);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -70,7 +75,7 @@ int filter_match(const char *pattern, const char *subject) {
|
||||||
if (!pattern || !subject)
|
if (!pattern || !subject)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
regex = compile(pattern);
|
regex = compile(pattern, NULL);
|
||||||
if (!regex)
|
if (!regex)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
||||||
Reference in a new issue