summaryrefslogtreecommitdiff
path: root/src/udiskslinuxdrive.c
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2012-01-26 11:04:47 -0500
committerDavid Zeuthen <davidz@redhat.com>2012-01-26 11:04:47 -0500
commit830e829cc595a1889dbf7b89536ab5dbecd67273 (patch)
tree1d22ae14572aabf68fc78292854cb5928ce7eba2 /src/udiskslinuxdrive.c
parentefe3128b588d66f7a3ffa66edb32fc5d211af226 (diff)
Make sure that Drive:SortKey sorts e.g. sdz before sdaa
Also make sure that we e.g. process sdb before sdad to get Drive:SortKey set using sdb rather than sdad. With this change we get the expected output that corresponds to kernel probing order. Which (on good days) may correspond to slot and enclosure order. MODEL REVISION SERIAL DEVICE -------------------------------------------------------------------------- HP LOGICAL VOLUME 3.00 5001438008F61790 sda SEAGATE ST3300657SS 0006 3SJ1S7K600009051M0CE sdad sdb SEAGATE ST3300657SS 0006 3SJ1S4MH00009052RG6Z sdae sdc SEAGATE ST3300657SS 0006 3SJ1RFP900009051HZ5S sdaf sdd SEAGATE ST3300657SS 0006 3SJ1S66L00009052QGZA sdag sde SEAGATE ST3300657SS 0006 3SJ1RPFJ00009052BZ10 sdah sdf SEAGATE ST3300657SS 0006 3SJ1RWZ100009101T12H sdai sdg SEAGATE ST3300657SS 0006 3SJ1S7C500009052RKPP sdaj sdh SEAGATE ST3300657SS 0006 3SJ1S40K00009101T1XU sdak sdi SEAGATE ST3300657SS 0006 3SJ1RJS700009050VYEA sdal sdj SEAGATE ST3300657SS 0006 3SJ1RSJC00009052MWTB sdam sdk SEAGATE ST3300657SS 0006 3SJ1QNMQ00009052NECM sdan sdl SEAGATE ST3300657SS 0006 3SJ1S3NE00009101TB5Y sdao sdm WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30012560 sdn WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30064749 sdo WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30039741 sdp WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30064055 sdq WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30030732 sdr WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30010853 sds WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30024753 sdt WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30065104 sdu WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30031826 sdv WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30025874 sdw WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30063724 sdx WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30064486 sdy WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30032003 sdz WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30021345 sdaa WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30067287 sdab WDC WD1002FAEX-00Y9A0 01.01V10 WD-WCAW30014347 sdac Signed-off-by: David Zeuthen <davidz@redhat.com>
Diffstat (limited to 'src/udiskslinuxdrive.c')
-rw-r--r--src/udiskslinuxdrive.c45
1 files changed, 41 insertions, 4 deletions
diff --git a/src/udiskslinuxdrive.c b/src/udiskslinuxdrive.c
index 46e3e4e..eb2ca08 100644
--- a/src/udiskslinuxdrive.c
+++ b/src/udiskslinuxdrive.c
@@ -402,6 +402,30 @@ set_media_time_detected (UDisksLinuxDrive *drive,
udisks_drive_set_time_media_detected (iface, drive->time_media_detected);
}
+static gchar *
+append_fixedup_sd (const gchar *prefix,
+ const gchar *device_name)
+{
+ guint num_alphas, n;
+ GString *str;
+
+ g_return_val_if_fail (g_str_has_prefix (device_name, "sd"), NULL);
+
+ /* make sure sdaa comes after e.g. sdz by inserting up to 5 '_' characters
+ * between sd and a in sda...
+ */
+ for (num_alphas = 0; g_ascii_isalpha (device_name[num_alphas + 2]); num_alphas++)
+ ;
+ str = g_string_new (prefix);
+ g_string_append (str, "sd");
+ for (n = 0; n < 5 - num_alphas; n++)
+ g_string_append_c (str, '_');
+
+ g_string_append (str, device_name + 2);
+
+ return g_string_free (str, FALSE);
+}
+
/**
* udisks_linux_drive_update:
* @drive: A #UDisksLinuxDrive.
@@ -606,15 +630,28 @@ udisks_linux_drive_update (UDisksLinuxDrive *drive,
{
/* make sure fd* BEFORE sr* BEFORE sd* */
if (g_str_has_prefix (device_name, "fd"))
- drive->sort_key = g_strdup_printf ("00coldplug/10removable/%s", device_name);
+ {
+ drive->sort_key = g_strdup_printf ("00coldplug/10removable/%s", device_name);
+ }
else if (g_str_has_prefix (device_name, "sr"))
- drive->sort_key = g_strdup_printf ("00coldplug/11removable/%s", device_name);
+ {
+ drive->sort_key = g_strdup_printf ("00coldplug/11removable/%s", device_name);
+ }
+ else if (g_str_has_prefix (device_name, "sd"))
+ {
+ drive->sort_key = append_fixedup_sd ("00coldplug/12removable/", device_name);
+ }
else
- drive->sort_key = g_strdup_printf ("00coldplug/12removable/%s", device_name);
+ {
+ drive->sort_key = g_strdup_printf ("00coldplug/12removable/%s", device_name);
+ }
}
else
{
- drive->sort_key = g_strdup_printf ("00coldplug/00fixed/%s", device_name);
+ if (g_str_has_prefix (device_name, "sd"))
+ drive->sort_key = append_fixedup_sd ("00coldplug/00fixed/", device_name);
+ else
+ drive->sort_key = g_strdup_printf ("00coldplug/00fixed/%s", device_name);
}
}
else