From: Ryan Bloom Date: Fri, 5 May 2000 23:17:54 +0000 (+0000) Subject: Replace hsregex with PCRE. The PCRE library is always used in 2.0, X-Git-Tag: APACHE_2_0_ALPHA_4~188 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c445556372c92a0660bba2221b82daaba95f121c;p=thirdparty%2Fapache%2Fhttpd.git 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 --- diff --git a/Makefile.in b/Makefile.in index d2cad21aca0..d828e81c6eb 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 db64dc5cebc..e5c11f3f7bd 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 27c7255fed8..28b99512acf 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 b1a39ee271b..b1f4b7289fa 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 -#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 00000000000..47838a8bc56 --- /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 + +/* 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 32467664ff3..5f6db303937 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 01ea0b60de5..4585c596c88 100644 --- a/srclib/Makefile.in +++ b/srclib/Makefile.in @@ -1,4 +1,4 @@ -SUBDIRS = apr +SUBDIRS = apr pcre include $(top_srcdir)/build/rules.mk