summaryrefslogtreecommitdiff
path: root/src/element.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-07-16 03:48:43 +0200
committerMarcel Holtmann <marcel@holtmann.org>2009-07-16 03:48:43 +0200
commitaf9fb9a2f08797407c8c2911df4cb27ff2490db3 (patch)
tree610bb9ae91659f0a8e407cf82f57008e0818c13b /src/element.c
parentda2d28b38c3b6d521652c55f0451feccd9d02a7f (diff)
downloadconnman-af9fb9a2f08797407c8c2911df4cb27ff2490db3.tar.gz
connman-af9fb9a2f08797407c8c2911df4cb27ff2490db3.tar.bz2
connman-af9fb9a2f08797407c8c2911df4cb27ff2490db3.zip
Add function to find first device of a given type
Diffstat (limited to 'src/element.c')
-rw-r--r--src/element.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/element.c b/src/element.c
index bdf222c8..0175019e 100644
--- a/src/element.c
+++ b/src/element.c
@@ -330,6 +330,40 @@ const char *__connman_element_get_network_path(struct connman_element *element)
return __connman_element_get_network_path(element->parent);
}
+struct find_data {
+ enum connman_device_type type;
+ struct connman_device *device;
+};
+
+static gboolean find_device(GNode *node, gpointer user_data)
+{
+ struct connman_element *element = node->data;
+ struct find_data *data = user_data;
+
+ if (element->type != CONNMAN_ELEMENT_TYPE_DEVICE)
+ return FALSE;
+
+ if (element->device == NULL)
+ return FALSE;
+
+ if (data->type != connman_device_get_type(element->device))
+ return FALSE;
+
+ data->device = element->device;
+
+ return TRUE;
+}
+
+struct connman_device *__connman_element_find_device(enum connman_device_type type)
+{
+ struct find_data data = { .type = type, .device = NULL };
+
+ g_node_traverse(element_root, G_PRE_ORDER,
+ G_TRAVERSE_ALL, -1, find_device, &data);
+
+ return data.device;
+}
+
static gint compare_priority(gconstpointer a, gconstpointer b)
{
const struct connman_driver *driver1 = a;