From ad25e5c9706e255b459bd84feb69f826b67ee5da Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Tue, 30 Sep 2014 09:55:43 -0400 Subject: [PATCH] libnm: reorganize demarshal_generic(), make unrecognized type a warning Redo the HANDLE_TYPE macro in demarshal_generic() in a more syntactically-sane way (both to help the editor with indentation and to make it not look so weird). Also, if demarshal_generic() is asked to handle a property of a type that it doesn't know how to handle, that's a programmer error, so do a g_warning() in that case (as opposed to being asked to demarshal a value of the wrong D-Bus type, which could just be a bug in the peer that sent the data, so that stays as a debug message). --- libnm/nm-object.c | 46 ++++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/libnm/nm-object.c b/libnm/nm-object.c index 026cb24aef..2c8248da38 100644 --- a/libnm/nm-object.c +++ b/libnm/nm-object.c @@ -1264,15 +1264,16 @@ property_proxy_signal (GDBusProxy *proxy, g_variant_unref (properties); } -#define HANDLE_TYPE(gtype, vtype, ctype, getter) \ - } else if (pspec->value_type == gtype) { \ +#define HANDLE_TYPE(vtype, ctype, getter) \ + G_STMT_START { \ if (g_variant_is_of_type (value, vtype)) { \ ctype *param = (ctype *) field; \ *param = getter (value); \ } else { \ success = FALSE; \ goto done; \ - } + } \ + } G_STMT_END static gboolean demarshal_generic (NMObject *object, @@ -1317,21 +1318,30 @@ demarshal_generic (NMObject *object, *param = g_bytes_new (val, length); else *param = NULL; - HANDLE_TYPE (G_TYPE_BOOLEAN, G_VARIANT_TYPE_BOOLEAN, gboolean, g_variant_get_boolean) - HANDLE_TYPE (G_TYPE_UCHAR, G_VARIANT_TYPE_BYTE, guchar, g_variant_get_byte) - HANDLE_TYPE (G_TYPE_DOUBLE, G_VARIANT_TYPE_DOUBLE, gdouble, g_variant_get_double) - HANDLE_TYPE (G_TYPE_INT, G_VARIANT_TYPE_INT32, gint, g_variant_get_int32) - HANDLE_TYPE (G_TYPE_UINT, G_VARIANT_TYPE_UINT32, guint, g_variant_get_uint32) - HANDLE_TYPE (G_TYPE_INT64, G_VARIANT_TYPE_INT64, gint, g_variant_get_int64) - HANDLE_TYPE (G_TYPE_UINT64, G_VARIANT_TYPE_UINT64, guint, g_variant_get_uint64) - HANDLE_TYPE (G_TYPE_LONG, G_VARIANT_TYPE_INT64, glong, g_variant_get_int64) - HANDLE_TYPE (G_TYPE_ULONG, G_VARIANT_TYPE_UINT64, gulong, g_variant_get_uint64) - } else { - dbgmsg ("%s: %s:%s unhandled type %s.", - __func__, - G_OBJECT_TYPE_NAME (object), - pspec->name, - g_type_name (pspec->value_type)); + } else if (pspec->value_type == G_TYPE_BOOLEAN) + HANDLE_TYPE (G_VARIANT_TYPE_BOOLEAN, gboolean, g_variant_get_boolean); + else if (pspec->value_type == G_TYPE_UCHAR) + HANDLE_TYPE (G_VARIANT_TYPE_BYTE, guchar, g_variant_get_byte); + else if (pspec->value_type == G_TYPE_DOUBLE) + HANDLE_TYPE (G_VARIANT_TYPE_DOUBLE, gdouble, g_variant_get_double); + else if (pspec->value_type == G_TYPE_INT) + HANDLE_TYPE (G_VARIANT_TYPE_INT32, gint, g_variant_get_int32); + else if (pspec->value_type == G_TYPE_UINT) + HANDLE_TYPE (G_VARIANT_TYPE_UINT32, guint, g_variant_get_uint32); + else if (pspec->value_type == G_TYPE_INT64) + HANDLE_TYPE (G_VARIANT_TYPE_INT64, gint, g_variant_get_int64); + else if (pspec->value_type == G_TYPE_UINT64) + HANDLE_TYPE (G_VARIANT_TYPE_UINT64, guint, g_variant_get_uint64); + else if (pspec->value_type == G_TYPE_LONG) + HANDLE_TYPE (G_VARIANT_TYPE_INT64, glong, g_variant_get_int64); + else if (pspec->value_type == G_TYPE_ULONG) + HANDLE_TYPE (G_VARIANT_TYPE_UINT64, gulong, g_variant_get_uint64); + else { + g_warning ("%s: %s:%s unhandled type %s.", + __func__, + G_OBJECT_TYPE_NAME (object), + pspec->name, + g_type_name (pspec->value_type)); success = FALSE; }