No objections to going ahead with this? On Thu, Jan 27, 2005 at 03:01:56PM +0000, Joe Orton wrote: > There are two problems with the use of PCRE in httpd: firstly that there > is no support for use of an external pcre library (PR27750), and > secondly that use of the pcreposix.h interface can cause namespace > collisions with the real POSIX regex API (PR26088, but this is triggered > when trying to solve 27750). > > Attached is a patch which addresses the latter issue and prepares for > the use of an external PCRE, based on the patches by Andres Solomon in > 27750: implementing the pcreposix.c wrapper inside the ap_ namespace, by > doing: > > 1. rename pcreposix.h to ap_regex.h (to avoid collisions with any > external pcre), and copy srclib/pcre/pcreposix.c to server/util_pcre.c > 2. rename REG_* constants to AP_REG_*, regex_t->ap_regex_t, > regmatch_t->ap_regmatch_t, and ap_* prefix the reg* functions > > Because the error handling in the PCRE-based regcomp() relies on a > non-public PCRE interface for mapping error strings to codes, this is > dropped; if ap_regcomp() fails, no specific error code is provided, just > REG_INVARG aka "invalid argument". (the regcomp error code is not used > anywhere in httpd so no real difference; this could be improved later) > > Two diffs attached: firstly to implement all the above; secondly to > update the rest of the tree to use the new API, you'll need to do > > $ cp srclib/pcre/pcreposix.c server/util_pcre.c > $ cp include/pcreposix.h include/ap_regex.h > > to apply the svn diff to a trunk checkout. > > joe
> Index: configure.in > =================================================================== > --- configure.in (revision 126611) > +++ configure.in (working copy) > @@ -512,6 +512,7 @@ > > dnl AP_LIBS specifies the actual libraries. note we have some required libs. > AP_LIBS="$abs_builddir/srclib/pcre/libpcre.la $AP_LIBS" > +APR_ADDTO(CPPFLAGS, [-I$abs_builddir/srclib/pcre]) > > dnl APR should go after the other libs, so the right symbols can be picked up > AP_LIBS="$AP_LIBS `$apu_config --link-libtool --libs` `$apr_config > --link-libtool --libs`" > Index: include/ap_mmn.h > =================================================================== > --- include/ap_mmn.h (revision 126611) > +++ include/ap_mmn.h (working copy) > @@ -85,6 +85,8 @@ > * ap_setup_prelinked_modules, > ap_process_resource_config > * 20040425.1 (2.1.0-dev) Added ap_module_symbol_t and > ap_prelinked_module_symbols > * 20050101.0 (2.1.2-dev) Axed misnamed http_method for http_scheme (which > it was!) > + * 20050127.0 (2.1.3-dev) renamed regex_t->ap_regex_t, > regmatch_t->ap_regmatch_t, > + * REG_*->AP_REG_*, removed reg* in place of ap_reg* > */ > > #define MODULE_MAGIC_COOKIE 0x41503230UL /* "AP20" */ > Index: include/ap_regex.h > =================================================================== > --- include/ap_regex.h (revision 126601) > +++ include/ap_regex.h (working copy) > @@ -52,37 +52,24 @@ > > /* Options defined by POSIX. */ > > -#define REG_ICASE 0x01 > -#define REG_NEWLINE 0x02 > -#define REG_NOTBOL 0x04 > -#define REG_NOTEOL 0x08 > +#define AP_REG_ICASE 0x01 > +#define AP_REG_NEWLINE 0x02 > +#define AP_REG_NOTBOL 0x04 > +#define AP_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 > +#define AP_REG_EXTENDED 0 > +#define AP_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 */ > + AP_REG_ASSERT = 1, /* internal error ? */ > + AP_REG_ESPACE, /* failed to get memory */ > + AP_REG_INVARG, /* bad argument */ > + AP_REG_NOMATCH /* match failed */ > }; > > > @@ -92,7 +79,7 @@ > void *re_pcre; > size_t re_nsub; > size_t re_erroffset; > -} regex_t; > +} ap_regex_t; > > /* The structure in which a captured offset is returned. */ > > @@ -101,15 +88,46 @@ > typedef struct { > regoff_t rm_so; > regoff_t rm_eo; > -} regmatch_t; > +} ap_regmatch_t; > > +#ifndef AP_DECLARE > +#define AP_DECLARE(x) x > +#endif /* AP_DECLARE */ > + > /* The functions */ > > -extern int regcomp(regex_t *, const char *, int); > -extern int regexec(const 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 *); > +AP_DECLARE(int) ap_regcomp(ap_regex_t *, const char *, int); > > +/** > + * Match a null-terminated string against a pre-compiled regex. > + * @param preg The pre-compiled regex > + * @param string The string to match > + * @param nmatch Provide information regarding the location of any matches > + * @param pmatch Provide information regarding the location of any matches > + * @param eflags Bitwise or of any of: > + * @li #REG_NOTBOL - match-beginning-of-line operator always > + * fails to match > + * @li #REG_NOTEOL - match-end-of-line operator always fails to match > + * @return 0 for successful match, #REG_NOMATCH otherwise > + */ > +AP_DECLARE(int) ap_regexec(const ap_regex_t *preg, const char *string, > + size_t nmatch, ap_regmatch_t *pmatch, int eflags); > + > +/** > + * Return the error code returned by regcomp or regexec into error messages > + * @param errcode the error code returned by regexec or regcomp > + * @param preg The precompiled regex > + * @param errbuf A buffer to store the error in > + * @param errbuf_size The size of the buffer > + */ > +AP_DECLARE(size_t) ap_regerror(int errcode, const ap_regex_t *preg, > + char *errbuf, size_t errbuf_size); > + > +/** Destroy a pre-compiled regex. > + * @param preg The pre-compiled regex to free. > + */ > +AP_DECLARE(void) ap_regfree(ap_regex_t *preg); > + > #ifdef __cplusplus > } /* extern "C" */ > #endif > Index: include/http_core.h > =================================================================== > --- include/http_core.h (revision 126611) > +++ include/http_core.h (working copy) > @@ -488,7 +488,7 @@ > > /* Access control */ > apr_array_header_t *sec_file; > - regex_t *r; > + ap_regex_t *r; > > const char *mime_type; /* forced with ForceType */ > const char *handler; /* forced with SetHandler */ > Index: include/httpd.h > =================================================================== > --- include/httpd.h (revision 126611) > +++ include/httpd.h (working copy) > @@ -41,7 +41,7 @@ > > #include "os.h" > > -#include "pcreposix.h" > +#include "ap_regex.h" > > /* Note: util_uri.h is also included, see below */ > > @@ -1540,42 +1540,17 @@ > * @li #REG_NEWLINE - Match-any-character operators don't match new-line > * @return The compiled regular expression > */ > -AP_DECLARE(regex_t *) ap_pregcomp(apr_pool_t *p, const char *pattern, > - int cflags); > - > +AP_DECLARE(ap_regex_t *) ap_pregcomp(apr_pool_t *p, const char *pattern, > + int cflags); > + > /** > * Free the memory associated with a compiled regular expression > * @param p The pool the regex was allocated from > * @param reg The regular expression to free > */ > -AP_DECLARE(void) ap_pregfree(apr_pool_t *p, regex_t *reg); > +AP_DECLARE(void) ap_pregfree(apr_pool_t *p, ap_regex_t *reg); > > /** > - * Match a null-terminated string against a pre-compiled regex. > - * @param preg The pre-compiled regex > - * @param string The string to match > - * @param nmatch Provide information regarding the location of any matches > - * @param pmatch Provide information regarding the location of any matches > - * @param eflags Bitwise or of any of: > - * @li #REG_NOTBOL - match-beginning-of-line operator always > - * fails to match > - * @li #REG_NOTEOL - match-end-of-line operator always fails to match > - * @return 0 for successful match, #REG_NOMATCH otherwise > - */ > -AP_DECLARE(int) ap_regexec(regex_t *preg, const char *string, > - size_t nmatch, regmatch_t pmatch[], int > eflags); > - > -/** > - * Return the error code returned by regcomp or regexec into error messages > - * @param errcode the error code returned by regexec or regcomp > - * @param preg The precompiled regex > - * @param errbuf A buffer to store the error in > - * @param errbuf_size The size of the buffer > - */ > -AP_DECLARE(size_t) ap_regerror(int errcode, const regex_t *preg, > - char *errbuf, size_t errbuf_size); > - > -/** > * After performing a successful regex match, you may use this function to > * perform a series of string substitutions based on subexpressions that were > * matched during the call to ap_regexec > @@ -1587,7 +1562,7 @@ > * @param pmatch the pmatch array returned from ap_pregex > */ > AP_DECLARE(char *) ap_pregsub(apr_pool_t *p, const char *input, const char > *source, > - size_t nmatch, regmatch_t pmatch[]); > + size_t nmatch, ap_regmatch_t pmatch[]); > > /** > * We want to downcase the type/subtype for comparison purposes > Index: include/pcreposix.h > =================================================================== > --- include/pcreposix.h (revision 126611) > +++ include/pcreposix.h (working copy) > @@ -1,117 +0,0 @@ > -/************************************************* > -* Perl-Compatible Regular Expressions * > -*************************************************/ > - > -#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. > - > - Copyright (c) 1997-2004 University of Cambridge > - > ------------------------------------------------------------------------------ > -Redistribution and use in source and binary forms, with or without > -modification, are permitted provided that the following conditions are met: > - > - * Redistributions of source code must retain the above copyright notice, > - this list of conditions and the following disclaimer. > - > - * Redistributions in binary form must reproduce the above copyright > - notice, this list of conditions and the following disclaimer in the > - documentation and/or other materials provided with the distribution. > - > - * Neither the name of the University of Cambridge nor the names of its > - contributors may be used to endorse or promote products derived from > - this software without specific prior written permission. > - > -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" > -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE > -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE > -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF > -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS > -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN > -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE > -POSSIBILITY OF SUCH DAMAGE. > ------------------------------------------------------------------------------ > -*/ > - > -/* 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(const 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 */ > Index: server/Makefile.in > =================================================================== > --- server/Makefile.in (revision 126611) > +++ server/Makefile.in (working copy) > @@ -12,7 +12,7 @@ > util_script.c util_md5.c util_cfgtree.c util_ebcdic.c util_time.c \ > connection.c listen.c \ > mpm_common.c util_charset.c util_debug.c util_xml.c \ > - util_filter.c exports.c buildmark.c \ > + util_filter.c util_pcre.c exports.c buildmark.c \ > scoreboard.c error_bucket.c protocol.c core.c request.c provider.c \ > eoc_bucket.c core_filters.c > > Index: server/util.c > =================================================================== > --- server/util.c (revision 126611) > +++ server/util.c (working copy) > @@ -246,25 +246,25 @@ > } > > /* > - * Here's a pool-based interface to POSIX regex's regcomp(). > - * Note that we return regex_t instead of being passed one. > - * The reason is that if you use an already-used regex_t structure, > + * Here's a pool-based interface to the POSIX-esque ap_regcomp(). > + * Note that we return ap_regex_t instead of being passed one. > + * The reason is that if you use an already-used ap_regex_t structure, > * the memory that you've already allocated gets forgotten, and > * regfree() doesn't clear it. So we don't allow it. > */ > > static apr_status_t regex_cleanup(void *preg) > { > - regfree((regex_t *) preg); > + ap_regfree((ap_regex_t *) preg); > return APR_SUCCESS; > } > > -AP_DECLARE(regex_t *) ap_pregcomp(apr_pool_t *p, const char *pattern, > - int cflags) > +AP_DECLARE(ap_regex_t *) ap_pregcomp(apr_pool_t *p, const char *pattern, > + int cflags) > { > - regex_t *preg = apr_palloc(p, sizeof(regex_t)); > + ap_regex_t *preg = apr_palloc(p, sizeof *preg); > > - if (regcomp(preg, pattern, cflags)) { > + if (ap_regcomp(preg, pattern, cflags)) { > return NULL; > } > > @@ -274,9 +274,9 @@ > return preg; > } > > -AP_DECLARE(void) ap_pregfree(apr_pool_t *p, regex_t * reg) > +AP_DECLARE(void) ap_pregfree(apr_pool_t *p, ap_regex_t *reg) > { > - regfree(reg); > + ap_regfree(reg); > apr_pool_cleanup_kill(p, (void *) reg, regex_cleanup); > } > > @@ -343,29 +343,10 @@ > return bigstring; > } > > -/* > - * Apache stub function for the regex libraries regexec() to make sure the > - * whole regex(3) API is available through the Apache (exported) namespace. > - * This is especially important for the DSO situations of modules. > - * DO NOT MAKE A MACRO OUT OF THIS FUNCTION! > - */ > -AP_DECLARE(int) ap_regexec(regex_t *preg, const char *string, > - size_t nmatch, regmatch_t pmatch[], int eflags) > -{ > - return regexec(preg, string, nmatch, pmatch, eflags); > -} > - > -AP_DECLARE(size_t) ap_regerror(int errcode, const regex_t *preg, char > *errbuf, > - size_t errbuf_size) > -{ > - return regerror(errcode, preg, errbuf, errbuf_size); > -} > - > - > /* This function substitutes for $0-$9, filling in regular expression > * submatches. Pass it the same nmatch and pmatch arguments that you > * passed ap_regexec(). pmatch should not be greater than the maximum number > - * of subexpressions - i.e. one more than the re_nsub member of regex_t. > + * of subexpressions - i.e. one more than the re_nsub member of ap_regex_t. > * > * input should be the string with the $-expressions, source should be the > * string that was matched against. > @@ -378,7 +359,7 @@ > > AP_DECLARE(char *) ap_pregsub(apr_pool_t *p, const char *input, > const char *source, size_t nmatch, > - regmatch_t pmatch[]) > + ap_regmatch_t pmatch[]) > { > const char *src = input; > char *dest, *dst; > Index: server/util_pcre.c > =================================================================== > --- server/util_pcre.c (revision 126601) > +++ server/util_pcre.c (working copy) > @@ -43,122 +43,29 @@ > ----------------------------------------------------------------------------- > */ > > -#include "internal.h" > -#include "pcreposix.h" > -#include "stdlib.h" > +#include <stdlib.h> > > +#include "ap_regex.h" > +#include "pcre.h" > > +#ifndef POSIX_MALLOC_THRESHOLD > +#define POSIX_MALLOC_THRESHOLD (10) > +#endif > > -/* Corresponding tables of PCRE error messages and POSIX error codes. */ > +/* Table of error strings corresponding to POSIX error codes; must be > + * kept in synch with include/ap_regex.h's AP_REG_E* definitions. */ > > -static const char *const estring[] = { > - ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10, > - ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20, > - ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR29, ERR29, ERR30, > - ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39, ERR40, > - ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47 }; > - > -static const int eint[] = { > - REG_EESCAPE, /* "\\ at end of pattern" */ > - REG_EESCAPE, /* "\\c at end of pattern" */ > - REG_EESCAPE, /* "unrecognized character follows \\" */ > - REG_BADBR, /* "numbers out of order in {} quantifier" */ > - REG_BADBR, /* "number too big in {} quantifier" */ > - REG_EBRACK, /* "missing terminating ] for character class" */ > - REG_ECTYPE, /* "invalid escape sequence in character class" */ > - REG_ERANGE, /* "range out of order in character class" */ > - REG_BADRPT, /* "nothing to repeat" */ > - REG_BADRPT, /* "operand of unlimited repeat could match the empty string" > */ > - REG_ASSERT, /* "internal error: unexpected repeat" */ > - REG_BADPAT, /* "unrecognized character after (?" */ > - REG_BADPAT, /* "POSIX named classes are supported only within a class" */ > - REG_EPAREN, /* "missing )" */ > - REG_ESUBREG, /* "reference to non-existent subpattern" */ > - REG_INVARG, /* "erroffset passed as NULL" */ > - REG_INVARG, /* "unknown option bit(s) set" */ > - REG_EPAREN, /* "missing ) after comment" */ > - REG_ESIZE, /* "parentheses nested too deeply" */ > - REG_ESIZE, /* "regular expression too large" */ > - REG_ESPACE, /* "failed to get memory" */ > - REG_EPAREN, /* "unmatched brackets" */ > - REG_ASSERT, /* "internal error: code overflow" */ > - REG_BADPAT, /* "unrecognized character after (?<" */ > - REG_BADPAT, /* "lookbehind assertion is not fixed length" */ > - REG_BADPAT, /* "malformed number after (?(" */ > - REG_BADPAT, /* "conditional group containe more than two branches" */ > - REG_BADPAT, /* "assertion expected after (?(" */ > - REG_BADPAT, /* "(?R or (?digits must be followed by )" */ > - REG_ECTYPE, /* "unknown POSIX class name" */ > - REG_BADPAT, /* "POSIX collating elements are not supported" */ > - REG_INVARG, /* "this version of PCRE is not compiled with PCRE_UTF8 > support" */ > - REG_BADPAT, /* "spare error" */ > - REG_BADPAT, /* "character value in \x{...} sequence is too large" */ > - REG_BADPAT, /* "invalid condition (?(0)" */ > - REG_BADPAT, /* "\\C not allowed in lookbehind assertion" */ > - REG_EESCAPE, /* "PCRE does not support \\L, \\l, \\N, \\U, or \\u" */ > - REG_BADPAT, /* "number after (?C is > 255" */ > - REG_BADPAT, /* "closing ) for (?C expected" */ > - REG_BADPAT, /* "recursive call could loop indefinitely" */ > - REG_BADPAT, /* "unrecognized character after (?P" */ > - REG_BADPAT, /* "syntax error after (?P" */ > - REG_BADPAT, /* "two named groups have the same name" */ > - REG_BADPAT, /* "invalid UTF-8 string" */ > - REG_BADPAT, /* "support for \\P, \\p, and \\X has not been compiled" */ > - REG_BADPAT, /* "malformed \\P or \\p sequence" */ > - REG_BADPAT /* "unknown property name after \\P or \\p" */ > -}; > - > -/* Table of texts corresponding to POSIX error codes */ > - > static const char *const pstring[] = { > "", /* Dummy for value 0 */ > - "internal error", /* REG_ASSERT */ > - "invalid repeat counts in {}", /* BADBR */ > - "pattern error", /* BADPAT */ > - "? * + invalid", /* BADRPT */ > - "unbalanced {}", /* EBRACE */ > - "unbalanced []", /* EBRACK */ > - "collation error - not relevant", /* ECOLLATE */ > - "bad class", /* ECTYPE */ > - "bad escape sequence", /* EESCAPE */ > - "empty expression", /* EMPTY */ > - "unbalanced ()", /* EPAREN */ > - "bad range inside []", /* ERANGE */ > - "expression too big", /* ESIZE */ > - "failed to get memory", /* ESPACE */ > - "bad back reference", /* ESUBREG */ > - "bad argument", /* INVARG */ > - "match failed" /* NOMATCH */ > + "internal error", /* AP_REG_ASSERT */ > + "failed to get memory", /* AP_REG_ESPACE */ > + "bad argument", /* AP_REG_INVARG */ > + "match failed" /* AP_REG_NOMATCH */ > }; > > - > - > - > -/************************************************* > -* Translate PCRE text code to int * > -*************************************************/ > - > -/* PCRE compile-time errors are given as strings defined as macros. We can > just > -look them up in a table to turn them into POSIX-style error codes. */ > - > -static int > -pcre_posix_error_code(const char *s) > +AP_DECLARE(size_t) ap_regerror(int errcode, const ap_regex_t *preg, > + char *errbuf, size_t errbuf_size) > { > -size_t i; > -for (i = 0; i < sizeof(estring)/sizeof(char *); i++) > - if (strcmp(s, estring[i]) == 0) return eint[i]; > -return REG_ASSERT; > -} > - > - > - > -/************************************************* > -* Translate error code to string * > -*************************************************/ > - > -EXPORT size_t > -regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size) > -{ > const char *message, *addmessage; > size_t length, addlength; > > @@ -191,8 +98,7 @@ > * Free store held by a regex * > *************************************************/ > > -EXPORT void > -regfree(regex_t *preg) > +AP_DECLARE(void) ap_regfree(ap_regex_t *preg) > { > (pcre_free)(preg->re_pcre); > } > @@ -214,20 +120,19 @@ > various non-zero codes on failure > */ > > -EXPORT int > -regcomp(regex_t *preg, const char *pattern, int cflags) > +AP_DECLARE(int) ap_regcomp(ap_regex_t *preg, const char *pattern, int cflags) > { > const char *errorptr; > int erroffset; > int options = 0; > > -if ((cflags & REG_ICASE) != 0) options |= PCRE_CASELESS; > -if ((cflags & REG_NEWLINE) != 0) options |= PCRE_MULTILINE; > +if ((cflags & AP_REG_ICASE) != 0) options |= PCRE_CASELESS; > +if ((cflags & AP_REG_NEWLINE) != 0) options |= PCRE_MULTILINE; > > preg->re_pcre = pcre_compile(pattern, options, &errorptr, &erroffset, NULL); > preg->re_erroffset = erroffset; > > -if (preg->re_pcre == NULL) return pcre_posix_error_code(errorptr); > +if (preg->re_pcre == NULL) return AP_REG_INVARG; > > preg->re_nsub = pcre_info((const pcre *)preg->re_pcre, NULL, NULL); > return 0; > @@ -247,20 +152,19 @@ > block of store on the stack, to reduce the use of malloc/free. The threshold > is > in a macro that can be changed at configure time. */ > > -EXPORT int > -regexec(const regex_t *preg, const char *string, size_t nmatch, > - regmatch_t pmatch[], int eflags) > +AP_DECLARE(int) ap_regexec(const ap_regex_t *preg, const char *string, > size_t nmatch, > + ap_regmatch_t pmatch[], int eflags) > { > int rc; > int options = 0; > int *ovector = NULL; > int small_ovector[POSIX_MALLOC_THRESHOLD * 3]; > -BOOL allocated_ovector = FALSE; > +int allocated_ovector = 0; > > -if ((eflags & REG_NOTBOL) != 0) options |= PCRE_NOTBOL; > -if ((eflags & REG_NOTEOL) != 0) options |= PCRE_NOTEOL; > +if ((eflags & AP_REG_NOTBOL) != 0) options |= PCRE_NOTBOL; > +if ((eflags & AP_REG_NOTEOL) != 0) options |= PCRE_NOTEOL; > > -((regex_t *)preg)->re_erroffset = (size_t)(-1); /* Only has meaning after > compile */ > +((ap_regex_t *)preg)->re_erroffset = (size_t)(-1); /* Only has meaning > after compile */ > > if (nmatch > 0) > { > @@ -271,8 +175,8 @@ > else > { > ovector = (int *)malloc(sizeof(int) * nmatch * 3); > - if (ovector == NULL) return REG_ESPACE; > - allocated_ovector = TRUE; > + if (ovector == NULL) return AP_REG_ESPACE; > + allocated_ovector = 1; > } > } > > @@ -299,16 +203,16 @@ > if (allocated_ovector) free(ovector); > switch(rc) > { > - case PCRE_ERROR_NOMATCH: return REG_NOMATCH; > - case PCRE_ERROR_NULL: return REG_INVARG; > - case PCRE_ERROR_BADOPTION: return REG_INVARG; > - case PCRE_ERROR_BADMAGIC: return REG_INVARG; > - case PCRE_ERROR_UNKNOWN_NODE: return REG_ASSERT; > - case PCRE_ERROR_NOMEMORY: return REG_ESPACE; > - case PCRE_ERROR_MATCHLIMIT: return REG_ESPACE; > - case PCRE_ERROR_BADUTF8: return REG_INVARG; > - case PCRE_ERROR_BADUTF8_OFFSET: return REG_INVARG; > - default: return REG_ASSERT; > + case PCRE_ERROR_NOMATCH: return AP_REG_NOMATCH; > + case PCRE_ERROR_NULL: return AP_REG_INVARG; > + case PCRE_ERROR_BADOPTION: return AP_REG_INVARG; > + case PCRE_ERROR_BADMAGIC: return AP_REG_INVARG; > + case PCRE_ERROR_UNKNOWN_NODE: return AP_REG_ASSERT; > + case PCRE_ERROR_NOMEMORY: return AP_REG_ESPACE; > + case PCRE_ERROR_MATCHLIMIT: return AP_REG_ESPACE; > + case PCRE_ERROR_BADUTF8: return AP_REG_INVARG; > + case PCRE_ERROR_BADUTF8_OFFSET: return AP_REG_INVARG; > + default: return AP_REG_ASSERT; > } > } > } > Index: srclib/pcre/Makefile.in > =================================================================== > --- srclib/pcre/Makefile.in (revision 126611) > +++ srclib/pcre/Makefile.in (working copy) > @@ -1,5 +1,5 @@ > LTLIBRARY_NAME = libpcre.la > -LTLIBRARY_SOURCES = maketables.c get.c study.c pcre.c pcreposix.c > +LTLIBRARY_SOURCES = maketables.c get.c study.c pcre.c > > CLEAN_TARGETS = dftables chartables.c > DISTCLEAN_TARGETS = pcre.h pcre-config config.h config.log config.status > $(CLEAN_TARGETS) > Index: modules/experimental/mod_filter.c > =================================================================== > --- modules/experimental/mod_filter.c (revision 126611) > +++ modules/experimental/mod_filter.c (working copy) > @@ -66,7 +66,7 @@ > /** The dispatch match itself - union member depends on match_type */ > union { > const char *string; > - regex_t *regex; > + ap_regex_t *regex; > int number; > } match; > > @@ -232,7 +232,7 @@ > break; > case REGEX_MATCH: > if (ap_regexec(provider->match.regex, str, 0, NULL, 0) > - == REG_NOMATCH) { > + == AP_REG_NOMATCH) { > match = 0; > } > break; > @@ -590,10 +590,10 @@ > if (!rxend) { > return "Bad regexp syntax"; > } > - flags = REG_NOSUB; /* we're not mod_rewrite:-) */ > + flags = AP_REG_NOSUB; /* we're not mod_rewrite:-) */ > for (c = rxend+1; *c; ++c) { > switch (*c) { > - case 'i': flags |= REG_ICASE; break; > + case 'i': flags |= AP_REG_ICASE; break; > } > } > provider->match.regex = ap_pregcomp(cmd->pool, > Index: modules/filters/mod_include.c > =================================================================== > --- modules/filters/mod_include.c (revision 126611) > +++ modules/filters/mod_include.c (working copy) > @@ -154,7 +154,7 @@ > const char *source; > const char *rexp; > apr_size_t nsub; > - regmatch_t match[AP_MAX_REG_MATCH]; > + ap_regmatch_t match[AP_MAX_REG_MATCH]; > } backref_t; > > typedef struct { > @@ -916,11 +916,11 @@ > static APR_INLINE int re_check(include_ctx_t *ctx, const char *string, > const char *rexp) > { > - regex_t *compiled; > + ap_regex_t *compiled; > backref_t *re = ctx->intern->re; > int rc; > > - compiled = ap_pregcomp(ctx->dpool, rexp, REG_EXTENDED); > + compiled = ap_pregcomp(ctx->dpool, rexp, AP_REG_EXTENDED); > if (!compiled) { > ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, ctx->intern->r, "unable to " > "compile pattern \"%s\"", rexp); > Index: modules/mappers/mod_alias.c > =================================================================== > --- modules/mappers/mod_alias.c (revision 126611) > +++ modules/mappers/mod_alias.c (working copy) > @@ -39,7 +39,7 @@ > const char *real; > const char *fake; > char *handler; > - regex_t *regexp; > + ap_regex_t *regexp; > int redir_status; /* 301, 302, 303, 410, etc */ > } alias_entry; > > @@ -111,7 +111,7 @@ > /* XX r can NOT be relative to DocumentRoot here... compat bug. */ > > if (use_regex) { > - new->regexp = ap_pregcomp(cmd->pool, f, REG_EXTENDED); > + new->regexp = ap_pregcomp(cmd->pool, f, AP_REG_EXTENDED); > if (new->regexp == NULL) > return "Regular expression could not be compiled."; > new->real = r; > @@ -175,7 +175,7 @@ > alias_server_conf *serverconf = ap_get_module_config(s->module_config, > &alias_module); > int status = (int) (long) cmd->info; > - regex_t *r = NULL; > + ap_regex_t *r = NULL; > const char *f = arg2; > const char *url = arg3; > > @@ -195,7 +195,7 @@ > } > > if (use_regex) { > - r = ap_pregcomp(cmd->pool, f, REG_EXTENDED); > + r = ap_pregcomp(cmd->pool, f, AP_REG_EXTENDED); > if (r == NULL) > return "Regular expression could not be compiled."; > } > @@ -313,7 +313,7 @@ > int doesc, int *status) > { > alias_entry *entries = (alias_entry *) aliases->elts; > - regmatch_t regm[AP_MAX_REG_MATCH]; > + ap_regmatch_t regm[AP_MAX_REG_MATCH]; > char *found = NULL; > int i; > > Index: modules/mappers/mod_rewrite.c > =================================================================== > --- modules/mappers/mod_rewrite.c (revision 126611) > +++ modules/mappers/mod_rewrite.c (working copy) > @@ -244,7 +244,7 @@ > typedef struct { > char *input; /* Input string of RewriteCond */ > char *pattern; /* the RegExp pattern string */ > - regex_t *regexp; /* the precompiled regexp */ > + ap_regex_t *regexp; /* the precompiled regexp */ > int flags; /* Flags which control the match */ > pattern_type ptype; /* pattern type */ > } rewritecond_entry; > @@ -258,7 +258,7 @@ > typedef struct { > apr_array_header_t *rewriteconds;/* the corresponding RewriteCond > entries */ > char *pattern; /* the RegExp pattern string > */ > - regex_t *regexp; /* the RegExp pattern compilation > */ > + ap_regex_t *regexp; /* the RegExp pattern compilation > */ > char *output; /* the Substitution string > */ > int flags; /* Flags which control the substitution > */ > char *forced_mimetype; /* forced MIME type of substitution > */ > @@ -317,7 +317,7 @@ > typedef struct backrefinfo { > char *source; > int nsub; > - regmatch_t regmatch[AP_MAX_REG_MATCH]; > + ap_regmatch_t regmatch[AP_MAX_REG_MATCH]; > } backrefinfo; > > /* single linked list used for > @@ -3045,7 +3045,7 @@ > char *str = apr_pstrdup(cmd->pool, in_str); > rewrite_server_conf *sconf; > rewritecond_entry *newcond; > - regex_t *regexp; > + ap_regex_t *regexp; > char *a1; > char *a2; > char *a3; > @@ -3132,8 +3132,8 @@ > > if (!newcond->ptype) { > regexp = ap_pregcomp(cmd->pool, a2, > - REG_EXTENDED | ((newcond->flags & > CONDFLAG_NOCASE) > - ? REG_ICASE : 0)); > + AP_REG_EXTENDED | ((newcond->flags & > CONDFLAG_NOCASE) > + ? AP_REG_ICASE : 0)); > if (!regexp) { > return apr_pstrcat(cmd->pool, "RewriteCond: cannot compile > regular " > "expression '", a2, "'", NULL); > @@ -3373,7 +3373,7 @@ > char *str = apr_pstrdup(cmd->pool, in_str); > rewrite_server_conf *sconf; > rewriterule_entry *newrule; > - regex_t *regexp; > + ap_regex_t *regexp; > char *a1; > char *a2; > char *a3; > @@ -3418,9 +3418,9 @@ > ++a1; > } > > - regexp = ap_pregcomp(cmd->pool, a1, REG_EXTENDED | > + regexp = ap_pregcomp(cmd->pool, a1, AP_REG_EXTENDED | > ((newrule->flags & RULEFLAG_NOCASE) > - ? REG_ICASE : 0)); > + ? AP_REG_ICASE : 0)); > if (!regexp) { > return apr_pstrcat(cmd->pool, > "RewriteRule: cannot compile regular expression > '", > @@ -3492,7 +3492,7 @@ > char *input = do_expand(p->input, ctx); > apr_finfo_t sb; > request_rec *rsub, *r = ctx->r; > - regmatch_t regmatch[AP_MAX_REG_MATCH]; > + ap_regmatch_t regmatch[AP_MAX_REG_MATCH]; > int rc = 0; > > switch (p->ptype) { > @@ -3645,7 +3645,7 @@ > */ > static int apply_rewrite_rule(rewriterule_entry *p, rewrite_ctx *ctx) > { > - regmatch_t regmatch[AP_MAX_REG_MATCH]; > + ap_regmatch_t regmatch[AP_MAX_REG_MATCH]; > apr_array_header_t *rewriteconds; > rewritecond_entry *conds; > int i, rc; > Index: modules/metadata/mod_headers.c > =================================================================== > --- modules/metadata/mod_headers.c (revision 126611) > +++ modules/metadata/mod_headers.c (working copy) > @@ -116,7 +116,7 @@ > hdr_actions action; > const char *header; > apr_array_header_t *ta; /* Array of format_tag structs */ > - regex_t *regex; > + ap_regex_t *regex; > const char *condition_var; > } header_entry; > > @@ -405,7 +405,7 @@ > } > } > else if (new->action == hdr_echo) { > - regex_t *regex; > + ap_regex_t *regex; > > if (value) { > if (envclause) { > @@ -418,7 +418,7 @@ > return "Header echo only valid on Header " > "directives"; > else { > - regex = ap_pregcomp(cmd->pool, hdr, REG_EXTENDED | REG_NOSUB); > + regex = ap_pregcomp(cmd->pool, hdr, AP_REG_EXTENDED | > AP_REG_NOSUB); > if (regex == NULL) { > return "Header echo regex could not be compiled"; > } > Index: modules/metadata/mod_setenvif.c > =================================================================== > --- modules/metadata/mod_setenvif.c (revision 126611) > +++ modules/metadata/mod_setenvif.c (working copy) > @@ -105,9 +105,9 @@ > }; > typedef struct { > char *name; /* header name */ > - regex_t *pnamereg; /* compiled header name regex */ > + ap_regex_t *pnamereg; /* compiled header name regex */ > char *regex; /* regex to match against */ > - regex_t *preg; /* compiled regex */ > + ap_regex_t *preg; /* compiled regex */ > const apr_strmatch_pattern *pattern; /* non-regex pattern to match */ > apr_table_t *features; /* env vars to set (or unset) */ > enum special special_type; /* is it a "special" header ? */ > @@ -158,7 +158,7 @@ > } > > /* > - * any non-NULL magic constant will do... used to indicate if REG_ICASE > should > + * any non-NULL magic constant will do... used to indicate if AP_REG_ICASE > should > * be used > */ > #define ICASE_MAGIC ((void *)(&setenvif_module)) > @@ -170,8 +170,8 @@ > * -,_,[A-Z\, [a-z] and [0-9]. > * assume the header name is a regular expression. > */ > - regex_t *preg = ap_pregcomp(p, "^[-A-Za-z0-9_]*$", > - (REG_EXTENDED | REG_NOSUB )); > + ap_regex_t *preg = ap_pregcomp(p, "^[-A-Za-z0-9_]*$", > + (AP_REG_EXTENDED | AP_REG_NOSUB )); > ap_assert(preg != NULL); > > if (ap_regexec(preg, name, 0, NULL, 0)) { > @@ -317,7 +317,7 @@ > } > else { > new->preg = ap_pregcomp(cmd->pool, regex, > - (REG_EXTENDED | (icase ? REG_ICASE : > 0))); > + (AP_REG_EXTENDED | (icase ? AP_REG_ICASE > : 0))); > if (new->preg == NULL) { > return apr_pstrcat(cmd->pool, cmd->cmd->name, > " regex could not be compiled.", NULL); > @@ -353,8 +353,8 @@ > */ > if (is_header_regex(cmd->pool, fname)) { > new->pnamereg = ap_pregcomp(cmd->pool, fname, > - (REG_EXTENDED | REG_NOSUB > - | (icase ? REG_ICASE : 0))); > + (AP_REG_EXTENDED | AP_REG_NOSUB > + | (icase ? AP_REG_ICASE : 0))); > if (new->pnamereg == NULL) > return apr_pstrcat(cmd->pool, cmd->cmd->name, > "Header name regex could not be " > @@ -452,7 +452,7 @@ > apr_size_t val_len = 0; > int i, j; > char *last_name; > - regmatch_t regm[AP_MAX_REG_MATCH]; > + ap_regmatch_t regm[AP_MAX_REG_MATCH]; > > if (!ap_get_module_config(r->request_config, &setenvif_module)) { > ap_set_module_config(r->request_config, &setenvif_module, > Index: modules/metadata/mod_usertrack.c > =================================================================== > --- modules/metadata/mod_usertrack.c (revision 126611) > +++ modules/metadata/mod_usertrack.c (working copy) > @@ -83,7 +83,7 @@ > char *cookie_name; > char *cookie_domain; > char *regexp_string; /* used to compile regexp; save for debugging */ > - regex_t *regexp; /* used to find usertrack cookie in cookie header */ > + ap_regex_t *regexp; /* used to find usertrack cookie in cookie header */ > } cookie_dir_rec; > > /* Make Cookie: Now we have to generate something that is going to be > @@ -199,7 +199,7 @@ > cookie_name, > "=([^;,]+)", NULL); > > - dcfg->regexp = ap_pregcomp(p, dcfg->regexp_string, REG_EXTENDED); > + dcfg->regexp = ap_pregcomp(p, dcfg->regexp_string, AP_REG_EXTENDED); > ap_assert(dcfg->regexp != NULL); > } > > @@ -208,7 +208,7 @@ > cookie_dir_rec *dcfg = ap_get_module_config(r->per_dir_config, > &usertrack_module); > const char *cookie_header; > - regmatch_t regm[NUM_SUBS]; > + ap_regmatch_t regm[NUM_SUBS]; > > /* Do not run in subrequests */ > if (!dcfg->enabled || r->main) { > Index: modules/metadata/mod_version.c > =================================================================== > --- modules/metadata/mod_version.c (revision 126611) > +++ modules/metadata/mod_version.c (working copy) > @@ -141,11 +141,11 @@ > static int match_version(apr_pool_t *pool, char *version_string, > const char **error) > { > - regex_t *compiled; > + ap_regex_t *compiled; > const char *to_match; > int rc; > > - compiled = ap_pregcomp(pool, version_string, REG_EXTENDED); > + compiled = ap_pregcomp(pool, version_string, AP_REG_EXTENDED); > if (!compiled) { > *error = "Unable to compile regular expression"; > return 0; > Index: modules/proxy/mod_proxy.c > =================================================================== > --- modules/proxy/mod_proxy.c (revision 126611) > +++ modules/proxy/mod_proxy.c (working copy) > @@ -872,7 +872,7 @@ > struct proxy_remote *new; > char *p, *q; > char *r, *f, *scheme; > - regex_t *reg = NULL; > + ap_regex_t *reg = NULL; > int port; > > r = apr_pstrdup(cmd->pool, r1); > @@ -902,7 +902,7 @@ > port = -1; > *p = '\0'; > if (regex) { > - reg = ap_pregcomp(cmd->pool, f, REG_EXTENDED); > + reg = ap_pregcomp(cmd->pool, f, AP_REG_EXTENDED); > if (!reg) > return "Regular expression for ProxyRemoteMatch could not be > compiled."; > } > @@ -1516,7 +1516,7 @@ > char *old_path = cmd->path; > proxy_dir_conf *conf; > ap_conf_vector_t *new_dir_conf = ap_create_per_dir_config(cmd->pool); > - regex_t *r = NULL; > + ap_regex_t *r = NULL; > const command_rec *thiscmd = cmd->cmd; > > const char *err = ap_check_cmd_context(cmd, > @@ -1550,7 +1550,7 @@ > * scheme? See proxy_fixup() > */ > if (thiscmd->cmd_data) { /* <ProxyMatch> */ > - r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED); > + r = ap_pregcomp(cmd->pool, cmd->path, AP_REG_EXTENDED); > if (!r) { > return "Regex could not be compiled"; > } > @@ -1561,7 +1561,7 @@ > return "<Proxy ~ > block must specify a path"; > if (strncasecmp(cmd->path, "proxy:", 6)) > cmd->path += 6; > - r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED); > + r = ap_pregcomp(cmd->pool, cmd->path, AP_REG_EXTENDED); > if (!r) { > return "Regex could not be compiled"; > } > Index: modules/proxy/mod_proxy.h > =================================================================== > --- modules/proxy/mod_proxy.h (revision 126611) > +++ modules/proxy/mod_proxy.h (working copy) > @@ -95,7 +95,7 @@ > const char *protocol; /* the scheme used to talk to this proxy */ > const char *hostname; /* the hostname of this proxy */ > apr_port_t port; /* the port for this proxy */ > - regex_t *regexp; /* compiled regex (if any) for the remote */ > + ap_regex_t *regexp; /* compiled regex (if any) for the remote */ > int use_regex; /* simple boolean. True if we have a regex > pattern */ > }; > > @@ -189,7 +189,7 @@ > typedef struct { > const char *p; /* The path */ > int p_is_fnmatch; /* Is this path an fnmatch candidate? */ > - regex_t *r; /* Is this a regex? */ > + ap_regex_t *r; /* Is this a regex? */ > } proxy_dir_conf; > > typedef struct { > Index: modules/proxy/proxy_ftp.c > =================================================================== > --- modules/proxy/proxy_ftp.c (revision 126611) > +++ modules/proxy/proxy_ftp.c (working copy) > @@ -423,12 +423,11 @@ > char *filename; > int found = 0; > int eos = 0; > + ap_regex_t *re = NULL; > + ap_regmatch_t re_result[LS_REG_MATCH]; > > - regex_t *re = NULL; > - regmatch_t re_result[LS_REG_MATCH]; > - > /* Compile the output format of "ls -s1" as a fallback for non-unix > ftp listings */ > - re = ap_pregcomp(p, LS_REG_PATTERN, REG_EXTENDED); > + re = ap_pregcomp(p, LS_REG_PATTERN, AP_REG_EXTENDED); > ap_assert(re != NULL); > > /* get a complete line */ > Index: modules/ssl/ssl_expr_eval.c > =================================================================== > --- modules/ssl/ssl_expr_eval.c (revision 126611) > +++ modules/ssl/ssl_expr_eval.c (working copy) > @@ -125,24 +125,24 @@ > ssl_expr *e1; > ssl_expr *e2; > char *word; > - regex_t *regex; > + ap_regex_t *regex; > > e1 = (ssl_expr *)node->node_arg1; > e2 = (ssl_expr *)node->node_arg2; > word = ssl_expr_eval_word(r, e1); > - regex = (regex_t *)(e2->node_arg1); > + regex = (ap_regex_t *)(e2->node_arg1); > return (ap_regexec(regex, word, 0, NULL, 0) == 0); > } > case op_NRE: { > ssl_expr *e1; > ssl_expr *e2; > char *word; > - regex_t *regex; > + ap_regex_t *regex; > > e1 = (ssl_expr *)node->node_arg1; > e2 = (ssl_expr *)node->node_arg2; > word = ssl_expr_eval_word(r, e1); > - regex = (regex_t *)(e2->node_arg1); > + regex = (ap_regex_t *)(e2->node_arg1); > return !(ap_regexec(regex, word, 0, NULL, 0) == 0); > } > default: { > Index: modules/ssl/ssl_expr_parse.c > =================================================================== > --- modules/ssl/ssl_expr_parse.c (revision 126611) > +++ modules/ssl/ssl_expr_parse.c (working copy) > @@ -818,9 +818,9 @@ > case 24: > #line 148 "ssl_expr_parse.y" > { > - regex_t *regex; > + ap_regex_t *regex; > if ((regex = ap_pregcomp(ssl_expr_info.pool, > ssl_expr_yyvsp[0].cpVal, > - REG_EXTENDED|REG_NOSUB)) == NULL) { > + AP_REG_EXTENDED|AP_REG_NOSUB)) == > NULL) { > ssl_expr_error = "Failed to compile regular expression"; > YYERROR; > regex = NULL; > @@ -831,9 +831,9 @@ > case 25: > #line 158 "ssl_expr_parse.y" > { > - regex_t *regex; > + ap_regex_t *regex; > if ((regex = ap_pregcomp(ssl_expr_info.pool, > ssl_expr_yyvsp[0].cpVal, > - REG_EXTENDED|REG_NOSUB|REG_ICASE)) > == NULL) { > + > AP_REG_EXTENDED|AP_REG_NOSUB|AP_REG_ICASE)) == NULL) { > ssl_expr_error = "Failed to compile regular expression"; > YYERROR; > regex = NULL; > Index: modules/ssl/ssl_expr_parse.y > =================================================================== > --- modules/ssl/ssl_expr_parse.y (revision 126611) > +++ modules/ssl/ssl_expr_parse.y (working copy) > @@ -112,18 +112,18 @@ > ; > > regex : T_REGEX { > - regex_t *regex; > + ap_regex_t *regex; > if ((regex = ap_pregcomp(ssl_expr_info.pool, $1, > - REG_EXTENDED|REG_NOSUB)) == NULL) { > + AP_REG_EXTENDED|AP_REG_NOSUB)) == > NULL) { > ssl_expr_error = "Failed to compile regular expression"; > YYERROR; > } > $$ = ssl_expr_make(op_Regex, regex, NULL); > } > | T_REGEX_I { > - regex_t *regex; > + ap_regex_t *regex; > if ((regex = ap_pregcomp(ssl_expr_info.pool, $1, > - REG_EXTENDED|REG_NOSUB|REG_ICASE)) > == NULL) { > + > AP_REG_EXTENDED|AP_REG_NOSUB|AP_REG_ICASE)) == NULL) { > ssl_expr_error = "Failed to compile regular expression"; > YYERROR; > } > Index: server/core.c > =================================================================== > --- server/core.c (revision 126611) > +++ server/core.c (working copy) > @@ -1729,7 +1729,7 @@ > */ > > #ifdef WIN32 > -#define USE_ICASE REG_ICASE > +#define USE_ICASE AP_REG_ICASE > #else > #define USE_ICASE 0 > #endif > @@ -1742,7 +1742,7 @@ > char *old_path = cmd->path; > core_dir_config *conf; > ap_conf_vector_t *new_dir_conf = ap_create_per_dir_config(cmd->pool); > - regex_t *r = NULL; > + ap_regex_t *r = NULL; > const command_rec *thiscmd = cmd->cmd; > > const char *err = ap_check_cmd_context(cmd, > @@ -1775,13 +1775,13 @@ > cmd->path = ap_getword_conf(cmd->pool, &arg); > if (!cmd->path) > return "<Directory ~ > block must specify a path"; > - r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE); > + r = ap_pregcomp(cmd->pool, cmd->path, AP_REG_EXTENDED|USE_ICASE); > if (!r) { > return "Regex could not be compiled"; > } > } > else if (thiscmd->cmd_data) { /* <DirectoryMatch> */ > - r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE); > + r = ap_pregcomp(cmd->pool, cmd->path, AP_REG_EXTENDED|USE_ICASE); > if (!r) { > return "Regex could not be compiled"; > } > @@ -1846,7 +1846,7 @@ > int old_overrides = cmd->override; > char *old_path = cmd->path; > core_dir_config *conf; > - regex_t *r = NULL; > + ap_regex_t *r = NULL; > const command_rec *thiscmd = cmd->cmd; > ap_conf_vector_t *new_url_conf = ap_create_per_dir_config(cmd->pool); > const char *err = ap_check_cmd_context(cmd, > @@ -1869,14 +1869,14 @@ > cmd->override = OR_ALL|ACCESS_CONF; > > if (thiscmd->cmd_data) { /* <LocationMatch> */ > - r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED); > + r = ap_pregcomp(cmd->pool, cmd->path, AP_REG_EXTENDED); > if (!r) { > return "Regex could not be compiled"; > } > } > else if (!strcmp(cmd->path, "~")) { > cmd->path = ap_getword_conf(cmd->pool, &arg); > - r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED); > + r = ap_pregcomp(cmd->pool, cmd->path, AP_REG_EXTENDED); > if (!r) { > return "Regex could not be compiled"; > } > @@ -1914,7 +1914,7 @@ > int old_overrides = cmd->override; > char *old_path = cmd->path; > core_dir_config *conf; > - regex_t *r = NULL; > + ap_regex_t *r = NULL; > const command_rec *thiscmd = cmd->cmd; > core_dir_config *c = mconfig; > ap_conf_vector_t *new_file_conf = ap_create_per_dir_config(cmd->pool); > @@ -1941,14 +1941,14 @@ > } > > if (thiscmd->cmd_data) { /* <FilesMatch> */ > - r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE); > + r = ap_pregcomp(cmd->pool, cmd->path, AP_REG_EXTENDED|USE_ICASE); > if (!r) { > return "Regex could not be compiled"; > } > } > else if (!strcmp(cmd->path, "~")) { > cmd->path = ap_getword_conf(cmd->pool, &arg); > - r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE); > + r = ap_pregcomp(cmd->pool, cmd->path, AP_REG_EXTENDED|USE_ICASE); > if (!r) { > return "Regex could not be compiled"; > } > Index: server/request.c > =================================================================== > --- server/request.c (revision 126611) > +++ server/request.c (working copy) > @@ -1047,7 +1047,7 @@ > continue; > } > > - if (ap_regexec(entry_core->r, r->filename, 0, NULL, REG_NOTEOL)) > { > + if (ap_regexec(entry_core->r, r->filename, 0, NULL, > AP_REG_NOTEOL)) { > continue; > } >