tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kqueue udata
On 15.08.2012 16:04, Eric Radman wrote:
>
> I'm using kqueue across a number of platforms now (MacOS, *BSD, Linux
> via libkqueue), but the kevent struct on NetBSD introduces type warnings
> by defining udata differently. Example:
>
> // https://raw.github.com/zeromq/libzmq/master/src/kqueue.cpp
I did not look in details, but does it fail even with <stdint.h>?
> // NetBSD defines (struct kevent).udata as intptr_t, everyone else
> // as void *.
> #if defined ZMQ_HAVE_NETBSD
> #define kevent_udata_t intptr_t
> #else
> #define kevent_udata_t void *
> #endif
>
> Would it be advantageous to follow FreeBSD by defining 'struct
> event.udata' as 'void *'?
Portability issues. It depends on the use case, but people tend to abuse
APIs.
Using (void *) is safe (and maybe require fewer casts) as long as you
treat udata as a pointer/address to an opaque type.
However, kqueue(2) declares it as a "opaque user data ID", so you can
theoretically store an ID that is not valid for a (void *). An example
would be using a non-canonical address as an ID under amd64: it is a
valid ID, but an invalid address (hence, void *) nonetheless.
--
Jean-Yves Migeon
jeanyves.migeon%free.fr@localhost
Home |
Main Index |
Thread Index |
Old Index