not sure how to associate a variable's get_handler with its context

Maxim Dounin mdounin at mdounin.ru
Tue Jun 21 14:13:44 MSD 2011


Hello!

On Tue, Jun 21, 2011 at 05:25:12PM +0800, Mauro Stettler wrote:

> hi
> 
> i've implemented a simple nginx module to uppercase/lowercase a
> variable. but i'm not sure if i did it the right way. the code can be
> found here:
> 
> https://github.com/replay/ngx_http_lower_upper_case/blob/master/ngx_http_lower_upper_case.c
> 
> the thing that i'm very uncertain about is that i want to set a
> get_handler for the destination variable like the following:
> 
> 168     v->get_handler = ngx_http_do_lower_upper;
> 
> the problem is that i will need to pass some data to this function
> which is specific to this variable, and its possible that my
> upper/lower casing directives are used multiple times in one nginx

[...]

> a possible alternative solution would be to use the
> ngx_http_variable_t struct's data element and store the array index
> there, like that:
> 
> 164     v->data = lucf->lucases->nelts - 1;
> 
> this would be convenient because the content of the data element is

"data" is specifically designed for such type of things.

> always passed as the third argument to the get_handler. but i'm not
> sure if its ok to store an array index into an element of type
> uintptr_t.

It's ok.

Per C standard uintptr_t must be able to hold any pointer, and 
hence you won't be able to store in memory any array (of bytes or 
more) which index won't fit into uintptr_t.  Moreover, nginx 
actually uses uintptr_t as it's main integer type ngx_uint_t 
(which is used for array indexes as well).

Maxim Dounin



More information about the nginx-devel mailing list