Store an ngx_fd_t within the void *
Peter Leonov
gojpeg at gmail.com
Fri Apr 30 15:22:41 MSD 2010
On 30.04.2010, at 15:07, Grzegorz Nosek wrote:
> 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.
Oh, wow! That's what I was looking for :)
Great thank you, Grzegorz!
>
> There's also intptr_t, which is the signed counterpart.
>
> Best regards,
> Grzegorz Nosek
Best regards,
Peter.
More information about the nginx-devel
mailing list