summaryrefslogtreecommitdiff
path: root/monitor
diff options
context:
space:
mode:
authorsegfault <segfault@riseup.net>2018-08-05 19:24:32 +0200
committerOndrej Holy <oholy@redhat.com>2018-09-04 07:24:32 +0000
commit212fa2053eba137db8c018db9b2ee8c5bf58dd36 (patch)
tree3d99f62d60ae90f13f69f0b1efbab6cb434edc9e /monitor
parent6cb37a42d616e4f5d5c9e0a6a8da271dc34e7440 (diff)
downloadgvfs-212fa2053eba137db8c018db9b2ee8c5bf58dd36.tar.gz
Add a new volume class `loop`
... to be able to list loop devices in the GTK+ places sidebar.
Diffstat (limited to 'monitor')
-rw-r--r--monitor/udisks2/gvfsudisks2volume.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/monitor/udisks2/gvfsudisks2volume.c b/monitor/udisks2/gvfsudisks2volume.c
index 0ff4809a..a509b5dd 100644
--- a/monitor/udisks2/gvfsudisks2volume.c
+++ b/monitor/udisks2/gvfsudisks2volume.c
@@ -846,6 +846,31 @@ gvfs_udisks2_volume_is_network_class (GVfsUDisks2Volume *volume)
return ret;
}
+static gboolean
+gvfs_udisks2_volume_is_loop_class (GVfsUDisks2Volume *volume)
+{
+ UDisksClient *client;
+ UDisksLoop *loop;
+ UDisksObject *object;
+
+ if (volume->block == NULL)
+ return FALSE;
+
+ client = gvfs_udisks2_volume_monitor_get_udisks_client (volume->monitor);
+
+ /* Check if the volume is a loop device */
+ loop = udisks_client_get_loop_for_block (client, volume->block);
+ if (loop != NULL)
+ return TRUE;
+
+ /* Check if the volume is an unlocked encrypted loop device */
+ object = udisks_client_get_object (client, udisks_block_get_crypto_backing_device (volume->block));
+ if (object != NULL && udisks_object_get_loop (object) != NULL)
+ return TRUE;
+
+ return FALSE;
+}
+
/* ---------------------------------------------------------------------------------------------------- */
static gchar *
@@ -870,7 +895,14 @@ gvfs_udisks2_volume_get_identifier (GVolume *_volume,
ret = strlen (uuid) > 0 ? g_strdup (uuid) : NULL;
}
if (strcmp (kind, G_VOLUME_IDENTIFIER_KIND_CLASS) == 0)
- ret = g_strdup (gvfs_udisks2_volume_is_network_class (volume) ? "network" : "device");
+ {
+ if (gvfs_udisks2_volume_is_network_class (volume))
+ ret = g_strdup ("network");
+ else if (gvfs_udisks2_volume_is_loop_class (volume))
+ ret = g_strdup ("loop");
+ else
+ ret = g_strdup ("device");
+ }
return ret;
}