Mercurial > hg > nginx-quic
diff src/core/ngx_regex.c @ 195:8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 25 Nov 2003 20:44:56 +0000 |
parents | |
children | 0b67be7d4489 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/src/core/ngx_regex.c @@ -0,0 +1,71 @@ + +#include <ngx_config.h> +#include <ngx_core.h> + + +static void *ngx_regex_malloc(size_t size); +static void ngx_regex_free(void *p); + + +/* THREADS: this pool should be private for each thread */ +static ngx_pool_t *ngx_pcre_pool; + + +void ngx_regex_init() +{ + pcre_malloc = ngx_regex_malloc; + pcre_free = ngx_regex_free; +} + + +ngx_regex_t *ngx_regex_compile(ngx_str_t *pattern, ngx_int_t options, + ngx_pool_t *pool, ngx_str_t *err) +{ + int erroff; + const char *errstr; + ngx_regex_t *re; + + ngx_pcre_pool = pool; + + re = pcre_compile(pattern->data, (int) options, &errstr, &erroff, NULL); + + if (re == NULL) { + if ((size_t) erroff == pattern->len) { + ngx_snprintf(err->data, err->len - 1, + "pcre_compile() failed: %s in \"%s\"", + errstr, pattern->data); + } else { + ngx_snprintf(err->data, err->len - 1, + "pcre_compile() failed: %s in \"%s\" at \"%s\"", + errstr, pattern->data, pattern->data + erroff); + } + } + + return re; +} + + +ngx_int_t ngx_regex_exec(ngx_regex_t *re, ngx_str_t *s) +{ + int rc; + + rc = pcre_exec(re, NULL, s->data, s->len, 0, 0, NULL, 0); + + if (rc == -1) { + return NGX_DECLINED; + } + + return rc; +} + + +static void *ngx_regex_malloc(size_t size) +{ + return ngx_palloc(ngx_pcre_pool, size); +} + + +static void ngx_regex_free(void *p) +{ + return; +}