qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 3/7] qga: Clean up unnecessarily dirty casts


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH 3/7] qga: Clean up unnecessarily dirty casts
Date: Tue, 23 Jun 2015 09:28:01 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux)

Eric Blake <address@hidden> writes:

> On 06/22/2015 01:26 PM, Markus Armbruster wrote:
>> qga_vss_fsfreeze() casts error_set_win32() from
>> 
>>     void (*)(Error **, int, ErrorClass, const char *, ...)
>> 
>> to
>> 
>>     void (*)(void **, int, int, const char *, ...)
>> 
>> The result is later called.  Since the two types are not compatible,
>> the call is undefined behavior.  It works in practice anyway.
>
> Better than some other horrid casts we do, like monitor.c playing fast
> and loose with 'Monitor *' vs. 'FILE *' in hmp_info_mtree() and friends.
>  But that's a cleanup for another series.

I wonder why we don't have a warning to flag casts of a function where
calling the result would be undefined behavior.

>> However, there's no real need for trickery here.  Clean it up as
>> follows:
>> 
>> * Declare struct Error, and fix the first parameter.
>> 
>> * Switch to error_setg_win32().  This gets rid of the troublesome
>>   ErrorClass parameter.  Requires converting error_setg_win32() from
>>   macro to function, but that's trivially easy, because this is the
>>   only user of error_set_win32().
>> 
>> Signed-off-by: Markus Armbruster <address@hidden>
>> ---
>
> Reviewed-by: Eric Blake <address@hidden>

Thanks!



reply via email to

[Prev in Thread] Current Thread [Next in Thread]