Port to the pcre2 library.
This commit is contained in:
44
src/re.c
44
src/re.c
@@ -21,52 +21,58 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <regex.h>
|
||||
#ifdef HAVE_LIBPCRE
|
||||
# include <pcre.h>
|
||||
#endif /* HAVE_LIBPCRE */
|
||||
#ifdef HAVE_LIBPCRE2
|
||||
# define PCRE2_CODE_UNIT_WIDTH 32
|
||||
# include <pcre2.h>
|
||||
#endif /* HAVE_LIBPCRE2 */
|
||||
#include "mboxgrep.h"
|
||||
#include "message.h"
|
||||
#include "wrap.h" /* xcalloc() et cetera */
|
||||
|
||||
#ifdef HAVE_LIBPCRE
|
||||
#ifdef HAVE_LIBPCRE2
|
||||
void
|
||||
pcre_init (void)
|
||||
{
|
||||
int errptr;
|
||||
const char *error;
|
||||
int errornumber;
|
||||
PCRE2_SIZE erroroffset;
|
||||
|
||||
config.pcre_pattern =
|
||||
(pcre *) pcre_compile (config.regex_s,
|
||||
(config.ignorecase ? PCRE_CASELESS : 0),
|
||||
&error, &errptr, NULL);
|
||||
(pcre2_code *) pcre2_compile ((PCRE2_SPTR) config.regex_s, (PCRE2_SIZE) strlen (config.regex_s),
|
||||
(config.ignorecase ? PCRE2_CASELESS : 0),
|
||||
&errornumber, &erroroffset, NULL);
|
||||
if (config.pcre_pattern == NULL)
|
||||
{
|
||||
if (config.merr)
|
||||
fprintf (stderr, "%s: %s: %s\n", APPNAME, config.regex_s, error);
|
||||
{
|
||||
PCRE2_UCHAR buffer[256];
|
||||
|
||||
pcre2_get_error_message (errornumber, buffer, sizeof(buffer));
|
||||
fprintf (stderr, "%s: PCRE2 compilation failed at offset %d: %s\n",
|
||||
APPNAME, (int) erroroffset, (char *) buffer);
|
||||
}
|
||||
exit (2);
|
||||
}
|
||||
|
||||
config.match_data =
|
||||
(pcre2_match_data* ) pcre2_match_data_create_from_pattern (config.pcre_pattern, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
pcre_match (message_t * msg)
|
||||
{
|
||||
int of[BUFSIZ];
|
||||
|
||||
if (config.headers)
|
||||
config.res1 =
|
||||
pcre_exec ((pcre *) config.pcre_pattern,
|
||||
(pcre_extra *) config.pcre_hints,
|
||||
msg->headers, (int) strlen (msg->headers), 0, 0, of, BUFSIZ);
|
||||
pcre2_match ((pcre2_code *) config.pcre_pattern,
|
||||
(PCRE2_SPTR) msg->headers, (int) strlen (msg->headers), 0, 0, config.match_data, NULL);
|
||||
if (config.body)
|
||||
config.res2 =
|
||||
pcre_exec ((pcre *) config.pcre_pattern,
|
||||
(pcre_extra *) config.pcre_hints,
|
||||
msg->body, (int) strlen (msg->body), 0, 0, of, BUFSIZ);
|
||||
pcre2_match ((pcre2_code *) config.pcre_pattern,
|
||||
(PCRE2_SPTR) msg->body, (int) strlen (msg->body), 0, 0, config.match_data, NULL);
|
||||
|
||||
config.res1 = config.res1 ^ 1;
|
||||
config.res2 = config.res2 ^ 1;
|
||||
}
|
||||
#endif /* HAVE_LIBPCRE */
|
||||
#endif /* HAVE_LIBPCRE2 */
|
||||
|
||||
void
|
||||
regex_init (void)
|
||||
|
||||
Reference in New Issue
Block a user