UDisksClient: add get_cleartext_block() method
authorDavid Zeuthen <davidz@redhat.com>
Fri, 30 Sep 2011 16:05:53 +0000 (12:05 -0400)
committerDavid Zeuthen <davidz@redhat.com>
Fri, 30 Sep 2011 16:05:53 +0000 (12:05 -0400)
Signed-off-by: David Zeuthen <davidz@redhat.com>
doc/udisks2-sections.txt
udisks/udisksclient.c
udisks/udisksclient.h

index 90eea01..1d17e3d 100644 (file)
@@ -41,9 +41,10 @@ udisks_client_new_sync
 udisks_client_get_object_manager
 udisks_client_get_manager
 udisks_client_settle
+udisks_client_get_drive_info
 udisks_client_get_block_for_drive
 udisks_client_get_drive_for_block
-udisks_client_get_drive_info
+udisks_client_get_cleartext_block
 <SUBSECTION Standard>
 UDISKS_TYPE_CLIENT
 UDISKS_CLIENT
index c17aba5..9eee721 100644 (file)
@@ -953,3 +953,48 @@ udisks_client_get_drive_info (UDisksClient  *client,
 
   g_clear_object (&block);
 }
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+/**
+ * udisks_client_get_cleartext_block:
+ * @client: A #UDisksClient.
+ * @block: A #UDisksBlock.
+ *
+ * If @block is an unlocked encrypted device, gets the cleartext device.
+ *
+ * Returns: (transfer full): A #UDisksBlock or %NULL. Free with
+ * g_object_unref() when done with it.
+ */
+UDisksBlock *
+udisks_client_get_cleartext_block (UDisksClient  *client,
+                                   UDisksBlock   *block)
+{
+  UDisksBlock *ret = NULL;
+  const gchar *object_path;
+  GList *objects;
+  GList *l;
+
+  object_path = g_dbus_object_get_object_path (g_dbus_interface_get_object (G_DBUS_INTERFACE (block)));
+  objects = g_dbus_object_manager_get_objects (client->object_manager);
+  for (l = objects; l != NULL; l = l->next)
+    {
+      UDisksObject *iter_object = UDISKS_OBJECT (l->data);
+      UDisksBlock *iter_block;
+
+      iter_block = udisks_object_peek_block (iter_object);
+      if (iter_block == NULL)
+        continue;
+
+      if (g_strcmp0 (udisks_block_get_crypto_backing_device (iter_block), object_path) == 0)
+        {
+          ret = g_object_ref (iter_block);
+          goto out;
+        }
+    }
+
+ out:
+  g_list_foreach (objects, (GFunc) g_object_unref, NULL);
+  g_list_free (objects);
+  return ret;
+}
index e69027c..26f4a83 100644 (file)
@@ -53,6 +53,9 @@ UDisksBlock        *udisks_client_get_block_for_drive (UDisksClient        *clie
 UDisksDrive        *udisks_client_get_drive_for_block (UDisksClient        *client,
                                                        UDisksBlock         *block);
 
+UDisksBlock        *udisks_client_get_cleartext_block (UDisksClient        *client,
+                                                       UDisksBlock         *block);
+
 void                udisks_client_get_drive_info      (UDisksClient        *client,
                                                        UDisksDrive         *drive,
                                                        gchar              **out_name,