On 11/10/01 4:46 PM, "Brian Pane" <[EMAIL PROTECTED]> wrote:
> This patch changes the apr_table_elts macro so that it provides
> access to the internals of an apr_table_t via a const pointer
> instead of the current non-const pointer.
>
> My main motivation for this is to make it possible to speed up
> the table internals in the future (e.g., by adding an index
> for fast lookups) without breaking backward compatibility.
>
> In addition, allowing non-const access to the array is dangerous
> even with the current code base. For example, an application
> can break assumptions in the table code by setting keys in the
> array to null.
>
> All the current uses of apr_table_elts in Apache 2.0 are for
> const iterators, so the only change required to the httpd code
> is the replacement of "apr_array_header_t*" declarations with
> "const apr_array_header_t*" (the patch includes the diffs for
> all the affected files).
>
+1 for the concept
If no one objects I'll integrate this.
The reason I'm posting is that I remember Will Rowe had some issues
With tables in the past, and I'm wanting to make sure he is OK with this
.. Will..???
> --Brian
>
>
>
> Index: modules/filters/mod_include.c
> ===================================================================
> RCS file: /home/cvspublic/httpd-2.0/modules/filters/mod_include.c,v
> retrieving revision 1.150
> diff -u -r1.150 mod_include.c
> --- modules/filters/mod_include.c 2001/09/19 06:25:07 1.150
> +++ modules/filters/mod_include.c 2001/11/10 23:49:39
> @@ -2601,8 +2601,8 @@
> if (ctx->flags & FLAG_PRINTING) {
> ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 1);
> if ((tag == NULL) && (tag_val == NULL)) {
> - apr_array_header_t *arr = apr_table_elts(r->subprocess_env);
> - apr_table_entry_t *elts = (apr_table_entry_t *)arr->elts;
> + const apr_array_header_t *arr =
> apr_table_elts(r->subprocess_env);
> + const apr_table_entry_t *elts = (const apr_table_entry_t
> *)arr->elts;
> int i;
> const char *key_text, *val_text;
> apr_size_t k_len, v_len, t_wrt;
> Index: modules/generators/mod_cgi.c
> ===================================================================
> RCS file: /home/cvspublic/httpd-2.0/modules/generators/mod_cgi.c,v
> retrieving revision 1.106
> diff -u -r1.106 mod_cgi.c
> --- modules/generators/mod_cgi.c 2001/09/18 03:33:30 1.106
> +++ modules/generators/mod_cgi.c 2001/11/10 23:49:39
> @@ -257,8 +257,8 @@
> char *dbuf, const char *sbuf, apr_file_t *script_in,
> apr_file_t *script_err)
> {
> - apr_array_header_t *hdrs_arr = apr_table_elts(r->headers_in);
> - apr_table_entry_t *hdrs = (apr_table_entry_t *) hdrs_arr->elts;
> + const apr_array_header_t *hdrs_arr = apr_table_elts(r->headers_in);
> + const apr_table_entry_t *hdrs = (const apr_table_entry_t *)
> hdrs_arr->elts;
> char argsbuffer[HUGE_STRING_LEN];
> apr_file_t *f = NULL;
> int i;
> Index: modules/http/http_request.c
> ===================================================================
> RCS file: /home/cvspublic/httpd-2.0/modules/http/http_request.c,v
> retrieving revision 1.117
> diff -u -r1.117 http_request.c
> --- modules/http/http_request.c 2001/10/30 19:21:41 1.117
> +++ modules/http/http_request.c 2001/11/10 23:49:40
> @@ -310,8 +310,8 @@
>
> static apr_table_t *rename_original_env(apr_pool_t *p, apr_table_t *t)
> {
> - apr_array_header_t *env_arr = apr_table_elts(t);
> - apr_table_entry_t *elts = (apr_table_entry_t *) env_arr->elts;
> + const apr_array_header_t *env_arr = apr_table_elts(t);
> + const apr_table_entry_t *elts = (const apr_table_entry_t *)
> env_arr->elts;
> apr_table_t *new = apr_table_make(p, env_arr->nalloc);
> int i;
>
> Index: modules/mappers/mod_rewrite.c
> ===================================================================
> RCS file: /home/cvspublic/httpd-2.0/modules/mappers/mod_rewrite.c,v
> retrieving revision 1.85
> diff -u -r1.85 mod_rewrite.c
> --- modules/mappers/mod_rewrite.c 2001/10/21 17:56:36 1.85
> +++ modules/mappers/mod_rewrite.c 2001/11/10 23:49:42
> @@ -3627,12 +3627,12 @@
>
> static char *lookup_header(request_rec *r, const char *name)
> {
> - apr_array_header_t *hdrs_arr;
> - apr_table_entry_t *hdrs;
> + const apr_array_header_t *hdrs_arr;
> + const apr_table_entry_t *hdrs;
> int i;
>
> hdrs_arr = apr_table_elts(r->headers_in);
> - hdrs = (apr_table_entry_t *)hdrs_arr->elts;
> + hdrs = (const apr_table_entry_t *)hdrs_arr->elts;
> for (i = 0; i < hdrs_arr->nelts; ++i) {
> if (hdrs[i].key == NULL) {
> continue;
> Index: modules/metadata/mod_env.c
> ===================================================================
> RCS file: /home/cvspublic/httpd-2.0/modules/metadata/mod_env.c,v
> retrieving revision 1.25
> diff -u -r1.25 mod_env.c
> --- modules/metadata/mod_env.c 2001/10/21 01:17:11 1.25
> +++ modules/metadata/mod_env.c 2001/11/10 23:49:43
> @@ -92,8 +92,8 @@
> env_dir_config_rec *add = addv;
> env_dir_config_rec *res = apr_palloc(p, sizeof(*res));
>
> - apr_table_entry_t *elts;
> - apr_array_header_t *arr;
> + const apr_table_entry_t *elts;
> + const apr_array_header_t *arr;
>
> int i;
>
> Index: modules/metadata/mod_setenvif.c
> ===================================================================
> RCS file: /home/cvspublic/httpd-2.0/modules/metadata/mod_setenvif.c,v
> retrieving revision 1.30
> diff -u -r1.30 mod_setenvif.c
> --- modules/metadata/mod_setenvif.c 2001/06/12 17:06:01 1.30
> +++ modules/metadata/mod_setenvif.c 2001/11/10 23:49:43
> @@ -406,7 +406,7 @@
> {
> sei_cfg_rec *sconf;
> sei_entry *entries;
> - apr_table_entry_t *elts;
> + const apr_table_entry_t *elts;
> const char *val;
> int i, j;
> char *last_name;
> @@ -459,8 +459,8 @@
> * the headers_in until we find a match or run out of
> * headers.
> */
> - apr_array_header_t *arr = apr_table_elts(r->headers_in);
> - elts = (apr_table_entry_t *) arr->elts;
> + const apr_array_header_t *arr =
> apr_table_elts(r->headers_in);
> + elts = (const apr_table_entry_t *) arr->elts;
> val = NULL;
> for (j = 0; j < arr->nelts; ++j) {
> if (!ap_regexec(b->pnamereg, elts[j].key, 0, NULL, 0))
> {
> @@ -489,8 +489,8 @@
> }
>
> if (!ap_regexec(b->preg, val, 0, NULL, 0)) {
> - apr_array_header_t *arr = apr_table_elts(b->features);
> - elts = (apr_table_entry_t *) arr->elts;
> + const apr_array_header_t *arr = apr_table_elts(b->features);
> + elts = (const apr_table_entry_t *) arr->elts;
>
> for (j = 0; j < arr->nelts; ++j) {
> if (!strcmp(elts[j].val, "!")) {
> Index: server/util_script.c
> ===================================================================
> RCS file: /home/cvspublic/httpd-2.0/server/util_script.c,v
> retrieving revision 1.65
> diff -u -r1.65 util_script.c
> --- server/util_script.c 2001/11/10 18:38:02 1.65
> +++ server/util_script.c 2001/11/10 23:49:44
> @@ -122,8 +122,8 @@
>
> AP_DECLARE(char **) ap_create_environment(apr_pool_t *p, apr_table_t *t)
> {
> - apr_array_header_t *env_arr = apr_table_elts(t);
> - apr_table_entry_t *elts = (apr_table_entry_t *) env_arr->elts;
> + const apr_array_header_t *env_arr = apr_table_elts(t);
> + const apr_table_entry_t *elts = (const apr_table_entry_t *)
> env_arr->elts;
> char **env = (char **) apr_palloc(p, (env_arr->nelts + 2) * sizeof(char
> *));
> int i, j;
> char *tz;
> @@ -169,8 +169,8 @@
> char *env_temp;
> #endif
> const char *host;
> - apr_array_header_t *hdrs_arr = apr_table_elts(r->headers_in);
> - apr_table_entry_t *hdrs = (apr_table_entry_t *) hdrs_arr->elts;
> + const apr_array_header_t *hdrs_arr = apr_table_elts(r->headers_in);
> + const apr_table_entry_t *hdrs = (const apr_table_entry_t *)
> hdrs_arr->elts;
> int i;
> apr_port_t rport;
> apr_sockaddr_t *remotesa;
> Index: srclib/apr/include/apr_tables.h
> ===================================================================
> RCS file: /home/cvspublic/apr/include/apr_tables.h,v
> retrieving revision 1.23
> diff -u -r1.23 apr_tables.h
> --- srclib/apr/include/apr_tables.h 2001/08/24 17:55:45 1.23
> +++ srclib/apr/include/apr_tables.h 2001/11/10 23:49:44
> @@ -137,7 +137,7 @@
> * @param t The table
> * @return An array containing the contents of the table
> */
> -#define apr_table_elts(t) ((apr_array_header_t *)(t))
> +#define apr_table_elts(t) ((const apr_array_header_t *)(t))
>
> /**
> * Determine if the table is empty
>