]> granicus.if.org Git - apache/commitdiff
minor optimizations in lookup_map_program function.
authorAndré Malo <nd@apache.org>
Tue, 29 Jul 2003 00:33:13 +0000 (00:33 +0000)
committerAndré Malo <nd@apache.org>
Tue, 29 Jul 2003 00:33:13 +0000 (00:33 +0000)
- make it compile time configurable, how long
  a response from a rewrite map prg may be.
- avoid unnecessary memory operations

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@100832 13f79535-47bb-0310-9956-ffa450edef68

modules/mappers/mod_rewrite.c

index 54f3d13524a4f3b3c12eebc7ad8a4a78fb7d6b8b..437c0e55bba963f89ed5bd0f9ce3f1d6342bb0a8 100644 (file)
 #define REWRITE_MAX_TXT_MAP_LINE 1024
 #endif
 
+/* max response length (incl.\n) in prg rewrite maps */
+#ifndef REWRITE_MAX_PRG_MAP_LINE
+#define REWRITE_MAX_PRG_MAP_LINE 2048
+#endif
+
 /*
  * +-------------------------------------------------------+
  * |                                                       |
@@ -1270,9 +1275,9 @@ static char *lookup_map_dbmfile(request_rec *r, const char *file,
 static char *lookup_map_program(request_rec *r, apr_file_t *fpin,
                                 apr_file_t *fpout, char *key)
 {
-    char buf[LONG_STRING_LEN];
+    char buf[REWRITE_MAX_PRG_MAP_LINE];
     char c;
-    int i;
+    apr_size_t i;
     apr_size_t nbytes;
     apr_status_t rv;
 
@@ -1291,7 +1296,6 @@ static char *lookup_map_program(request_rec *r, apr_file_t *fpin,
     }
 
     /* take the lock */
-
     if (rewrite_mapr_lock_acquire) {
         rv = apr_global_mutex_lock(rewrite_mapr_lock_acquire);
         if (rv != APR_SUCCESS) {
@@ -1322,7 +1326,7 @@ static char *lookup_map_program(request_rec *r, apr_file_t *fpin,
     i = 0;
     nbytes = 1;
     apr_file_read(fpout, &c, &nbytes);
-    while (nbytes == 1 && (i < LONG_STRING_LEN-1)) {
+    while (nbytes == 1 && (i < REWRITE_MAX_PRG_MAP_LINE)) {
         if (c == '\n') {
             break;
         }
@@ -1330,7 +1334,6 @@ static char *lookup_map_program(request_rec *r, apr_file_t *fpin,
 
         apr_file_read(fpout, &c, &nbytes);
     }
-    buf[i] = '\0';
 
     /* give the lock back */
     if (rewrite_mapr_lock_acquire) {
@@ -1343,12 +1346,11 @@ static char *lookup_map_program(request_rec *r, apr_file_t *fpin,
         }
     }
 
-    if (strcasecmp(buf, "NULL") == 0) {
+    if (i == 4 && strncasecmp(buf, "NULL", 4) == 0) {
         return NULL;
     }
-    else {
-        return apr_pstrdup(r->pool, buf);
-    }
+
+    return apr_pstrmemdup(r->pool, buf, i);
 }
 
 /*