Add convenience routines to get block devices by label and uuid
authorDavid Zeuthen <davidz@redhat.com>
Thu, 5 Jan 2012 19:09:07 +0000 (14:09 -0500)
committerDavid Zeuthen <davidz@redhat.com>
Thu, 5 Jan 2012 19:09:07 +0000 (14:09 -0500)
Signed-off-by: David Zeuthen <davidz@redhat.com>
doc/udisks2-sections.txt
udisks/udisksclient.c
udisks/udisksclient.h

index d753871..7730a07 100644 (file)
@@ -34,6 +34,8 @@ udisks_client_get_object_manager
 udisks_client_get_manager
 udisks_client_settle
 udisks_client_get_block_for_dev
+udisks_client_get_block_for_label
+udisks_client_get_block_for_uuid
 udisks_client_get_block_for_drive
 udisks_client_get_drive_for_block
 udisks_client_get_cleartext_block
index 63138db..737063d 100644 (file)
@@ -550,6 +550,96 @@ udisks_client_peek_object (UDisksClient  *client,
 /* ---------------------------------------------------------------------------------------------------- */
 
 /**
+ * udisks_client_get_block_for_label:
+ * @client: A #UDisksClient.
+ * @label: The label.
+ *
+ * Gets all the #UDisksBlock instances with the given label, if any.
+ *
+ * Returns: (transfer full) (element-type UDisksBlock): A list of #UDisksBlock instances. The
+ *   returned list should be freed with g_list_free() after each
+ *   element has been freed with g_object_unref().
+ */
+GList *
+udisks_client_get_block_for_label (UDisksClient        *client,
+                                   const gchar         *label)
+{
+  GList *ret = NULL;
+  GList *l, *object_proxies = NULL;
+
+  g_return_val_if_fail (UDISKS_IS_CLIENT (client), NULL);
+  g_return_val_if_fail (label != NULL, NULL);
+
+  object_proxies = g_dbus_object_manager_get_objects (client->object_manager);
+  for (l = object_proxies; l != NULL; l = l->next)
+    {
+      UDisksObject *object = UDISKS_OBJECT (l->data);
+      UDisksBlock *block;
+
+      block = udisks_object_get_block (object);
+      if (block == NULL)
+        continue;
+
+      if (g_strcmp0 (udisks_block_get_id_label (block), label) == 0)
+        ret = g_list_prepend (ret, block);
+      else
+        g_object_unref (block);
+    }
+
+  g_list_foreach (object_proxies, (GFunc) g_object_unref, NULL);
+  g_list_free (object_proxies);
+  ret = g_list_reverse (ret);
+  return ret;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+/**
+ * udisks_client_get_block_for_uuid:
+ * @client: A #UDisksClient.
+ * @uuid: The uuid.
+ *
+ * Gets all the #UDisksBlock instances with the given uuid, if any.
+ *
+ * Returns: (transfer full) (element-type UDisksBlock): A list of #UDisksBlock instances. The
+ *   returned list should be freed with g_list_free() after each
+ *   element has been freed with g_object_unref().
+ */
+GList *
+udisks_client_get_block_for_uuid (UDisksClient        *client,
+                                  const gchar         *uuid)
+{
+  GList *ret = NULL;
+  GList *l, *object_proxies = NULL;
+
+  g_return_val_if_fail (UDISKS_IS_CLIENT (client), NULL);
+  g_return_val_if_fail (uuid != NULL, NULL);
+
+  object_proxies = g_dbus_object_manager_get_objects (client->object_manager);
+  for (l = object_proxies; l != NULL; l = l->next)
+    {
+      UDisksObject *object = UDISKS_OBJECT (l->data);
+      UDisksBlock *block;
+
+      block = udisks_object_get_block (object);
+      if (block == NULL)
+        continue;
+
+      if (g_strcmp0 (udisks_block_get_id_uuid (block), uuid) == 0)
+        ret = g_list_prepend (ret, block);
+      else
+        g_object_unref (block);
+    }
+
+  g_list_foreach (object_proxies, (GFunc) g_object_unref, NULL);
+  g_list_free (object_proxies);
+  ret = g_list_reverse (ret);
+  return ret;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+/**
  * udisks_client_get_block_for_dev:
  * @client: A #UDisksClient.
  * @block_device_number: A #dev_t to get a #UDisksBlock for.
index 6bc7a18..6baa237 100644 (file)
@@ -53,10 +53,14 @@ UDisksObject       *udisks_client_peek_object         (UDisksClient        *clie
 
 UDisksBlock        *udisks_client_get_block_for_dev   (UDisksClient        *client,
                                                        dev_t                block_device_number);
+GList              *udisks_client_get_block_for_label (UDisksClient        *client,
+                                                       const gchar         *label);
+GList              *udisks_client_get_block_for_uuid  (UDisksClient        *client,
+                                                       const gchar         *uuid);
+
 UDisksBlock        *udisks_client_get_block_for_drive (UDisksClient        *client,
                                                        UDisksDrive         *drive,
                                                        gboolean             get_physical);
-
 UDisksDrive        *udisks_client_get_drive_for_block (UDisksClient        *client,
                                                        UDisksBlock         *block);