You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Guenter Knauf <ef...@gmx.net> on 2004/02/26 20:39:04 UTC
Re: [PATCH] use ap_ prefixed PCRE functions - take 3
Hi Kurt,
> I've reviewed your patch and have some comments included inline below.
> regcomp and ap_pregcomp are not interchangeable like this. ap_pregcomp
> needs an apr_pool to be passed to it and it returns the regex_t. I
> think (apr_pool_t *)uriEnv->pool->_private is correct here (Henri?,
> Jean-Frederic?).
ok, I believe I got that now. For easier review I copy here the relevant parts of the headers, followed by the new patch. Please review again - if it is ok so, I put the patchfile on my host, and add the other suggestions to the makefiles.
thanks, Guenter.
/**
* Compile a regular expression to be used later
* @param p The pool to allocate from
* @param pattern the regular expression to compile
* @param cflags The bitwise or of one or more of the following:
* @li #REG_EXTENDED - Use POSIX extended Regular Expressions
* @li #REG_ICASE - Ignore case
* @li #REG_NOSUB - Support for substring addressing of matches
* not required
* @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);
/**
* 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);
extern int regcomp(regex_t *, const char *, int);
extern int regexec(regex_t *, const char *, size_t, regmatch_t *, int);
###############################################################################
--- jk_uriEnv.c.orig Tue Feb 24 12:30:10 2004
+++ jk_uriEnv.c Thu Feb 26 20:34:46 2004
@@ -28,9 +28,15 @@
#include "jk_uriMap.h"
#include "jk_registry.h"
+#ifdef HAS_AP_PCRE
+#include "httpd.h"
+#define PREGCOMP ap_pregcomp
+#else
#ifdef HAS_PCRE
#include "pcre.h"
#include "pcreposix.h"
+#define PREGCOMP regcomp
+#endif
#endif
/* return non-zero if pattern has any glob chars in it */
@@ -65,7 +71,7 @@
int pcre = 0;
if (*name == '$') {
-#ifdef HAS_PCRE
+#if defined(HAS_PCRE) || defined(HAS_AP_PCRE)
++name;
uriEnv->uri = uriEnv->pool->pstrdup(env, uriEnv->pool, name);
uriEnv->match_type = MATCH_TYPE_REGEXP;
@@ -74,7 +80,11 @@
name);
{
regex_t *preg = (regex_t *)uriEnv->pool->calloc( env, uriEnv->pool, sizeof(regex_t));
+#ifdef HAS_AP_PCRE
+ if ((preg = ap_pregcomp((apr_pool_t *)uriEnv->pool->_private, uriEnv->uri, REG_EXTENDED)) == NULL) {
+#else
if (regcomp(preg, uriEnv->uri, REG_EXTENDED)) {
+#endif
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriEnv.parseName() error compiling regexp %s\n",
uri);
@@ -132,14 +142,18 @@
if (pcre) {
++uri;
uriEnv->match_type = MATCH_TYPE_REGEXP;
-#ifdef HAS_PCRE
+#if defined(HAS_PCRE) || defined(HAS_AP_PCRE)
uriEnv->uri = uriEnv->pool->pstrdup(env, uriEnv->pool, uri);
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriEnv.parseName() parsing regexp %s\n",
uri);
{
regex_t *preg = (regex_t *)uriEnv->pool->calloc( env, uriEnv->pool, sizeof(regex_t));
+#ifdef HAS_AP_PCRE
+ if ((preg = ap_pregcomp((apr_pool_t *)uriEnv->pool->_private, uriEnv->uri, REG_EXTENDED)) == NULL) {
+#else
if (regcomp(preg, uriEnv->uri, REG_EXTENDED)) {
+#endif
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriEnv.parseName() error compiling regexp %s\n",
uri);
###############################################################################
--- jk_uriMap.c.orig Tue Feb 24 12:30:10 2004
+++ jk_uriMap.c Thu Feb 26 19:03:32 2004
@@ -34,9 +34,15 @@
#include "jk_uriMap.h"
#include "jk_registry.h"
+#ifdef HAS_AP_PCRE
+#include "httpd.h"
+#define REGEXEC ap_regexec
+#else
#ifdef HAS_PCRE
#include "pcre.h"
#include "pcreposix.h"
+#define REGEXEC regexec
+#endif
#endif
static INLINE const char *jk2_findExtension(jk_env_t *env, const char *uri);
@@ -304,7 +310,7 @@
return uriMap->vhosts->get(env, uriMap->vhosts, "*");
}
-#ifdef HAS_PCRE
+#if defined(HAS_PCRE) || defined(HAS_AP_PCRE)
static jk_uriEnv_t *jk2_uriMap_regexpMap(jk_env_t *env, jk_uriMap_t *uriMap,
jk_map_t *mapTable, const char *uri)
{
@@ -317,7 +323,7 @@
if (uwr->regexp) {
regex_t *r = (regex_t *)uwr->regexp;
regmatch_t regm[10];
- if (!regexec(r, uri, r->re_nsub + 1, regm, 0)) {
+ if (!REGEXEC(r, uri, r->re_nsub + 1, regm, 0)) {
return uwr;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org
Re: [PATCH] use ap_ prefixed PCRE functions - take 4
Posted by Guenter Knauf <ef...@gmx.net>.
Hi Kurt,
> Just a tweak or two and its ready. The preg calloc only applies to the
> HAS_PCRE case and PREGCOMP isn't needed. Otherwise it looks good. I'll
> test and commit it tomorrow.
thanks again for reviewing and comments!
Guenter.
http://www.gknw.com/test/pcre_patch4
###############################################################################
--- ./jk/native2/common/jk_uriEnv.c.orig 2004-02-24 12:30:10.000000000 +0100
+++ ./jk/native2/common/jk_uriEnv.c 2004-02-27 00:04:20.000000000 +0100
@@ -28,10 +28,14 @@
#include "jk_uriMap.h"
#include "jk_registry.h"
+#ifdef HAS_AP_PCRE
+#include "httpd.h"
+#else
#ifdef HAS_PCRE
#include "pcre.h"
#include "pcreposix.h"
#endif
+#endif
/* return non-zero if pattern has any glob chars in it */
@@ -65,7 +69,7 @@
int pcre = 0;
if (*name == '$') {
-#ifdef HAS_PCRE
+#if defined(HAS_PCRE) || defined(HAS_AP_PCRE)
++name;
uriEnv->uri = uriEnv->pool->pstrdup(env, uriEnv->pool, name);
uriEnv->match_type = MATCH_TYPE_REGEXP;
@@ -73,8 +77,13 @@
"uriEnv.parseName() parsing %s regexp\n",
name);
{
+#ifdef HAS_AP_PCRE
+ regex_t *preg = ap_pregcomp((apr_pool_t *)uriEnv->pool->_private, uriEnv->uri, REG_EXTENDED);
+ if (preg == NULL) {
+#else
regex_t *preg = (regex_t *)uriEnv->pool->calloc( env, uriEnv->pool, sizeof(regex_t));
if (regcomp(preg, uriEnv->uri, REG_EXTENDED)) {
+#endif
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriEnv.parseName() error compiling regexp %s\n",
uri);
@@ -132,14 +141,19 @@
if (pcre) {
++uri;
uriEnv->match_type = MATCH_TYPE_REGEXP;
-#ifdef HAS_PCRE
+#if defined(HAS_PCRE) || defined(HAS_AP_PCRE)
uriEnv->uri = uriEnv->pool->pstrdup(env, uriEnv->pool, uri);
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriEnv.parseName() parsing regexp %s\n",
uri);
{
+#ifdef HAS_AP_PCRE
+ regex_t *preg = ap_pregcomp((apr_pool_t *)uriEnv->pool->_private, uriEnv->uri, REG_EXTENDED);
+ if (preg == NULL) {
+#else
regex_t *preg = (regex_t *)uriEnv->pool->calloc( env, uriEnv->pool, sizeof(regex_t));
if (regcomp(preg, uriEnv->uri, REG_EXTENDED)) {
+#endif
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriEnv.parseName() error compiling regexp %s\n",
uri);
###############################################################################
--- ./jk/native2/common/jk_uriMap.c.orig 2004-02-24 12:30:10.000000000 +0100
+++ ./jk/native2/common/jk_uriMap.c 2004-02-26 19:03:32.000000000 +0100
@@ -34,9 +34,15 @@
#include "jk_uriMap.h"
#include "jk_registry.h"
+#ifdef HAS_AP_PCRE
+#include "httpd.h"
+#define REGEXEC ap_regexec
+#else
#ifdef HAS_PCRE
#include "pcre.h"
#include "pcreposix.h"
+#define REGEXEC regexec
+#endif
#endif
static INLINE const char *jk2_findExtension(jk_env_t *env, const char *uri);
@@ -304,7 +310,7 @@
return uriMap->vhosts->get(env, uriMap->vhosts, "*");
}
-#ifdef HAS_PCRE
+#if defined(HAS_PCRE) || defined(HAS_AP_PCRE)
static jk_uriEnv_t *jk2_uriMap_regexpMap(jk_env_t *env, jk_uriMap_t *uriMap,
jk_map_t *mapTable, const char *uri)
{
@@ -317,7 +323,7 @@
if (uwr->regexp) {
regex_t *r = (regex_t *)uwr->regexp;
regmatch_t regm[10];
- if (!regexec(r, uri, r->re_nsub + 1, regm, 0)) {
+ if (!REGEXEC(r, uri, r->re_nsub + 1, regm, 0)) {
return uwr;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org
Re: [PATCH] use ap_ prefixed PCRE functions - take 3
Posted by Guenter Knauf <ef...@gmx.net>.
Hi Kurt,
> Just a tweak or two and its ready. The preg calloc only applies to the
> HAS_PCRE case and PREGCOMP isn't needed. Otherwise it looks good. I'll
> test and commit it tomorrow.
yep, forgot to remove PREGCOMP.
you mean perhaps so:
{
#ifdef HAS_AP_PCRE
regex_t *preg = ap_pregcomp((apr_pool_t *)uriEnv->pool->_private, uriEnv->uri, REG_EXTENDED);
if (preg == NULL) {
#else
regex_t *preg = (regex_t *)uriEnv->pool->calloc( env, uriEnv->pool, sizeof(regex_t));
if (regcomp(preg, uriEnv->uri, REG_EXTENDED)) {
#endif
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriEnv.parseName() error compiling regexp %s\n",
uri);
return JK_ERR;
}
uriEnv->regexp = preg;
}
return JK_OK;
#else
env->l->jkLog(env, env->l, JK_LOG_INFO,
"uriEnv.parseName() parsing regexp %s not supported\n",
uri);
return JK_ERR;
#endif
}
Guenter.
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org
Re: [PATCH] use ap_ prefixed PCRE functions - take 3
Posted by Kurt Miller <tr...@apache.org>.
Hi Guenter,
Just a tweak or two and its ready. The preg calloc only applies to the
HAS_PCRE case and PREGCOMP isn't needed. Otherwise it looks good. I'll
test and commit it tomorrow.
-Kurt
From: "Guenter Knauf" <ef...@gmx.net>
> Hi Kurt,
> > I've reviewed your patch and have some comments included inline
below.
>
> > regcomp and ap_pregcomp are not interchangeable like this.
ap_pregcomp
> > needs an apr_pool to be passed to it and it returns the regex_t. I
> > think (apr_pool_t *)uriEnv->pool->_private is correct here
(Henri?,
> > Jean-Frederic?).
> ok, I believe I got that now. For easier review I copy here the
relevant parts of the headers, followed by the new patch. Please
review again - if it is ok so, I put the patchfile on my host, and add
the other suggestions to the makefiles.
>
> thanks, Guenter.
>
> /**
> * Compile a regular expression to be used later
> * @param p The pool to allocate from
> * @param pattern the regular expression to compile
> * @param cflags The bitwise or of one or more of the following:
> * @li #REG_EXTENDED - Use POSIX extended Regular Expressions
> * @li #REG_ICASE - Ignore case
> * @li #REG_NOSUB - Support for substring addressing of matches
> * not required
> * @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);
>
> /**
> * 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);
>
>
> extern int regcomp(regex_t *, const char *, int);
> extern int regexec(regex_t *, const char *, size_t, regmatch_t *,
int);
>
>
>
######################################################################
#########
> --- jk_uriEnv.c.orig Tue Feb 24 12:30:10 2004
> +++ jk_uriEnv.c Thu Feb 26 20:34:46 2004
> @@ -28,9 +28,15 @@
> #include "jk_uriMap.h"
> #include "jk_registry.h"
>
> +#ifdef HAS_AP_PCRE
> +#include "httpd.h"
> +#define PREGCOMP ap_pregcomp
> +#else
> #ifdef HAS_PCRE
> #include "pcre.h"
> #include "pcreposix.h"
> +#define PREGCOMP regcomp
> +#endif
> #endif
>
> /* return non-zero if pattern has any glob chars in it */
> @@ -65,7 +71,7 @@
> int pcre = 0;
>
> if (*name == '$') {
> -#ifdef HAS_PCRE
> +#if defined(HAS_PCRE) || defined(HAS_AP_PCRE)
> ++name;
> uriEnv->uri = uriEnv->pool->pstrdup(env, uriEnv->pool,
name);
> uriEnv->match_type = MATCH_TYPE_REGEXP;
> @@ -74,7 +80,11 @@
> name);
> {
> regex_t *preg = (regex_t *)uriEnv->pool->calloc( env,
uriEnv->pool, sizeof(regex_t));
> +#ifdef HAS_AP_PCRE
> + if ((preg = ap_pregcomp((apr_pool_t
*)uriEnv->pool->_private, uriEnv->uri, REG_EXTENDED)) == NULL) {
> +#else
> if (regcomp(preg, uriEnv->uri, REG_EXTENDED)) {
> +#endif
> env->l->jkLog(env, env->l, JK_LOG_DEBUG,
> "uriEnv.parseName() error compiling
regexp %s\n",
> uri);
> @@ -132,14 +142,18 @@
> if (pcre) {
> ++uri;
> uriEnv->match_type = MATCH_TYPE_REGEXP;
> -#ifdef HAS_PCRE
> +#if defined(HAS_PCRE) || defined(HAS_AP_PCRE)
> uriEnv->uri = uriEnv->pool->pstrdup(env, uriEnv->pool,
uri);
> env->l->jkLog(env, env->l, JK_LOG_DEBUG,
> "uriEnv.parseName() parsing regexp %s\n",
> uri);
> {
> regex_t *preg = (regex_t *)uriEnv->pool->calloc( env,
uriEnv->pool, sizeof(regex_t));
> +#ifdef HAS_AP_PCRE
> + if ((preg = ap_pregcomp((apr_pool_t
*)uriEnv->pool->_private, uriEnv->uri, REG_EXTENDED)) == NULL) {
> +#else
> if (regcomp(preg, uriEnv->uri, REG_EXTENDED)) {
> +#endif
> env->l->jkLog(env, env->l, JK_LOG_DEBUG,
> "uriEnv.parseName() error compiling
regexp %s\n",
> uri);
>
######################################################################
#########
> --- jk_uriMap.c.orig Tue Feb 24 12:30:10 2004
> +++ jk_uriMap.c Thu Feb 26 19:03:32 2004
> @@ -34,9 +34,15 @@
> #include "jk_uriMap.h"
> #include "jk_registry.h"
>
> +#ifdef HAS_AP_PCRE
> +#include "httpd.h"
> +#define REGEXEC ap_regexec
> +#else
> #ifdef HAS_PCRE
> #include "pcre.h"
> #include "pcreposix.h"
> +#define REGEXEC regexec
> +#endif
> #endif
>
> static INLINE const char *jk2_findExtension(jk_env_t *env, const
char *uri);
> @@ -304,7 +310,7 @@
> return uriMap->vhosts->get(env, uriMap->vhosts, "*");
> }
>
> -#ifdef HAS_PCRE
> +#if defined(HAS_PCRE) || defined(HAS_AP_PCRE)
> static jk_uriEnv_t *jk2_uriMap_regexpMap(jk_env_t *env, jk_uriMap_t
*uriMap,
> jk_map_t *mapTable, const
char *uri)
> {
> @@ -317,7 +323,7 @@
> if (uwr->regexp) {
> regex_t *r = (regex_t *)uwr->regexp;
> regmatch_t regm[10];
> - if (!regexec(r, uri, r->re_nsub + 1, regm, 0)) {
> + if (!REGEXEC(r, uri, r->re_nsub + 1, regm, 0)) {
> return uwr;
> }
> }
>
>
>
> --------------------------------------------------------------------
-
> To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org