tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: xdrproc_t prototype
On Wed, Aug 24, 2011 at 10:08:09AM +0100, Iain Hibbert wrote:
> Hi
>
> I found a problem building NetBSD with pcc, in that the xdrproc_t typedef
> in /usr/include/rpc/xdr.h does not provide a complete prototype, which
> causes warnings with -Wmissing-prototypes (gcc accepts a partial, for some
> reason)
>
> FreeBSD some years ago changed this to a varargs prototype (about the best
> option I think), like so
>
> -typedef bool_t (*xdrproc_t)(/* XDR *, void *, u_int */);
> +typedef bool_t (*xdrproc_t)(XDR *, ...);
>
> and I would like to do that also. It causes no functional change but
> requires a bunch of additional casts throughout the codebase (there are
> some already, in similar positions), since the functions that are
> generally used as xdrproc_t are not actual vararg functions (but they do
> have a varying number of arguments), and browsing the FreeBSD cvsweb, they
> seem to have made the a similar choice regarding the casts. As to third
> party code, I think that since FreeBSD did this nearly 10 years ago most
> problem code has likely been flagged and fixed.
>
> patch attached, any objections?
>
> iain
>
I'm not sure there is any benefit it marking the functions anything
other than 'bool_t (*xdrproc_t)(void)'.
The argument passing rules for varargs and non-varargs functions can be
different - so the function pointers should be cast back to the
correct prototype before being called.
The code changes can be made less pervasive by using #defines
to add in the cast to the call sites.
David
--
David Laight: david%l8s.co.uk@localhost
Home |
Main Index |
Thread Index |
Old Index