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