[libvirt] [PATCH 6/7] Fix sign mismatches between public API, driver API and XDR protocol
Daniel P. Berrange
berrange at redhat.com
Wed May 25 16:20:15 UTC 2011
On Mon, May 23, 2011 at 07:36:09PM +0200, Matthias Bolte wrote:
> In most cases this affects flags parameters that are unsigned in the
> public and driver API but signed in the XDR protocol. Switch the
> XDR protocol to unsigned for those.
>
> A counterexample is virNWFilterGetXMLDesc. Its flags parameter is signed
> in the public API and XDR protocol, but unsigned in the driver API.
For the record, the XDR code confirms this is ok. Compare the xdr_int32
with xdr_uint32 functions:
bool_t
xdr_int32_t (XDR *xdrs, int32_t *lp)
{
switch (xdrs->x_op)
{
case XDR_ENCODE:
return XDR_PUTINT32 (xdrs, lp);
case XDR_DECODE:
return XDR_GETINT32 (xdrs, lp);
case XDR_FREE:
return TRUE;
default:
return FALSE;
}
}
/* XDR 32bit unsigned integers */
bool_t
xdr_uint32_t (XDR *xdrs, uint32_t *ulp)
{
switch (xdrs->x_op)
{
case XDR_ENCODE:
return XDR_PUTINT32 (xdrs, (int32_t *) ulp);
case XDR_DECODE:
return XDR_GETINT32 (xdrs, (int32_t *) ulp);
case XDR_FREE:
return TRUE;
default:
return FALSE;
}
}
So the uint32 function just casts to an int32 and put
that on the wire. So there's no difference at all.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list