From c445556372c92a0660bba2221b82daaba95f121c Mon Sep 17 00:00:00 2001 From: Ryan Bloom Date: Fri, 5 May 2000 23:17:54 +0000 Subject: 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 --- Makefile.in | 5 +-- STATUS | 7 +---- configure.in | 4 +-- include/httpd.h | 9 ++---- include/pcreposix.h | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++ server/util.c | 2 +- srclib/Makefile.in | 2 +- 7 files changed, 98 insertions(+), 20 deletions(-) create mode 100644 include/pcreposix.h 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 -#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 + +/* 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 -- cgit v1.2.1