if (t) {
g_string_append (s, t);
g_free (t);
+ } else if (G_TYPE_CHECK_VALUE_TYPE (&field->value, G_TYPE_POINTER)) {
+ gpointer ptr = g_value_get_pointer (&field->value);
+
+ if (!ptr)
+ g_string_append (s, "NULL");
+ else
+ g_string_append_printf (s, "%p", ptr);
} else {
- if (!G_TYPE_CHECK_VALUE_TYPE (&field->value, G_TYPE_STRING) &&
- !(G_TYPE_CHECK_VALUE_TYPE (&field->value, G_TYPE_POINTER) &&
- g_value_get_pointer (&field->value) == NULL))
+ if (!G_TYPE_CHECK_VALUE_TYPE (&field->value, G_TYPE_STRING))
GST_WARNING ("No value transform to serialize field '%s' of type '%s'",
g_quark_to_string (field->name),
_priv_gst_value_gtype_to_abbr (type));
gst_structure_free (st1);
gst_structure_free (st2);
+
+ /* pointers are serialized but not deserialized */
+ st1 = gst_structure_new ("test", "ptr", G_TYPE_POINTER, 0xdeadbeef, NULL);
+ str = gst_structure_to_string (st1);
+ /* The way pointers are serialized may be plateform specific so just check
+ * if it contains the address */
+ fail_unless (g_strrstr (str, "deadbeef") || g_strrstr (str, "DEADBEEF"),
+ "Failed to serialize to right string: %s", str);
+
+ st2 = gst_structure_from_string (str, NULL);
+ fail_unless (!st2);
+
+ gst_structure_free (st1);
+ g_free (str);
}
GST_END_TEST;