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;
+}