Store an ngx_fd_t within the void *
Grzegorz Nosek
root at localdomain.pl
Fri Apr 30 15:07:32 MSD 2010
On Fri, Apr 30, 2010 at 03:02:04PM +0400, Peter Leonov wrote:
> Hi devels,
>
> Wanna store the value of ngx_fd_t in the void * variable (on the SpiderMonkey “private” field).
> Am doing the following trick to avoid the warning “cast to pointer from integer of different size”:
>
> #if (NGX_PTR_SIZE == 8)
> #define FD_TO_PTR(fd) ((void *) (uint64_t) fd)
> #elif (NGX_PTR_SIZE == 4)
> #define FD_TO_PTR(fd) ((void *) (uint32_t) fd)
> #else
> #warning can't determine the proper fd to pointer conversion
> #define FD_TO_PTR(fd) ((void *) fd)
> #endif
>
> and somewhere in the code:
> void *private = FD_TO_PTR(fd);
>
> Is all this legal?
I'd say uintptr_t is a better alternative. It's an unsigned integer type
equal in size to void*. However, I'm not sure it's available on all
platforms and whether Nginx emulates one if not found.
There's also intptr_t, which is the signed counterpart.
Best regards,
Grzegorz Nosek
More information about the nginx-devel
mailing list