You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by sf...@apache.org on 2010/08/03 21:39:04 UTC

svn commit: r982012 - /httpd/httpd/trunk/modules/cache/cache_util.c

Author: sf
Date: Tue Aug  3 19:39:03 2010
New Revision: 982012

URL: http://svn.apache.org/viewvc?rev=982012&view=rev
Log:
Pass the huge apr_uri_t structs by reference instead of by value

Modified:
    httpd/httpd/trunk/modules/cache/cache_util.c

Modified: httpd/httpd/trunk/modules/cache/cache_util.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/cache/cache_util.c?rev=982012&r1=982011&r2=982012&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/cache/cache_util.c (original)
+++ httpd/httpd/trunk/modules/cache/cache_util.c Tue Aug  3 19:39:03 2010
@@ -29,8 +29,9 @@ extern module AP_MODULE_DECLARE_DATA cac
 /* Determine if "url" matches the hostname, scheme and port and path
  * in "filter". All but the path comparisons are case-insensitive.
  */
-static int uri_meets_conditions(const apr_uri_t filter, const int pathlen,
-        const apr_uri_t url) {
+static int uri_meets_conditions(const apr_uri_t *filter, const int pathlen,
+                                const apr_uri_t *url)
+{
 
     /* Scheme, hostname port and local part. The filter URI and the
      * URI we test may have the following shapes:
@@ -46,14 +47,14 @@ static int uri_meets_conditions(const ap
      */
 
     /* Is the filter is just for a local path or a proxy URI? */
-    if (!filter.scheme) {
-        if (url.scheme || url.hostname) {
+    if (!filter->scheme) {
+        if (url->scheme || url->hostname) {
             return 0;
         }
     }
     else {
         /* The URI scheme must be present and identical except for case. */
-        if (!url.scheme || strcasecmp(filter.scheme, url.scheme)) {
+        if (!url->scheme || strcasecmp(filter->scheme, url->scheme)) {
             return 0;
         }
 
@@ -63,26 +64,26 @@ static int uri_meets_conditions(const ap
          * of the URI * hostname including the ".", otherwise it must match
          * the URI hostname exactly. */
 
-        if (filter.hostname && filter.hostname[0]) {
-            if (filter.hostname[0] == '.') {
-                const size_t fhostlen = strlen(filter.hostname);
-                const size_t uhostlen = url.hostname ? strlen(url.hostname) : 0;
+        if (filter->hostname && filter->hostname[0]) {
+            if (filter->hostname[0] == '.') {
+                const size_t fhostlen = strlen(filter->hostname);
+                const size_t uhostlen = url->hostname ? strlen(url->hostname) : 0;
 
-                if (fhostlen > uhostlen || strcasecmp(filter.hostname,
-                        url.hostname + uhostlen - fhostlen)) {
+                if (fhostlen > uhostlen || strcasecmp(filter->hostname,
+                        url->hostname + uhostlen - fhostlen)) {
                     return 0;
                 }
             }
-            else if (filter.hostname[0] == '*') {
-                const size_t fhostlen = strlen(filter.hostname + 1);
-                const size_t uhostlen = url.hostname ? strlen(url.hostname) : 0;
+            else if (filter->hostname[0] == '*') {
+                const size_t fhostlen = strlen(filter->hostname + 1);
+                const size_t uhostlen = url->hostname ? strlen(url->hostname) : 0;
 
-                if (fhostlen > uhostlen || strcasecmp(filter.hostname + 1,
-                        url.hostname + uhostlen - fhostlen)) {
+                if (fhostlen > uhostlen || strcasecmp(filter->hostname + 1,
+                        url->hostname + uhostlen - fhostlen)) {
                     return 0;
                 }
             }
-            else if (!url.hostname || strcasecmp(filter.hostname, url.hostname)) {
+            else if (!url->hostname || strcasecmp(filter->hostname, url->hostname)) {
                 return 0;
             }
         }
@@ -91,12 +92,12 @@ static int uri_meets_conditions(const ap
          * If the filter or URL port are missing, or the URL port is
          * empty, they default to the port for their scheme. */
 
-        if (!(filter.port_str && !filter.port_str[0])) {
+        if (!(filter->port_str && !filter->port_str[0])) {
             /* NOTE:  ap_port_of_scheme will return 0 if given NULL input */
-            const unsigned fport = filter.port_str ? filter.port
-                    : apr_uri_port_of_scheme(filter.scheme);
-            const unsigned uport = (url.port_str && url.port_str[0])
-                    ? url.port : apr_uri_port_of_scheme(url.scheme);
+            const unsigned fport = filter->port_str ? filter->port
+                    : apr_uri_port_of_scheme(filter->scheme);
+            const unsigned uport = (url->port_str && url->port_str[0])
+                    ? url->port : apr_uri_port_of_scheme(url->scheme);
 
             if (fport != uport) {
                 return 0;
@@ -107,8 +108,8 @@ static int uri_meets_conditions(const ap
     /* For HTTP caching purposes, an empty (NULL) path is equivalent to
      * a single "/" path. RFCs 3986/2396
      */
-    if (!url.path) {
-        if (*filter.path == '/' && pathlen == 1) {
+    if (!url->path) {
+        if (*filter->path == '/' && pathlen == 1) {
             return 1;
         }
         else {
@@ -119,7 +120,7 @@ static int uri_meets_conditions(const ap
     /* Url has met all of the filter conditions so far, determine
      * if the paths match.
      */
-    return !strncmp(filter.path, url.path, pathlen);
+    return !strncmp(filter->path, url->path, pathlen);
 }
 
 CACHE_DECLARE(cache_provider_list *)ap_cache_get_providers(request_rec *r,
@@ -133,7 +134,7 @@ CACHE_DECLARE(cache_provider_list *)ap_c
     for (i = 0; i < conf->cacheenable->nelts; i++) {
         struct cache_enable *ent =
                                 (struct cache_enable *)conf->cacheenable->elts;
-        if (uri_meets_conditions(ent[i].url, ent[i].pathlen, uri)) {
+        if (uri_meets_conditions(&ent[i].url, ent[i].pathlen, &uri)) {
             /* Fetch from global config and add to the list. */
             cache_provider *provider;
             provider = ap_lookup_provider(CACHE_PROVIDER_GROUP, ent[i].type,
@@ -170,7 +171,7 @@ CACHE_DECLARE(cache_provider_list *)ap_c
     for (i = 0; i < conf->cachedisable->nelts; i++) {
         struct cache_disable *ent =
                                (struct cache_disable *)conf->cachedisable->elts;
-        if (uri_meets_conditions(ent[i].url, ent[i].pathlen, uri)) {
+        if (uri_meets_conditions(&ent[i].url, ent[i].pathlen, &uri)) {
             /* Stop searching now. */
             return NULL;
         }