From: David Zeuthen Date: Fri, 30 Sep 2011 16:05:53 +0000 (-0400) Subject: UDisksClient: add get_cleartext_block() method X-Git-Tag: upstream/2.1.2~467 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=95c3f3b2d7b6591cf9a6b842a9688aa65216d0c0;p=platform%2Fupstream%2Fudisks2.git UDisksClient: add get_cleartext_block() method Signed-off-by: David Zeuthen --- 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,