Index: exo-mount/exo-mount-hal.c =================================================================== --- exo-mount/exo-mount-hal.c (revision 28527) +++ exo-mount/exo-mount-hal.c (working copy) @@ -59,6 +59,7 @@ gchar *name; /* file system options */ + const gchar *altfstype; gchar **fsoptions; const gchar *fstype; LibHalVolumeUsage fsusage; @@ -243,6 +244,7 @@ /* setup the file system internals */ device->fstype = libhal_volume_get_fstype (device->volume); + device->altfstype = libhal_device_get_property_string (hal_context, udi, "volume.fstype.alternative", NULL); device->fsusage = libhal_volume_get_fsusage (device->volume); } } @@ -263,8 +265,16 @@ } /* determine the valid mount options from the UDI */ - device->fsoptions = libhal_device_get_property_strlist (hal_context, udi, "volume.mount.valid_options", &derror); - + if (device->altfstype) + { + char key[128]; + sprintf(key, "volume.mount.%s.valid_options", device->altfstype); + device->fsoptions = libhal_device_get_property_strlist (hal_context, udi, key, &derror); + } + else + { + device->fsoptions = libhal_device_get_property_strlist (hal_context, udi, "volume.mount.valid_options", &derror); + } /* sanity checking */ if (G_UNLIKELY (device->file == NULL || device->name == NULL)) { @@ -706,10 +716,16 @@ ? exo_str_replace (mount_point, G_DIR_SEPARATOR_S, "_") : g_strdup (""); - /* let HAL guess the fstype */ - fstype = g_strdup (""); - - /* setup the D-Bus error */ + if (G_UNLIKELY (device->altfstype != NULL)) + { + fstype = g_strdup (device->altfstype); + } + else + { + /* let HAL guess the fstype */ + fstype = g_strdup (""); + } + /* setup the D-Bus error */ dbus_error_init (&derror); /* now several times... */