Annotation of /trunk/apache2/patches/apache2-2.2.4-mod_dir-adddirectoryindex.patch
Parent Directory | Revision Log
Revision 244 -
(hide annotations)
(download)
Sat Jul 7 20:21:32 2007 UTC (17 years, 2 months ago) by niro
File size: 2800 byte(s)
Sat Jul 7 20:21:32 2007 UTC (17 years, 2 months ago) by niro
File size: 2800 byte(s)
-provides AddDirectoryIndex directive
1 | niro | 244 | diff -ur httpd-2.0.58.orig/modules/mappers/mod_dir.c httpd-2.0.58/modules/mappers/mod_dir.c |
2 | --- httpd-2.0.58.orig/modules/mappers/mod_dir.c 2007-03-31 19:36:23.000000000 -0400 | ||
3 | +++ httpd-2.0.58/modules/mappers/mod_dir.c 2007-03-31 19:39:22.000000000 -0400 | ||
4 | @@ -39,6 +39,7 @@ | ||
5 | |||
6 | typedef struct dir_config_struct { | ||
7 | apr_array_header_t *index_names; | ||
8 | + apr_array_header_t *index_names_incr; | ||
9 | slash_cfg do_slash; | ||
10 | } dir_config_rec; | ||
11 | |||
12 | @@ -55,6 +56,23 @@ | ||
13 | return NULL; | ||
14 | } | ||
15 | |||
16 | +static const char *add_index_incr(cmd_parms *cmd, void *dummy, const char *arg) | ||
17 | +{ | ||
18 | + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); | ||
19 | + | ||
20 | + if (err != NULL) { | ||
21 | + return err; | ||
22 | + } | ||
23 | + | ||
24 | + dir_config_rec *d = dummy; | ||
25 | + | ||
26 | + if (!d->index_names_incr) { | ||
27 | + d->index_names_incr = apr_array_make(cmd->pool, 2, sizeof(char *)); | ||
28 | + } | ||
29 | + *(const char **)apr_array_push(d->index_names_incr) = arg; | ||
30 | + return NULL; | ||
31 | +} | ||
32 | + | ||
33 | static const char *configure_slash(cmd_parms *cmd, void *d_, int arg) | ||
34 | { | ||
35 | dir_config_rec *d = d_; | ||
36 | @@ -67,6 +85,8 @@ | ||
37 | { | ||
38 | AP_INIT_ITERATE("DirectoryIndex", add_index, NULL, DIR_CMD_PERMS, | ||
39 | "a list of file names"), | ||
40 | + AP_INIT_ITERATE("AddDirectoryIndex", add_index_incr, NULL, RSRC_CONF, | ||
41 | + "a list of file names"), | ||
42 | AP_INIT_FLAG("DirectorySlash", configure_slash, NULL, DIR_CMD_PERMS, | ||
43 | "On or Off"), | ||
44 | {NULL} | ||
45 | @@ -77,6 +97,7 @@ | ||
46 | dir_config_rec *new = apr_pcalloc(p, sizeof(dir_config_rec)); | ||
47 | |||
48 | new->index_names = NULL; | ||
49 | + new->index_names_incr = NULL; | ||
50 | new->do_slash = SLASH_UNSET; | ||
51 | return (void *) new; | ||
52 | } | ||
53 | @@ -87,7 +108,26 @@ | ||
54 | dir_config_rec *base = (dir_config_rec *)basev; | ||
55 | dir_config_rec *add = (dir_config_rec *)addv; | ||
56 | |||
57 | - new->index_names = add->index_names ? add->index_names : base->index_names; | ||
58 | + | ||
59 | + if (add->index_names) { | ||
60 | + new->index_names = add->index_names; | ||
61 | + } else { | ||
62 | + new->index_names = base->index_names; | ||
63 | + if (base->index_names_incr) { | ||
64 | + if (!new->index_names) { | ||
65 | + new->index_names = apr_array_make(p, 2, sizeof(char *)); | ||
66 | + } | ||
67 | + apr_array_cat(new->index_names, base->index_names_incr); | ||
68 | + } | ||
69 | + } | ||
70 | + | ||
71 | + if (add->index_names_incr) { | ||
72 | + if (!new->index_names) { | ||
73 | + new->index_names = apr_array_make(p, 2, sizeof(char *)); | ||
74 | + } | ||
75 | + apr_array_cat(new->index_names, add->index_names_incr); | ||
76 | + } | ||
77 | + | ||
78 | new->do_slash = | ||
79 | (add->do_slash == SLASH_UNSET) ? base->do_slash : add->do_slash; | ||
80 | return new; | ||
81 | @@ -155,6 +195,14 @@ | ||
82 | return DECLINED; | ||
83 | } | ||
84 | |||
85 | + if (d->index_names_incr) { | ||
86 | + if (!d->index_names) { | ||
87 | + d->index_names = d->index_names_incr; | ||
88 | + } else { | ||
89 | + apr_array_cat(d->index_names, d->index_names_incr); | ||
90 | + } | ||
91 | + } | ||
92 | + | ||
93 | if (d->index_names) { | ||
94 | names_ptr = (char **)d->index_names->elts; | ||
95 | num_names = d->index_names->nelts; |