On 10/05/2016 01:01 PM, Max Reitz wrote: >> +static int blk_do_attach_dev(BlockBackend *blk, void *dev)
>> + */
>> +int blk_attach_dev(BlockBackend *blk, DeviceState *dev)
>> +{
>> + return blk_do_attach_dev(blk, dev);
>> +void blk_attach_dev_legacy(BlockBackend *blk, void *dev)
>> {
>> if (blk_attach_dev(blk, dev) < 0) {
>
> I'd make this a blk_do_attach_dev(), but it's not syntactically wrong,
> so the choice is up to you.
It's technically undefined C behavior to cast from void* to an unrelated
pointer and back to void* (you are only guaranteed a round trip from
type to void* and back to original type, not with unrelated types). So
syntactically valid but semantically undefined.
On the other hand, ABI-wise, I'd be shocked if our compilers are able to
exploit our use of undefined behavior.
At any rate, using blk_do_attach_dev() would avoid the definedness
problem, so I'd go ahead and make the change.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
