diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2021-12-25 01:07:15 +0300 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2021-12-25 01:07:15 +0300 |
commit | c6fec0b027569a4e0b1d8aaee7dea0f2e4d6052b (patch) | |
tree | 2ac67a198959d1bf38efc6179bebee93f8b627e6 /src/core/ngx_regex.h | |
parent | cddb22cefe8f1c132e00553cb012ca9ab3264c18 (diff) |
PCRE2 library support.
The PCRE2 library is now used by default if found, instead of the
original PCRE library. If needed for some reason, this can be disabled
with the --without-pcre2 configure option.
To make it possible to specify paths to the library and include files
via --with-cc-opt / --with-ld-opt, the library is first tested without
any additional paths and options. If this fails, the pcre2-config script
is used.
Similarly to the original PCRE library, it is now possible to build PCRE2
from sources with nginx configure, by using the --with-pcre= option.
It automatically detects if PCRE or PCRE2 sources are provided.
Note that compiling PCRE2 10.33 and later requires inttypes.h. When
compiling on Windows with MSVC, inttypes.h is only available starting
with MSVC 2013. In older versions some replacement needs to be provided
("echo '#include <stdint.h>' > pcre2-10.xx/src/inttypes.h" is good enough
for MSVC 2010).
The interface on nginx side remains unchanged.
Diffstat (limited to 'src/core/ngx_regex.h')
-rw-r--r-- | src/core/ngx_regex.h | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/core/ngx_regex.h b/src/core/ngx_regex.h index 680486c81..70bd1db9f 100644 --- a/src/core/ngx_regex.h +++ b/src/core/ngx_regex.h @@ -12,19 +12,31 @@ #include <ngx_config.h> #include <ngx_core.h> -#include <pcre.h> +#if (NGX_PCRE2) + +#define PCRE2_CODE_UNIT_WIDTH 8 +#include <pcre2.h> + +#define NGX_REGEX_NO_MATCHED PCRE2_ERROR_NOMATCH /* -1 */ +#define NGX_REGEX_CASELESS PCRE2_CASELESS -#define NGX_REGEX_NO_MATCHED PCRE_ERROR_NOMATCH /* -1 */ +typedef pcre2_code ngx_regex_t; -#define NGX_REGEX_CASELESS PCRE_CASELESS +#else + +#include <pcre.h> +#define NGX_REGEX_NO_MATCHED PCRE_ERROR_NOMATCH /* -1 */ +#define NGX_REGEX_CASELESS PCRE_CASELESS typedef struct { pcre *code; pcre_extra *extra; } ngx_regex_t; +#endif + typedef struct { ngx_str_t pattern; @@ -49,10 +61,20 @@ typedef struct { void ngx_regex_init(void); ngx_int_t ngx_regex_compile(ngx_regex_compile_t *rc); +#if (NGX_PCRE2) + +ngx_int_t ngx_regex_exec(ngx_regex_t *re, ngx_str_t *s, int *captures, + ngx_uint_t size); +#define ngx_regex_exec_n "pcre2_match()" + +#else + #define ngx_regex_exec(re, s, captures, size) \ pcre_exec(re->code, re->extra, (const char *) (s)->data, (s)->len, 0, 0, \ captures, size) -#define ngx_regex_exec_n "pcre_exec()" +#define ngx_regex_exec_n "pcre_exec()" + +#endif ngx_int_t ngx_regex_exec_array(ngx_array_t *a, ngx_str_t *s, ngx_log_t *log); |