summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2012-03-01 14:08:44 -0500
committerDavid Zeuthen <davidz@redhat.com>2012-03-01 14:08:44 -0500
commit31f24aa3bdfa7f53e74d4e24fcb79a3b7ed0d0ce (patch)
tree743962314c743688ce24f0aa6a896f04d0374aa4
parentcd0f2d9865a508e7c1bcee52ef0d1b5394ffb406 (diff)
downloadgvfs-31f24aa3bdfa7f53e74d4e24fcb79a3b7ed0d0ce.tar.gz
udisks2: Set G_VOLUME_IDENTIFIER_KIND_CLASS identifier for volumes
This identifier was discussed in https://bugzilla.gnome.org/show_bug.cgi?id=668295 and added to GLib with this commit http://git.gnome.org/browse/glib/commit/?id=10fbfcf09010e423cfc79c54e8da50b62a0f4b8a For now, we do the ifndef dance instead of hard-requiring GLib master. Signed-off-by: David Zeuthen <davidz@redhat.com>
-rw-r--r--monitor/udisks2/gvfsudisks2volume.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/monitor/udisks2/gvfsudisks2volume.c b/monitor/udisks2/gvfsudisks2volume.c
index af2cdf3b..85242672 100644
--- a/monitor/udisks2/gvfsudisks2volume.c
+++ b/monitor/udisks2/gvfsudisks2volume.c
@@ -656,6 +656,30 @@ gvfs_udisks2_volume_get_mount (GVolume *volume)
/* ---------------------------------------------------------------------------------------------------- */
+static gboolean
+gvfs_udisks2_volume_is_network_class (GVfsUDisks2Volume *volume)
+{
+ gboolean ret = FALSE;
+ if (volume->mount_point != NULL)
+ {
+ const gchar *fstype = g_unix_mount_point_get_fs_type (volume->mount_point);
+ if (g_strcmp0 (fstype, "nfs") == 0 ||
+ g_strcmp0 (fstype, "nfs4") == 0 ||
+ g_strcmp0 (fstype, "cifs") == 0 ||
+ g_strcmp0 (fstype, "smbfs") == 0 ||
+ g_strcmp0 (fstype, "ncpfs") == 0)
+ ret = TRUE;
+ }
+ return ret;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+/* can remove this once we depend on gio >= 2.31.19 */
+#ifndef G_VOLUME_IDENTIFIER_KIND_CLASS
+#define G_VOLUME_IDENTIFIER_KIND_CLASS "class"
+#endif
+
static gchar *
gvfs_udisks2_volume_get_identifier (GVolume *_volume,
const gchar *kind)
@@ -677,6 +701,8 @@ gvfs_udisks2_volume_get_identifier (GVolume *_volume,
else if (strcmp (kind, G_VOLUME_IDENTIFIER_KIND_UUID) == 0)
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");
return ret;
}
@@ -688,14 +714,14 @@ gvfs_udisks2_volume_enumerate_identifiers (GVolume *_volume)
GPtrArray *p;
p = g_ptr_array_new ();
- g_ptr_array_add (p, g_strdup (G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE));
-
+ g_ptr_array_add (p, g_strdup (G_VOLUME_IDENTIFIER_KIND_CLASS));
if (volume->block != NULL)
{
const gchar *label;
const gchar *uuid;
label = udisks_block_get_id_label (volume->block);
uuid = udisks_block_get_id_uuid (volume->block);
+ g_ptr_array_add (p, g_strdup (G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE));
if (strlen (label) > 0)
g_ptr_array_add (p, g_strdup (G_VOLUME_IDENTIFIER_KIND_LABEL));
if (strlen (uuid) > 0)