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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to