summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Bloom <rbb@apache.org>2000-05-05 23:17:54 +0000
committerRyan Bloom <rbb@apache.org>2000-05-05 23:17:54 +0000
commitc445556372c92a0660bba2221b82daaba95f121c (patch)
treed888430066add99703370e4ecf7e0704336efdd5
parentdbe89e67876f755ad4ff6d065d594db5b7f7724b (diff)
downloadhttpd-c445556372c92a0660bba2221b82daaba95f121c.tar.gz
Replace hsregex with PCRE. The PCRE library is always used in 2.0,
regardless of what system we are on. Currently, we are using the POSIX wrappers that PCRE provides. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@85153 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--Makefile.in5
-rw-r--r--STATUS7
-rw-r--r--configure.in4
-rw-r--r--include/httpd.h9
-rw-r--r--include/pcreposix.h89
-rw-r--r--server/util.c2
-rw-r--r--srclib/Makefile.in2
7 files changed, 98 insertions, 20 deletions
diff --git a/Makefile.in b/Makefile.in
index d2cad21aca..d828e81c6e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,5 +1,5 @@
-SUBDIRS = ap lib main modules os support $(REGEX_DIR)
+SUBDIRS = ap lib main modules os support
PROGRAM_NAME = $(progname)
PROGRAM_SOURCES = modules.c buildmark.c
@@ -11,7 +11,8 @@ PROGRAM_DEPENDENCIES = \
os/$(OS_DIR)/libos.la \
ap/libap.la \
lib/apr/$(LIBPRE)apr.a \
- $(REGEX_LIB)
+ lib/pcre/libpcre.la \
+ lib/pcre/libpcreposix.la
PROGRAMS = $(PROGRAM_NAME)
targets = $(PROGRAMS)
diff --git a/STATUS b/STATUS
index db64dc5ceb..e5c11f3f7b 100644
--- a/STATUS
+++ b/STATUS
@@ -1,5 +1,5 @@
Apache 2.0 STATUS:
-Last modified at [$Date: 2000/05/05 20:19:25 $]
+Last modified at [$Date: 2000/05/05 23:17:51 $]
Release:
@@ -64,11 +64,6 @@ RELEASE SHOWSTOPPERS:
Status: The best known candidate would be something from
BIND v9.
- * Switch from HSRegex to PCRE. New code should be src/lib/pcre/
- (ftp://cus.cam.ac.uk/pub/software/programs/pcre/)
- Status: Greg +1
-
-
RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP:
* the top-level configure.in appears to use $USE_MAINTAINER_MODE = yes
to set -Wall/etc. flags, and the APR configure.in appears to use
diff --git a/configure.in b/configure.in
index 27c7255fed..28b99512ac 100644
--- a/configure.in
+++ b/configure.in
@@ -30,7 +30,7 @@ if test "$abs_builddir" != "$abs_srcdir"; then
fi
dnl ## Run configure for packages Apache uses
-AC_CONFIG_SUBDIRS(lib/apr)
+AC_CONFIG_SUBDIRS(lib/pcre lib/apr)
dnl
dnl ## Preload our OS configuration
@@ -164,8 +164,6 @@ APACHE_SUBST(EXTRA_CFLAGS)
APACHE_SUBST(EXTRA_LDFLAGS)
APACHE_SUBST(EXTRA_LIBS)
APACHE_SUBST(INCLUDES)
-APACHE_SUBST(REGEX_DIR)
-APACHE_SUBST(REGEX_LIB)
APACHE_SUBST(MPM_LIB)
APACHE_SUBST(OS)
APACHE_SUBST(OS_DIR)
diff --git a/include/httpd.h b/include/httpd.h
index b1a39ee271..b1f4b7289f 100644
--- a/include/httpd.h
+++ b/include/httpd.h
@@ -967,17 +967,12 @@ int strcasecmp(const char *a, const char *b);
int strncasecmp(const char *a, const char *b, size_t n);
#endif
-/* Regexes */
-#if defined(AP_USE_HSREGEX) || defined(WIN32)
-#include "hsregex.h"
-#else
-#include <regex.h>
-#endif
+#include "pcreposix.h"
API_EXPORT(regex_t *) ap_pregcomp(ap_pool_t *p, const char *pattern,
int cflags);
API_EXPORT(void) ap_pregfree(ap_pool_t *p, regex_t *reg);
-API_EXPORT(int) ap_regexec(const regex_t *preg, const char *string,
+API_EXPORT(int) ap_regexec(regex_t *preg, const char *string,
size_t nmatch, regmatch_t pmatch[], int eflags);
API_EXPORT(size_t) ap_regerror(int errcode, const regex_t *preg,
char *errbuf, size_t errbuf_size);
diff --git a/include/pcreposix.h b/include/pcreposix.h
new file mode 100644
index 0000000000..47838a8bc5
--- /dev/null
+++ b/include/pcreposix.h
@@ -0,0 +1,89 @@
+/*************************************************
+* Perl-Compatible Regular Expressions *
+*************************************************/
+
+/* Copyright (c) 1997-2000 University of Cambridge */
+/* Do not edit this file, this is provided by PCRE */
+
+#ifndef _PCREPOSIX_H
+#define _PCREPOSIX_H
+
+/* This is the header for the POSIX wrapper interface to the PCRE Perl-
+Compatible Regular Expression library. It defines the things POSIX says should
+be there. I hope. */
+
+/* Have to include stdlib.h in order to ensure that size_t is defined. */
+
+#include <stdlib.h>
+
+/* Allow for C++ users */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Options defined by POSIX. */
+
+#define REG_ICASE 0x01
+#define REG_NEWLINE 0x02
+#define REG_NOTBOL 0x04
+#define REG_NOTEOL 0x08
+
+/* These are not used by PCRE, but by defining them we make it easier
+to slot PCRE into existing programs that make POSIX calls. */
+
+#define REG_EXTENDED 0
+#define REG_NOSUB 0
+
+/* Error values. Not all these are relevant or used by the wrapper. */
+
+enum {
+ REG_ASSERT = 1, /* internal error ? */
+ REG_BADBR, /* invalid repeat counts in {} */
+ REG_BADPAT, /* pattern error */
+ REG_BADRPT, /* ? * + invalid */
+ REG_EBRACE, /* unbalanced {} */
+ REG_EBRACK, /* unbalanced [] */
+ REG_ECOLLATE, /* collation error - not relevant */
+ REG_ECTYPE, /* bad class */
+ REG_EESCAPE, /* bad escape sequence */
+ REG_EMPTY, /* empty expression */
+ REG_EPAREN, /* unbalanced () */
+ REG_ERANGE, /* bad range inside [] */
+ REG_ESIZE, /* expression too big */
+ REG_ESPACE, /* failed to get memory */
+ REG_ESUBREG, /* bad back reference */
+ REG_INVARG, /* bad argument */
+ REG_NOMATCH /* match failed */
+};
+
+
+/* The structure representing a compiled regular expression. */
+
+typedef struct {
+ void *re_pcre;
+ size_t re_nsub;
+ size_t re_erroffset;
+} regex_t;
+
+/* The structure in which a captured offset is returned. */
+
+typedef int regoff_t;
+
+typedef struct {
+ regoff_t rm_so;
+ regoff_t rm_eo;
+} regmatch_t;
+
+/* The functions */
+
+extern int regcomp(regex_t *, const char *, int);
+extern int regexec(regex_t *, const char *, size_t, regmatch_t *, int);
+extern size_t regerror(int, const regex_t *, char *, size_t);
+extern void regfree(regex_t *);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* End of pcreposix.h */
diff --git a/server/util.c b/server/util.c
index 32467664ff..5f6db30393 100644
--- a/server/util.c
+++ b/server/util.c
@@ -318,7 +318,7 @@ API_EXPORT(char *) ap_strcasestr(const char *s1, const char *s2)
* This is especially important for the DSO situations of modules.
* DO NOT MAKE A MACRO OUT OF THIS FUNCTION!
*/
-API_EXPORT(int) ap_regexec(const regex_t *preg, const char *string,
+API_EXPORT(int) ap_regexec(regex_t *preg, const char *string,
size_t nmatch, regmatch_t pmatch[], int eflags)
{
return regexec(preg, string, nmatch, pmatch, eflags);
diff --git a/srclib/Makefile.in b/srclib/Makefile.in
index 01ea0b60de..4585c596c8 100644
--- a/srclib/Makefile.in
+++ b/srclib/Makefile.in
@@ -1,4 +1,4 @@
-SUBDIRS = apr
+SUBDIRS = apr pcre
include $(top_srcdir)/build/rules.mk