From 738908898cb789340db51366603edbd8ed5bd285 Mon Sep 17 00:00:00 2001 From: David Zeuthen Date: Thu, 6 Oct 2011 10:32:06 -0400 Subject: [PATCH] UDisksClient: add get_block_for_dev() method Signed-off-by: David Zeuthen --- doc/udisks2-sections.txt | 1 + udisks/udisksclient.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ udisks/udisksclient.h | 2 ++ 3 files changed, 47 insertions(+) diff --git a/doc/udisks2-sections.txt b/doc/udisks2-sections.txt index 1eb3a98..e456f37 100644 --- a/doc/udisks2-sections.txt +++ b/doc/udisks2-sections.txt @@ -44,6 +44,7 @@ udisks_client_get_object_manager udisks_client_get_manager udisks_client_settle udisks_client_get_drive_info +udisks_client_get_block_for_dev udisks_client_get_block_for_drive udisks_client_get_drive_for_block udisks_client_get_cleartext_block diff --git a/udisks/udisksclient.c b/udisks/udisksclient.c index e74d938..44ca2a2 100644 --- a/udisks/udisksclient.c +++ b/udisks/udisksclient.c @@ -516,6 +516,50 @@ udisks_client_peek_object (UDisksClient *client, /* ---------------------------------------------------------------------------------------------------- */ +/** + * udisks_client_get_block_for_dev: + * @client: A #UDisksClient. + * @block_device_number: A #dev_t to get a #UDisksBlock for. + * + * Gets the #UDisksBlock corresponding to @block_device_number, if any. + * + * Returns: (transfer full): A #UDisksBlock or %NULL if not found. + */ +UDisksBlock * +udisks_client_get_block_for_dev (UDisksClient *client, + dev_t block_device_number) +{ + UDisksBlock *ret = NULL; + GList *l, *object_proxies = NULL; + + g_return_val_if_fail (UDISKS_IS_CLIENT (client), 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 (makedev (udisks_block_get_major (block), udisks_block_get_minor (block)) == block_device_number) + { + ret = block; + goto out; + } + g_object_unref (block); + } + + out: + g_list_foreach (object_proxies, (GFunc) g_object_unref, NULL); + g_list_free (object_proxies); + return ret; +} + +/* ---------------------------------------------------------------------------------------------------- */ + static GList * get_top_level_blocks_for_drive (UDisksClient *client, const gchar *drive_object_path) diff --git a/udisks/udisksclient.h b/udisks/udisksclient.h index 532696c..a412611 100644 --- a/udisks/udisksclient.h +++ b/udisks/udisksclient.h @@ -51,6 +51,8 @@ UDisksObject *udisks_client_get_object (UDisksClient *clie UDisksObject *udisks_client_peek_object (UDisksClient *client, const gchar *object_path); +UDisksBlock *udisks_client_get_block_for_dev (UDisksClient *client, + dev_t block_device_number); UDisksBlock *udisks_client_get_block_for_drive (UDisksClient *client, UDisksDrive *drive, gboolean get_physical); -- 2.7.4