- g_value_init(v, dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID));
- for (i = 0; i < length; i++) {
- g_value_set_boxed(v, g_ptr_array_index(vcardlist, i));
- if (dbus_g_type_struct_get (v, 0, &elname, 1, &elval, G_MAXUINT)) {
- memset(list_entry, 0, PBAP_VCARDLIST_MAXLENGTH);
- g_snprintf (list_entry, PBAP_VCARDLIST_MAXLENGTH - 1,
- "<card handle = \"%s\" name = \"%s\"/>", elname, elval);
- //If possible send as Array of <STRING, STRING>
- BT_DBG("%s", list_entry);
- vcard_list[i] = g_strdup(list_entry);
- }
+
+ GVariantIter iter;
+ GVariant *child = NULL;
+ GVariant *value1 = NULL;
+
+ g_variant_get(value, "(@a(ss))", &value1); /* Format for value1 a(ss)*/
+ gsize items = g_variant_iter_init(&iter, value1);
+ vcard_list = g_new0(char *, items + 1);
+
+ for (i = 0; (child = g_variant_iter_next_value(&iter)) != NULL; i++) {
+ g_variant_get(child, "(&s&s)", &elname, &elval);
+
+ memset(list_entry, 0, PBAP_VCARDLIST_MAXLENGTH);
+#if 0
+ g_snprintf(list_entry, PBAP_VCARDLIST_MAXLENGTH - 1,
+ "<card handle = \"%s\" name = \"%s\"/>", elname, elval);
+#else
+ g_snprintf(list_entry, PBAP_VCARDLIST_MAXLENGTH - 1,
+ "%s", elval);
+#endif
+ //If possible send as Array of <STRING, STRING>
+ BT_DBG("%s", list_entry);
+ vcard_list[i] = g_strdup(list_entry);
+ g_variant_unref(child);