From 3a11e84a573785024b11d89ed4f9b06e43b06ca6 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Thu, 16 Oct 2008 21:45:31 +0300 Subject: Add dict_append_array() --- src/adapter.c | 2 +- src/dbus-common.c | 31 +++++++++++++++++++++++++++++++ src/dbus-common.h | 6 ++++-- src/device.c | 2 +- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index 9cd26b08..f0b60d49 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -1625,7 +1625,7 @@ static DBusMessage *get_properties(DBusConnection *conn, struct btd_device *dev = l->data; devices[i] = (char *) device_get_path(dev); } - dict_append_entry(&dict, "Devices", DBUS_TYPE_ARRAY, &devices); + dict_append_array(&dict, "Devices", DBUS_TYPE_OBJECT_PATH, &devices, i); g_free(devices); dbus_message_iter_close_container(&iter, &dict); diff --git a/src/dbus-common.c b/src/dbus-common.c index a27d99a3..fdf384f2 100644 --- a/src/dbus-common.c +++ b/src/dbus-common.c @@ -316,6 +316,37 @@ void dict_append_entry(DBusMessageIter *dict, dbus_message_iter_close_container(dict, &entry); } +void dict_append_array(DBusMessageIter *dict, const char *key, int type, + void *val, int n_elements) +{ + DBusMessageIter entry, variant, array; + char type_sig[2] = { type, '\0' }; + char array_sig[3] = { DBUS_TYPE_ARRAY, type, '\0' }; + const char ***str_array = val; + int i; + + dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY, + NULL, &entry); + + dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); + + dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, + array_sig, &variant); + + dbus_message_iter_open_container(&variant, DBUS_TYPE_ARRAY, + type_sig, &array); + + for (i = 0; (*str_array)[i]; i++) + dbus_message_iter_append_basic(&array, type, + &((*str_array)[i])); + + dbus_message_iter_close_container(&variant, &array); + + dbus_message_iter_close_container(&entry, &variant); + + dbus_message_iter_close_container(dict, &entry); +} + dbus_bool_t dbus_connection_emit_property_changed(DBusConnection *conn, const char *path, const char *interface, diff --git a/src/dbus-common.h b/src/dbus-common.h index 82438eca..83f77191 100644 --- a/src/dbus-common.h +++ b/src/dbus-common.h @@ -1,5 +1,4 @@ -/* - * +/* * * BlueZ - Bluetooth protocol stack for Linux * * Copyright (C) 2006-2007 Nokia Corporation @@ -33,6 +32,9 @@ void hcid_dbus_unregister(void); void dict_append_entry(DBusMessageIter *dict, const char *key, int type, void *val); +void dict_append_array(DBusMessageIter *dict, const char *key, int type, + void *val, int n_elements); + dbus_bool_t dbus_connection_emit_property_changed(DBusConnection *conn, const char *path, const char *interface, diff --git a/src/device.c b/src/device.c index 729a846c..80d655f3 100644 --- a/src/device.c +++ b/src/device.c @@ -254,7 +254,7 @@ static DBusMessage *get_properties(DBusConnection *conn, uuids = g_new0(char *, g_slist_length(device->uuids) + 1); for (i = 0, l = device->uuids; l; l = l->next, i++) uuids[i] = l->data; - dict_append_entry(&dict, "UUIDs", DBUS_TYPE_ARRAY, &uuids); + dict_append_array(&dict, "UUIDs", DBUS_TYPE_STRING, &uuids, i); g_free(uuids); /* Adapter */ -- cgit