From 16dafe7d66e3caaab95e4a46dfdac1b2bfe7a405 Mon Sep 17 00:00:00 2001 From: David Zeuthen Date: Wed, 28 Sep 2011 10:04:09 -0400 Subject: [PATCH] UDisksClient: add get_drive_for_block() method Signed-off-by: David Zeuthen --- doc/udisks2-sections.txt | 1 + udisks/udisksclient.c | 31 +++++++++++++++++++++++++++++++ udisks/udisksclient.h | 3 +++ 3 files changed, 35 insertions(+) diff --git a/doc/udisks2-sections.txt b/doc/udisks2-sections.txt index 36ad7e5..6c16d87 100644 --- a/doc/udisks2-sections.txt +++ b/doc/udisks2-sections.txt @@ -43,6 +43,7 @@ udisks_client_get_object_manager udisks_client_get_manager udisks_client_settle udisks_client_get_block_for_drive +udisks_client_get_drive_for_block UDISKS_TYPE_CLIENT UDISKS_CLIENT diff --git a/udisks/udisksclient.c b/udisks/udisksclient.c index d573178..6c93730 100644 --- a/udisks/udisksclient.c +++ b/udisks/udisksclient.c @@ -427,6 +427,9 @@ udisks_client_get_block_for_drive (UDisksClient *client, GList *blocks; GList *l; + g_return_val_if_fail (UDISKS_IS_CLIENT (client), NULL); + g_return_val_if_fail (UDISKS_IS_DRIVE (drive), NULL); + blocks = get_top_level_blocks_for_drive (client, g_dbus_object_get_object_path (g_dbus_interface_get_object (G_DBUS_INTERFACE (drive)))); for (l = blocks; l != NULL; l = l->next) { @@ -446,3 +449,31 @@ udisks_client_get_block_for_drive (UDisksClient *client, g_list_free (blocks); return ret; } + +/** + * udisks_client_get_drive_for_block: + * @client: A #UDisksClient. + * @block: A #UDisksBlock. + * + * Gets the #UDisksDrive that @block belongs to, if any. + * + * Returns: (transfer full): A #UDisksDrive or %NULL if there is no + * #UDisksDrive for @block - free the returned object with + * g_object_unref(). + */ +UDisksDrive * +udisks_client_get_drive_for_block (UDisksClient *client, + UDisksBlock *block) +{ + UDisksDrive *ret = NULL; + GDBusObject *object; + + g_return_val_if_fail (UDISKS_IS_CLIENT (client), NULL); + g_return_val_if_fail (UDISKS_IS_BLOCK (block), NULL); + + object = g_dbus_object_manager_get_object (client->object_manager, udisks_block_get_drive (block)); + if (object != NULL) + ret = udisks_object_get_drive (UDISKS_OBJECT (object)); + return ret; +} + diff --git a/udisks/udisksclient.h b/udisks/udisksclient.h index 6c0361a..5724844 100644 --- a/udisks/udisksclient.h +++ b/udisks/udisksclient.h @@ -50,6 +50,9 @@ UDisksBlock *udisks_client_get_block_for_drive (UDisksClient *clie UDisksDrive *drive, gboolean get_physical); +UDisksDrive *udisks_client_get_drive_for_block (UDisksClient *client, + UDisksBlock *block); + G_END_DECLS #endif /* __UDISKS_CLIENT_H__ */ -- 2.7.4