From 95c3f3b2d7b6591cf9a6b842a9688aa65216d0c0 Mon Sep 17 00:00:00 2001 From: David Zeuthen Date: Fri, 30 Sep 2011 12:05:53 -0400 Subject: [PATCH] UDisksClient: add get_cleartext_block() method Signed-off-by: David Zeuthen --- doc/udisks2-sections.txt | 3 ++- udisks/udisksclient.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ udisks/udisksclient.h | 3 +++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/doc/udisks2-sections.txt b/doc/udisks2-sections.txt index 90eea01..1d17e3d 100644 --- a/doc/udisks2-sections.txt +++ b/doc/udisks2-sections.txt @@ -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 UDISKS_TYPE_CLIENT UDISKS_CLIENT diff --git a/udisks/udisksclient.c b/udisks/udisksclient.c index c17aba5..9eee721 100644 --- a/udisks/udisksclient.c +++ b/udisks/udisksclient.c @@ -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; +} diff --git a/udisks/udisksclient.h b/udisks/udisksclient.h index e69027c..26f4a83 100644 --- a/udisks/udisksclient.h +++ b/udisks/udisksclient.h @@ -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, -- 2.7.4