summary refs log tree commit diff
path: root/libnm/nm-object.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2019-11-06 20:45:33 +0100
committerMichael Biebl <biebl@debian.org>2019-11-06 20:45:33 +0100
commit9c642eac191ef0dce49855d8da0a9e9af18d5113 (patch)
tree3d1c7574a02b28c68dd5f9a7288565c7ea4f0fe0 /libnm/nm-object.c
parentd0425f68f7ee83a1dc5a6ad3688627c1b472a58b (diff)
New upstream version 1.20.6 upstream/1.20.6
Diffstat (limited to 'libnm/nm-object.c')
-rw-r--r--libnm/nm-object.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/libnm/nm-object.c b/libnm/nm-object.c
index 0888077b..55c3af4f 100644
--- a/libnm/nm-object.c
+++ b/libnm/nm-object.c
@@ -772,14 +772,24 @@ properties_changed (GDBusProxy *proxy,
 	}
 }
 
-#define HANDLE_TYPE(vtype, ctype, getter) \
-	G_STMT_START { \
+#define HANDLE_TYPE_CHECK(vtype, ctype, getter) \
+	({ \
+		gboolean _success = FALSE; \
+		\
 		if (g_variant_is_of_type (value, vtype)) { \
 			ctype *param = (ctype *) field; \
 			ctype newval = getter (value); \
 			different = *param != newval; \
 			*param = newval; \
-		} else { \
+			_success = TRUE; \
+		} \
+		\
+		_success; \
+	})
+
+#define HANDLE_TYPE(vtype, ctype, getter) \
+	G_STMT_START { \
+		if (!HANDLE_TYPE_CHECK (vtype, ctype, getter)) {\
 			success = FALSE; \
 			goto done; \
 		} \
@@ -891,9 +901,11 @@ demarshal_generic (NMObject *object,
 		NM_PRAGMA_WARNING_REENABLE
 	} else if (pspec->value_type == G_TYPE_INT)
 		HANDLE_TYPE (G_VARIANT_TYPE_INT32, int, 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)
+	else if (pspec->value_type == G_TYPE_UINT) {
+		if (   !HANDLE_TYPE_CHECK (G_VARIANT_TYPE_UINT32, guint, g_variant_get_uint32)
+		    && !HANDLE_TYPE_CHECK (G_VARIANT_TYPE_UINT16, guint, g_variant_get_uint16))
+			success = FALSE;
+	} else if (pspec->value_type == G_TYPE_INT64)
 		HANDLE_TYPE (G_VARIANT_TYPE_INT64, gint64, g_variant_get_int64);
 	else if (pspec->value_type == G_TYPE_UINT64)
 		HANDLE_TYPE (G_VARIANT_TYPE_UINT64, guint64, g_variant_get_uint64);