nautilus-cd-burner-02-non-raw-device.diff revision 12246
394N/A--- nautilus-cd-burner-2.21.5/src/nautilus-burn-drive-monitor.c.orig 2007-05-06 14:12:34.497011000 +0800
394N/A+++ nautilus-cd-burner-2.21.5/src/nautilus-burn-drive-monitor.c 2007-05-06 14:12:09.958116000 +0800
394N/A@@ -597,13 +597,40 @@
394N/A NautilusBurnDrive *drive;
394N/A NautilusBurnDrive *ret;
394N/A char *target;
394N/A+ char *raw_device = NULL;
394N/A
394N/A ret = NULL;
394N/A
394N/A g_return_val_if_fail (monitor != NULL, NULL);
394N/A g_return_val_if_fail (device != NULL, NULL);
394N/A
394N/A- target = resolve_symlink (device);
394N/A+ char ** cd_udis;
394N/A+ LibHalContext * hal_ctx = monitor->priv->ctx;
394N/A+ int num_hal_udis = 0;
394N/A+ int i;
394N/A+
394N/A+ if ((cd_udis = libhal_manager_find_device_string_match ( hal_ctx, "block.device",
3789N/A+ device, &num_hal_udis, NULL)) == NULL)
394N/A+ goto out;
394N/A+ else if (num_hal_udis)
394N/A+ for (i = 0; i < num_hal_udis; i++) {
394N/A+ char * udi;
394N/A+ udi = cd_udis[i];
394N/A+ if (libhal_device_query_capability (hal_ctx, udi, "volume", NULL)) {
394N/A+ raw_device = libhal_device_get_property_string (hal_ctx, udi,
618N/A+ "block.solaris.raw_device", NULL);
394N/A+ libhal_free_string (udi);
394N/A+ if (!raw_device)
844N/A+ continue;
844N/A+ for (;i < num_hal_udis; i ++)
618N/A+ libhal_free_string (cd_udis[i]);
1273N/A+ break;
394N/A+ }
394N/A+ }
394N/A+ if (!raw_device)
394N/A+ raw_device = g_strdup (device);
394N/A+
3661N/A+ target = resolve_symlink (raw_device);
3661N/A if (target == NULL) {
3778N/A goto out;
3789N/A }
3778N/A@@ -618,13 +645,14 @@
3996N/A */
3996N/A if (drive->priv->device != NULL &&
3996N/A (strcmp (drive->priv->device, target) == 0 ||
394N/A- strcmp (drive->priv->device, device) == 0)) {
727N/A+ strcmp (drive->priv->device, raw_device) == 0)) {
727N/A ret = nautilus_burn_drive_ref (drive);
727N/A break;
394N/A }
394N/A }
394N/A
394N/A g_free (target);
394N/A+ g_free (raw_device);
394N/A
394N/A out:
394N/A return ret;
3996N/A