mirror of
https://github.com/apache/httpd.git
synced 2025-07-02 18:02:27 +03:00
Move the POSIX reg* implementations into the ap_* namespace;
internalise the ap_reg*<->PCRE wrapper: * configure.in: Add srclib/pcre to the include path. * include/ap_regex.h: Renamed from include/pcreposix.h. Prefix all constants with AP_; prefix all functions and types with ap_. Define AP_DECLARE to nothing if necessary. Remove regcomp error codes. * include/httpd.h: Include ap_regex.h not pcreposix.h. (ap_pregcomp, ap_regexec, ap_regfree): s/regex_t/ap_regex_t/. (ap_regexec, ap_regerror): Prototypes moved to ap_regex.h. * server/util.c (regex_cleanup, ap_pregcomp, ap_pregsub, ap_pregfree): Adjust for ap_ prefixed types. (ap_regexec, ap_regerror): Removed. * server/Makefile.in: Build util_pcre.c. * server/util_pcre.c: Copied from srclib/pcre/pcreposix.c; remove use of PCRE-internals to do error mapping; rename types to add AP_/ap_ prefixes as above. Use APR includes. (ap_regerror): Use apr_snprintf. * srclib/pcre/Makefile.in: Don't build pcreposix.c into libpcre.la. * modules/*: Update to use new type and constant names. PR: 27750 (part one) Submitted by: Andres Salomon <dilinger voxel.net>, Joe Orton git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@153384 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
145
include/ap_regex.h
Normal file
145
include/ap_regex.h
Normal file
@ -0,0 +1,145 @@
|
||||
/* Copyright 1999-2005 The Apache Software Foundation or its licensors, as
|
||||
* applicable.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* 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.
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef AP_REGEX_H
|
||||
#define AP_REGEX_H
|
||||
|
||||
/* 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 for ap_regexec: */
|
||||
|
||||
#define AP_REG_ICASE 0x01 /** use a case-insensitive match */
|
||||
#define AP_REG_NEWLINE 0x02 /** don't match newlines against '.' etc */
|
||||
#define AP_REG_NOTBOL 0x04 /** ^ will not match against start-of-string */
|
||||
#define AP_REG_NOTEOL 0x08 /** $ will not match against end-of-string */
|
||||
|
||||
#define AP_REG_EXTENDED (0) /** unused */
|
||||
#define AP_REG_NOSUB (0) /** unused */
|
||||
|
||||
/* Error values: */
|
||||
enum {
|
||||
AP_REG_ASSERT = 1, /** internal error ? */
|
||||
AP_REG_ESPACE, /** failed to get memory */
|
||||
AP_REG_INVARG, /** invalid argument */
|
||||
AP_REG_NOMATCH /** match failed */
|
||||
};
|
||||
|
||||
/* The structure representing a compiled regular expression. */
|
||||
typedef struct {
|
||||
void *re_pcre;
|
||||
size_t re_nsub;
|
||||
size_t re_erroffset;
|
||||
} ap_regex_t;
|
||||
|
||||
typedef int regoff_t;
|
||||
|
||||
/* The structure in which a captured offset is returned. */
|
||||
typedef struct {
|
||||
regoff_t rm_so;
|
||||
regoff_t rm_eo;
|
||||
} ap_regmatch_t;
|
||||
|
||||
#ifndef AP_DECLARE
|
||||
#define AP_DECLARE(x) x
|
||||
#endif /* AP_DECLARE */
|
||||
|
||||
/* The functions */
|
||||
|
||||
/**
|
||||
* Compile a regeular expression.
|
||||
* @param preg Returned compiled regex
|
||||
* @param regex The regular expression string
|
||||
* @param cflags Must be zero (currently).
|
||||
* @return Zero on success or non-zero on error
|
||||
*/
|
||||
AP_DECLARE(int) ap_regcomp(ap_regex_t *preg, const char *regex, int cflags);
|
||||
|
||||
/**
|
||||
* 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 AP_REG_* flags
|
||||
* @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
|
||||
|
||||
#endif /* AP_REGEX_T */
|
||||
|
Reference in New Issue
Block a user