mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-04 18:26:19 +01:00
Merge branch 'G_SOURCE_FUNC-macro' into 'master'
Add G_SOURCE_FUNC cast macro which suppresses -Wcast-function-type See merge request GNOME/glib!82
This commit is contained in:
commit
d8c003dea6
@ -621,6 +621,7 @@ g_source_set_name_by_id
|
|||||||
g_source_get_context
|
g_source_get_context
|
||||||
g_source_set_callback
|
g_source_set_callback
|
||||||
GSourceFunc
|
GSourceFunc
|
||||||
|
G_SOURCE_FUNC
|
||||||
g_source_set_callback_indirect
|
g_source_set_callback_indirect
|
||||||
g_source_set_ready_time
|
g_source_set_ready_time
|
||||||
g_source_get_ready_time
|
g_source_get_ready_time
|
||||||
|
@ -1628,7 +1628,8 @@ g_source_set_callback_indirect (GSource *source,
|
|||||||
*
|
*
|
||||||
* The exact type of @func depends on the type of source; ie. you
|
* 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
|
* should not count on @func being called with @data as its first
|
||||||
* parameter.
|
* parameter. Cast @func with G_SOURCE_FUNC() to avoid warnings about
|
||||||
|
* incompatible function types.
|
||||||
*
|
*
|
||||||
* See [memory management of sources][mainloop-memory-management] for details
|
* See [memory management of sources][mainloop-memory-management] for details
|
||||||
* on how to handle memory management of @data.
|
* on how to handle memory management of @data.
|
||||||
|
22
glib/gmain.h
22
glib/gmain.h
@ -163,11 +163,33 @@ typedef struct _GSourceFuncs GSourceFuncs;
|
|||||||
* Specifies the type of function passed to g_timeout_add(),
|
* Specifies the type of function passed to g_timeout_add(),
|
||||||
* g_timeout_add_full(), g_idle_add(), and g_idle_add_full().
|
* g_timeout_add_full(), g_idle_add(), and g_idle_add_full().
|
||||||
*
|
*
|
||||||
|
* When calling g_source_set_callback(), you may need to cast a function of a
|
||||||
|
* different type to this type. Use G_SOURCE_FUNC() to avoid warnings about
|
||||||
|
* incompatible function types.
|
||||||
|
*
|
||||||
* Returns: %FALSE if the source should be removed. #G_SOURCE_CONTINUE and
|
* Returns: %FALSE if the source should be removed. #G_SOURCE_CONTINUE and
|
||||||
* #G_SOURCE_REMOVE are more memorable names for the return value.
|
* #G_SOURCE_REMOVE are more memorable names for the return value.
|
||||||
*/
|
*/
|
||||||
typedef gboolean (*GSourceFunc) (gpointer user_data);
|
typedef gboolean (*GSourceFunc) (gpointer user_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* G_SOURCE_FUNC:
|
||||||
|
* @f: a function pointer.
|
||||||
|
*
|
||||||
|
* Cast a function pointer to a #GSourceFunc, suppressing warnings from GCC 8
|
||||||
|
* onwards with `-Wextra` or `-Wcast-function-type` enabled about the function
|
||||||
|
* types being incompatible.
|
||||||
|
*
|
||||||
|
* For example, the correct type of callback for a source created by
|
||||||
|
* g_child_watch_source_new() is #GChildWatchFunc, which accepts more arguments
|
||||||
|
* than #GSourceFunc. Casting the function with `(GSourceFunc)` to call
|
||||||
|
* g_source_set_callback() will trigger a warning, even though it will be cast
|
||||||
|
* back to the correct type before it is called by the source.
|
||||||
|
*
|
||||||
|
* Since: 2.58
|
||||||
|
*/
|
||||||
|
#define G_SOURCE_FUNC(f) ((GSourceFunc) (void (*)(void)) (f))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GChildWatchFunc:
|
* GChildWatchFunc:
|
||||||
* @pid: the process id of the child process
|
* @pid: the process id of the child process
|
||||||
|
@ -1306,7 +1306,21 @@ test_unix_fd_source (void)
|
|||||||
|
|
||||||
out = in = FALSE;
|
out = in = FALSE;
|
||||||
out_source = g_unix_fd_source_new (fds[1], G_IO_OUT);
|
out_source = g_unix_fd_source_new (fds[1], G_IO_OUT);
|
||||||
g_source_set_callback (out_source, (GSourceFunc) flag_bool, &out, NULL);
|
/* -Wcast-function-type complains about casting 'flag_bool' to GSourceFunc.
|
||||||
|
* GCC has no way of knowing that it will be cast back to GUnixFDSourceFunc
|
||||||
|
* before being called. Although GLib itself is not compiled with
|
||||||
|
* -Wcast-function-type, applications that use GLib may well be (since
|
||||||
|
* -Wextra includes it), so we provide a G_SOURCE_FUNC() macro to suppress
|
||||||
|
* the warning. We check that it works here.
|
||||||
|
*/
|
||||||
|
#if G_GNUC_CHECK_VERSION(8, 0)
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic error "-Wcast-function-type"
|
||||||
|
#endif
|
||||||
|
g_source_set_callback (out_source, G_SOURCE_FUNC (flag_bool), &out, NULL);
|
||||||
|
#if G_GNUC_CHECK_VERSION(8, 0)
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
g_source_attach (out_source, NULL);
|
g_source_attach (out_source, NULL);
|
||||||
assert_main_context_state (1,
|
assert_main_context_state (1,
|
||||||
fds[1], G_IO_OUT, 0);
|
fds[1], G_IO_OUT, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user