View | Details | Raw Unified | Return to bug 7991
Collapse All | Expand All

(-)httpd-2.0.35/modules/metadata/mod_expires.c (-1 / +1 lines)
Lines 455-461 static int add_expires(request_rec *r) Link Here
455
    if (r->content_type == NULL)
455
    if (r->content_type == NULL)
456
        code = NULL;
456
        code = NULL;
457
    else
457
    else
458
        code = (char *) apr_table_get(conf->expiresbytype, 
458
        code = (char *) apr_table_match(conf->expiresbytype, 
459
		ap_field_noparam(r->pool, r->content_type));
459
		ap_field_noparam(r->pool, r->content_type));
460
460
461
    if (code == NULL) {
461
    if (code == NULL) {
(-)httpd-2.0.35/srclib/apr/include/apr_strings.h (+17 lines)
Lines 322-327 APR_DECLARE(char *) apr_off_t_toa(apr_po Link Here
322
 * @remark All negative sizes report '  - ', apr_strfsize only formats positive values.
322
 * @remark All negative sizes report '  - ', apr_strfsize only formats positive values.
323
 */
323
 */
324
APR_DECLARE(char *) apr_strfsize(apr_off_t size, char *buf);
324
APR_DECLARE(char *) apr_strfsize(apr_off_t size, char *buf);
325
326
/**
327
 * Determine if a string matches a patterm containing the wildcards '?' or '*'
328
 * @param str The string to check
329
 * @param exp The pattern to match against
330
 * @return 1 if the two strings match, 0 otherwise
331
 */
332
APR_DECLARE(int) apr_strcmp_match(const char *str, const char *exp);
333
/**
334
 * Determine if a string matches a patterm containing the wildcards '?' or '*',
335
 * ignoring case
336
 * @param str The string to check
337
 * @param exp The pattern to match against
338
 * @return 1 if the two strings match, 0 otherwise
339
 */
340
APR_DECLARE(int) apr_strcasecmp_match(const char *str, const char *exp);
341
325
/** @} */
342
/** @} */
326
#ifdef __cplusplus
343
#ifdef __cplusplus
327
}
344
}
(-)httpd-2.0.35/srclib/apr/include/apr_tables.h (+12 lines)
Lines 260-265 APR_DECLARE(void) apr_table_clear(apr_ta Link Here
260
APR_DECLARE(const char *) apr_table_get(const apr_table_t *t, const char *key);
260
APR_DECLARE(const char *) apr_table_get(const apr_table_t *t, const char *key);
261
261
262
/**
262
/**
263
 * Get the value associated with a given key from the table.  After this call,
264
 * The data is still in the table
265
 * This allows wildcards in the table keys, so a search for, eg, "image/gif"
266
 * may return the value for the key "image/*" in the table.
267
 * @param t The table to search for the key
268
 * @param key The key to search for
269
 * @return The value associated with the key
270
 * @deffunc const char *apr_table_match(const apr_table_t *t, const char *key)
271
 */
272
APR_DECLARE(const char *) apr_table_match(const apr_table_t *t, const char *key);
273
274
/**
263
 * Add a key/value pair to a table, if another element already exists with the
275
 * Add a key/value pair to a table, if another element already exists with the
264
 * same key, this will over-write the old data.
276
 * same key, this will over-write the old data.
265
 * @param t The table to add the data to.
277
 * @param t The table to add the data to.
(-)httpd-2.0.35/srclib/apr/strings/Makefile.in (-1 / +2 lines)
Lines 5-11 TARGETS = \ Link Here
5
	apr_strnatcmp.lo \
5
	apr_strnatcmp.lo \
6
	apr_strings.lo \
6
	apr_strings.lo \
7
	apr_fnmatch.lo \
7
	apr_fnmatch.lo \
8
	apr_strtok.lo
8
	apr_strtok.lo \
9
	apr_strmatch.lo
9
10
10
# bring in rules.mk for standard functionality
11
# bring in rules.mk for standard functionality
11
@INCLUDE_RULES@
12
@INCLUDE_RULES@
(-)httpd-2.0.35/srclib/apr/strings/apr_strmatch.c (+111 lines)
Line 0 Link Here
1
/* ====================================================================
2
 * The Apache Software License, Version 1.1
3
 *
4
 * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
5
 * reserved.
6
 *
7
 * Redistribution and use in source and binary forms, with or without
8
 * modification, are permitted provided that the following conditions
9
 * are met:
10
 *
11
 * 1. Redistributions of source code must retain the above copyright
12
 *    notice, this list of conditions and the following disclaimer.
13
 *
14
 * 2. Redistributions in binary form must reproduce the above copyright
15
 *    notice, this list of conditions and the following disclaimer in
16
 *    the documentation and/or other materials provided with the
17
 *    distribution.
18
 *
19
 * 3. The end-user documentation included with the redistribution,
20
 *    if any, must include the following acknowledgment:
21
 *       "This product includes software developed by the
22
 *        Apache Software Foundation (http://www.apache.org/)."
23
 *    Alternately, this acknowledgment may appear in the software itself,
24
 *    if and wherever such third-party acknowledgments normally appear.
25
 *
26
 * 4. The names "Apache" and "Apache Software Foundation" must
27
 *    not be used to endorse or promote products derived from this
28
 *    software without prior written permission. For written
29
 *    permission, please contact apache@apache.org.
30
 *
31
 * 5. Products derived from this software may not be called "Apache",
32
 *    nor may "Apache" appear in their name, without prior written
33
 *    permission of the Apache Software Foundation.
34
 *
35
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46
 * SUCH DAMAGE.
47
 * ====================================================================
48
 *
49
 * This software consists of voluntary contributions made by many
50
 * individuals on behalf of the Apache Software Foundation.  For more
51
 * information on the Apache Software Foundation, please see
52
 * <http://www.apache.org/>.
53
 */
54
55
#include "apr.h"
56
#include "apr_strings.h"
57
#include "apr_lib.h"
58
59
/* Copied from server/util.c, changing ap_ to apr_ */
60
/* Match = 0, NoMatch = 1, Abort = -1
61
 * Based loosely on sections of wildmat.c by Rich Salz
62
 * Hmmm... shouldn't this really go component by component?
63
 */
64
APR_DECLARE(int) apr_strcmp_match(const char *str, const char *exp)
65
{
66
    int x, y;
67
68
    for (x = 0, y = 0; exp[y]; ++y, ++x) {
69
	if ((!str[x]) && (exp[y] != '*'))
70
	    return -1;
71
	if (exp[y] == '*') {
72
	    while (exp[++y] == '*');
73
	    if (!exp[y])
74
		return 0;
75
	    while (str[x]) {
76
		int ret;
77
		if ((ret = apr_strcmp_match(&str[x++], &exp[y])) != 1)
78
		    return ret;
79
	    }
80
	    return -1;
81
	}
82
	else if ((exp[y] != '?') && (str[x] != exp[y]))
83
	    return 1;
84
    }
85
    return (str[x] != '\0');
86
}
87
88
APR_DECLARE(int) apr_strcasecmp_match(const char *str, const char *exp)
89
{
90
    int x, y;
91
92
    for (x = 0, y = 0; exp[y]; ++y, ++x) {
93
	if ((!str[x]) && (exp[y] != '*'))
94
	    return -1;
95
	if (exp[y] == '*') {
96
	    while (exp[++y] == '*');
97
	    if (!exp[y])
98
		return 0;
99
	    while (str[x]) {
100
		int ret;
101
		if ((ret = apr_strcasecmp_match(&str[x++], &exp[y])) != 1)
102
		    return ret;
103
	    }
104
	    return -1;
105
	}
106
	else if ((exp[y] != '?') && (apr_tolower(str[x]) != apr_tolower(exp[y])))
107
	    return 1;
108
    }
109
    return (str[x] != '\0');
110
}
111
(-)httpd-2.0.35/srclib/apr/tables/apr_tables.c (+21 lines)
Lines 412-417 APR_DECLARE(const char *) apr_table_get( Link Here
412
    return NULL;
412
    return NULL;
413
}
413
}
414
414
415
APR_DECLARE(const char *) apr_table_match(const apr_table_t *t, const char *key)
416
{
417
    apr_table_entry_t *elts = (apr_table_entry_t *) t->a.elts;
418
    int i;
419
    apr_uint32_t checksum;
420
421
    if (key == NULL) {
422
	return NULL;
423
    }
424
425
    COMPUTE_KEY_CHECKSUM(key, checksum);
426
    for (i = 0; i < t->a.nelts; ++i) {
427
	if (((checksum == elts[i].key_checksum) && !strcasecmp(elts[i].key, key))
428
	    || !apr_strcasecmp_match(key, elts[i].key)) {
429
	    return elts[i].val;
430
	}
431
    }
432
433
    return NULL;
434
}
435
415
APR_DECLARE(void) apr_table_set(apr_table_t *t, const char *key,
436
APR_DECLARE(void) apr_table_set(apr_table_t *t, const char *key,
416
			       const char *val)
437
			       const char *val)
417
{
438
{

Return to bug 7991