UDisksClient: add get_drive_for_block() method
authorDavid Zeuthen <davidz@redhat.com>
Wed, 28 Sep 2011 14:04:09 +0000 (10:04 -0400)
committerDavid Zeuthen <davidz@redhat.com>
Wed, 28 Sep 2011 14:04:09 +0000 (10:04 -0400)
Signed-off-by: David Zeuthen <davidz@redhat.com>
doc/udisks2-sections.txt
udisks/udisksclient.c
udisks/udisksclient.h

index 36ad7e5..6c16d87 100644 (file)
@@ -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
 <SUBSECTION Standard>
 UDISKS_TYPE_CLIENT
 UDISKS_CLIENT
index d573178..6c93730 100644 (file)
@@ -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;
+}
+
index 6c0361a..5724844 100644 (file)
@@ -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__ */