[Spice-devel] [PATCH spice-server v2] event-loop: Avoid possible compiler warning

Jonathon Jongsma jjongsma at redhat.com
Thu May 10 21:23:49 UTC 2018


On Thu, 2018-05-10 at 17:49 +0100, Frediano Ziglio wrote:
> With GCC 8.0.1 (Fedora 28), cast to different function pointer
> can lead to warnings, like:
> 
>   event-loop.c: In function ‘watch_update_mask’:
>   event-loop.c:146:42: error: cast between incompatible function
> types from ‘gboolean (*)(GIOChannel *, GIOCondition,  void *)’ {aka
> ‘int (*)(struct _GIOChannel *, enum <anonymous>,  void *)’} to
> ‘gboolean (*)(void *)’ {aka ‘int (*)(void *)’} [-Werror=cast-
> function-type]
>        g_source_set_callback(watch->source, (GSourceFunc)watch_func,
> watch, NULL);
>                                           ^
>   cc1: all warnings being treated as errors
> 
> As g_source_set_callback expect a function pointer which type
> changes based on the type of source (so is expected) silent
> the possible warning.
> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  server/event-loop.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/server/event-loop.c b/server/event-loop.c
> index 582782e1..d3b7de1b 100644
> --- a/server/event-loop.c
> +++ b/server/event-loop.c
> @@ -143,7 +143,12 @@ static void watch_update_mask(const
> SpiceCoreInterfaceInternal *iface,
>          return;
>  
>      watch->source = g_io_create_watch(watch->channel,
> spice_event_to_giocondition(event_mask));
> -    g_source_set_callback(watch->source, (GSourceFunc)watch_func,
> watch, NULL);
> +    /* g_source_set_callback() documentation says:
> +     * "The exact type of func depends on the type of source; ie.
> you should
> +     *  not count on func being called with data as its first
> parameter."
> +     * In this case is a GIOFunc. First cast (GIOFunc) make sure is 
> the right type,
> +     * other casts make possible warning silent */


slight wording improvements:

"In this case *it* is a GIOFunc. First cast *to* GIOFunc *to* make sure
*it* is the right type. The other casts silence the warning from gcc"

> +    g_source_set_callback(watch->source,
> (GSourceFunc)(void*)(GIOFunc)watch_func, watch, NULL);
>      g_source_attach(watch->source, watch->context);
>  }
>  


Acked-by: Jonathon Jongsma <jjongsma at redhat.com>


More information about the Spice-devel mailing list