summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2008-10-16 21:45:31 +0300
committerJohan Hedberg <johan.hedberg@nokia.com>2008-10-16 21:45:31 +0300
commit3a11e84a573785024b11d89ed4f9b06e43b06ca6 (patch)
tree4afa2c368b8ce3afcea6d3530e77165cd8699a71
parent9673b91678c5efa9d3581b0140676eaa543627e1 (diff)
Add dict_append_array()
-rw-r--r--src/adapter.c2
-rw-r--r--src/dbus-common.c31
-rw-r--r--src/dbus-common.h6
-rw-r--r--src/device.c2
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 */