From 3f6bef47f33c3422270b569f8d897dc5596e963c Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Tue, 5 Dec 2017 10:44:12 -0500 Subject: [PATCH 1/3] tree-wide: cast after g_object_ref() for proposed GLib patch This fixes the build with related bug https://bugzilla.gnome.org/show_bug.cgi?id=790697 https://mail.gnome.org/archives/networkmanager-list/2017-December/msg00005.html --- libnm-glib/nm-remote-connection.c | 6 +++--- src/settings/plugins/ibft/nms-ibft-plugin.c | 2 +- src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libnm-glib/nm-remote-connection.c b/libnm-glib/nm-remote-connection.c index d147365b79..b9abf4c4ce 100644 --- a/libnm-glib/nm-remote-connection.c +++ b/libnm-glib/nm-remote-connection.c @@ -479,7 +479,7 @@ updated_get_settings_cb (DBusGProxy *proxy, } else { gs_unref_object NMConnection *self_alive = NULL; - self_alive = g_object_ref (self); + self_alive = (NMConnection*)g_object_ref (self); _nm_connection_replace_settings (NM_CONNECTION (self), new_settings); g_signal_emit (self, signals[UPDATED], 0, new_settings); g_hash_table_destroy (new_settings); @@ -611,7 +611,7 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error) G_TYPE_INVALID)) return FALSE; priv->visible = TRUE; - self_alive = g_object_ref (initable); + self_alive = (NMConnection*)g_object_ref (initable); _nm_connection_replace_settings (NM_CONNECTION (initable), hash); g_signal_emit (initable, signals[UPDATED], 0, hash); g_hash_table_destroy (hash); @@ -687,7 +687,7 @@ init_get_settings_cb (DBusGProxy *proxy, } priv->visible = TRUE; - self_alive = g_object_ref (init_data->connection); + self_alive = (NMConnection*)g_object_ref (init_data->connection); _nm_connection_replace_settings (NM_CONNECTION (init_data->connection), settings); g_signal_emit (init_data->connection, signals[UPDATED], 0, settings); g_hash_table_destroy (settings); diff --git a/src/settings/plugins/ibft/nms-ibft-plugin.c b/src/settings/plugins/ibft/nms-ibft-plugin.c index 9b1f5ccd00..77ed12e964 100644 --- a/src/settings/plugins/ibft/nms-ibft-plugin.c +++ b/src/settings/plugins/ibft/nms-ibft-plugin.c @@ -202,5 +202,5 @@ settings_plugin_interface_init (NMSettingsPluginInterface *plugin_iface) G_MODULE_EXPORT GObject * nm_settings_plugin_factory (void) { - return g_object_ref (nms_ibft_plugin_get ()); + return (GObject*)g_object_ref (nms_ibft_plugin_get ()); } diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c index 8ad3a53f3d..50146e8e7b 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c @@ -1080,5 +1080,5 @@ settings_plugin_interface_init (NMSettingsPluginInterface *plugin_iface) G_MODULE_EXPORT GObject * nm_settings_plugin_factory (void) { - return g_object_ref (settings_plugin_ifcfg_get ()); + return (GObject*)g_object_ref (settings_plugin_ifcfg_get ()); } From 7661ad64ba2f3629650a3d0f3888a5ee9f434030 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 6 Dec 2017 09:59:19 +0100 Subject: [PATCH 2/3] all: use cast macros instead of C cast When building with assertions, they nm_assert() for the type. Otherwise, they are identical to a C cast. Also, where possible, don't cast at all, but adjust the type instead. Also, there were a few missing casts. --- libnm-glib/nm-remote-connection.c | 19 ++++++++++--------- src/settings/plugins/ibft/nms-ibft-plugin.c | 2 +- .../plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c | 2 +- src/settings/plugins/ifnet/nms-ifnet-plugin.c | 2 +- .../plugins/ifupdown/nms-ifupdown-plugin.c | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/libnm-glib/nm-remote-connection.c b/libnm-glib/nm-remote-connection.c index b9abf4c4ce..a9702236d0 100644 --- a/libnm-glib/nm-remote-connection.c +++ b/libnm-glib/nm-remote-connection.c @@ -477,9 +477,9 @@ updated_get_settings_cb (DBusGProxy *proxy, priv->visible = FALSE; g_signal_emit (self, signals[VISIBLE], 0, FALSE); } else { - gs_unref_object NMConnection *self_alive = NULL; + gs_unref_object NMRemoteConnection *self_alive = NULL; - self_alive = (NMConnection*)g_object_ref (self); + self_alive = g_object_ref (self); _nm_connection_replace_settings (NM_CONNECTION (self), new_settings); g_signal_emit (self, signals[UPDATED], 0, new_settings); g_hash_table_destroy (new_settings); @@ -601,9 +601,10 @@ constructed (GObject *object) static gboolean init_sync (GInitable *initable, GCancellable *cancellable, GError **error) { - NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (initable); + NMRemoteConnection *self = NM_REMOTE_CONNECTION (initable); + NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self); GHashTable *hash; - gs_unref_object NMConnection *self_alive = NULL; + gs_unref_object NMRemoteConnection *self_alive = NULL; if (!dbus_g_proxy_call (priv->proxy, "GetSettings", error, G_TYPE_INVALID, @@ -611,9 +612,9 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error) G_TYPE_INVALID)) return FALSE; priv->visible = TRUE; - self_alive = (NMConnection*)g_object_ref (initable); - _nm_connection_replace_settings (NM_CONNECTION (initable), hash); - g_signal_emit (initable, signals[UPDATED], 0, hash); + self_alive = g_object_ref (self); + _nm_connection_replace_settings (NM_CONNECTION (self), hash); + g_signal_emit (self, signals[UPDATED], 0, hash); g_hash_table_destroy (hash); /* Get properties */ @@ -676,7 +677,7 @@ init_get_settings_cb (DBusGProxy *proxy, NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (init_data->connection); GHashTable *settings; GError *error = NULL; - gs_unref_object NMConnection *self_alive = NULL; + gs_unref_object NMRemoteConnection *self_alive = NULL; dbus_g_proxy_end_call (proxy, call, &error, DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, &settings, @@ -687,7 +688,7 @@ init_get_settings_cb (DBusGProxy *proxy, } priv->visible = TRUE; - self_alive = (NMConnection*)g_object_ref (init_data->connection); + self_alive = g_object_ref (init_data->connection); _nm_connection_replace_settings (NM_CONNECTION (init_data->connection), settings); g_signal_emit (init_data->connection, signals[UPDATED], 0, settings); g_hash_table_destroy (settings); diff --git a/src/settings/plugins/ibft/nms-ibft-plugin.c b/src/settings/plugins/ibft/nms-ibft-plugin.c index 77ed12e964..ea4d15241a 100644 --- a/src/settings/plugins/ibft/nms-ibft-plugin.c +++ b/src/settings/plugins/ibft/nms-ibft-plugin.c @@ -202,5 +202,5 @@ settings_plugin_interface_init (NMSettingsPluginInterface *plugin_iface) G_MODULE_EXPORT GObject * nm_settings_plugin_factory (void) { - return (GObject*)g_object_ref (nms_ibft_plugin_get ()); + return G_OBJECT (g_object_ref (nms_ibft_plugin_get ())); } diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c index 50146e8e7b..ccd3708d51 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c @@ -1080,5 +1080,5 @@ settings_plugin_interface_init (NMSettingsPluginInterface *plugin_iface) G_MODULE_EXPORT GObject * nm_settings_plugin_factory (void) { - return (GObject*)g_object_ref (settings_plugin_ifcfg_get ()); + return G_OBJECT (g_object_ref (settings_plugin_ifcfg_get ())); } diff --git a/src/settings/plugins/ifnet/nms-ifnet-plugin.c b/src/settings/plugins/ifnet/nms-ifnet-plugin.c index 98e56e449a..38d23f306b 100644 --- a/src/settings/plugins/ifnet/nms-ifnet-plugin.c +++ b/src/settings/plugins/ifnet/nms-ifnet-plugin.c @@ -520,5 +520,5 @@ settings_plugin_interface_init (NMSettingsPluginInterface *plugin_iface) G_MODULE_EXPORT GObject * nm_settings_plugin_factory (void) { - return g_object_ref (settings_plugin_ifnet_get ()); + return G_OBJECT (g_object_ref (settings_plugin_ifnet_get ())); } diff --git a/src/settings/plugins/ifupdown/nms-ifupdown-plugin.c b/src/settings/plugins/ifupdown/nms-ifupdown-plugin.c index 87afb6c8e9..bfad9d1592 100644 --- a/src/settings/plugins/ifupdown/nms-ifupdown-plugin.c +++ b/src/settings/plugins/ifupdown/nms-ifupdown-plugin.c @@ -541,6 +541,6 @@ settings_plugin_interface_init (NMSettingsPluginInterface *plugin_iface) G_MODULE_EXPORT GObject * nm_settings_plugin_factory (void) { - return g_object_ref (settings_plugin_ifupdown_get ()); + return G_OBJECT (g_object_ref (settings_plugin_ifupdown_get ())); } From 7ca601d529329f756340961fcd153399b2f5063c Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 6 Dec 2017 10:04:50 +0100 Subject: [PATCH 3/3] shared: propagate type for g_object_ref() See related bug https://bugzilla.gnome.org/show_bug.cgi?id=790697 --- shared/nm-utils/nm-glib.h | 5 +++++ shared/nm-utils/nm-macros-internal.h | 1 + 2 files changed, 6 insertions(+) diff --git a/shared/nm-utils/nm-glib.h b/shared/nm-utils/nm-glib.h index 4ef538e441..599890e071 100644 --- a/shared/nm-utils/nm-glib.h +++ b/shared/nm-utils/nm-glib.h @@ -481,4 +481,9 @@ _nm_g_variant_new_printf (const char *format_string, ...) }) #endif +#if !GLIB_CHECK_VERSION (2, 56, 0) +#define g_object_ref(Obj) ((typeof(Obj)) g_object_ref (Obj)) +#define g_object_ref_sink(Obj) ((typeof(Obj)) g_object_ref_sink (Obj)) +#endif + #endif /* __NM_GLIB_H__ */ diff --git a/shared/nm-utils/nm-macros-internal.h b/shared/nm-utils/nm-macros-internal.h index 8005375c9d..9d9016e428 100644 --- a/shared/nm-utils/nm-macros-internal.h +++ b/shared/nm-utils/nm-macros-internal.h @@ -721,6 +721,7 @@ nm_g_object_ref (gpointer obj) g_object_ref (obj); return obj; } +#define nm_g_object_ref(obj) ((typeof (obj)) nm_g_object_ref (obj)) static inline void nm_g_object_unref (gpointer obj)