tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: xdrproc_t prototype
On Thu, 25 Aug 2011, David Holland wrote:
> On Thu, Aug 25, 2011 at 07:23:02AM +0100, Iain Hibbert wrote:
> > > > Ok I will investigate non-vararg prototype for xdrproc_t
> > > >
> > > > So far I only found one place where an xdrproc_t was called, which was
> > > > using two arguments, so (XDR *, const char *) would work fine. I don't
> > > > know what the point of providing a function with three args would be,
> > > > unless it is possible to replace the handler that does the callback.
> > >
> > > welcome to sunrpc :(
> > >
> > > If you can figure out how to make it fit together without function
> > > pointer casts, please do.
> >
> > I think the problem there would be that the prototypes of common functions
> > are documented, so changing that is rewriting the whole API, a whole other
> > deal.
>
> Well, right, the prototype has xdrproc_t, all these guys passing
> something else are just plain wrong :-)
yes, except they designed it that way :)
> (Since the amount of new code appearing using SunRPC is negligible,
> and the amount of it that's third party is small, and since it's all
> so nasty, I'd say that almost any arbitrary changes to make it cleaner
> are defensible.)
>
> I'm guessing that most of the functions that aren't (XDR *, const void *)
> are things like (XDR *, const struct foo *), right? Which can be fixed to
> be formally type-safe with only minor adjustments.
right, its supposed to be an opaque pointer (see xdr(3) for a list)
> I'm not going to demand that you do it, but it would be nice if it
> were easily possible to track down the places needing adjustment
> later. I suppose grepping the tree for (xdrproc_t) would be sufficient
> though.
yes, with my changes, most any user of this has to have a cast so they are
easily found. If the functions were changed from eg
bool_t
xdr_long(XDR *xdrs, long *lp)
{
...
}
to
bool_t
xdr_long(XDR *xdrs, void *arg)
{
long *lp = arg;
...
}
would that count as an ABI or API change? I guess technically it would
(for API) but functionally, there would be no change..
> I guess what I don't really like is putting casts inside the clnt_call
> macros...
its nasty, but is already full of casts..
iain
Home |
Main Index |
Thread Index |
Old Index