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;
}