nautilus-cd-burner-02-non-raw-device.diff revision 10545
10545N/A--- nautilus-cd-burner-2.18.1/src/nautilus-burn-drive-monitor.c.orig 2007-04-29 15:50:13.916435000 +0800
10545N/A+++ nautilus-cd-burner-2.18.1/src/nautilus-burn-drive-monitor.c 2007-04-29 15:52:03.376322000 +0800
10545N/A@@ -597,13 +597,41 @@
10545N/A NautilusBurnDrive *drive;
10545N/A NautilusBurnDrive *ret;
10545N/A char *target;
10545N/A+ char *raw_device;
10545N/A
10545N/A ret = NULL;
10545N/A
10545N/A g_return_val_if_fail (monitor != NULL, NULL);
10545N/A g_return_val_if_fail (device != NULL, NULL);
10545N/A
10545N/A- target = resolve_symlink (device);
10545N/A+ char ** cd_udis;
10545N/A+ LibHalContext * hal_ctx = monitor->priv->ctx;
10545N/A+ int num_hal_udis = 0;
10545N/A+ int i;
10545N/A+
10545N/A+ if ((cd_udis = libhal_manager_find_device_string_match ( hal_ctx, "block.device",
10545N/A+ device, &num_hal_udis, NULL)) == NULL)
10545N/A+ goto out;
10545N/A+ else if (num_hal_udis)
10545N/A+ for (i = 0; i < num_hal_udis; i++) {
10545N/A+ char * udi;
10545N/A+ udi = cd_udis[i];
10545N/A+ if (libhal_device_query_capability (hal_ctx, udi, "volume", NULL)) {
10545N/A+ raw_device = libhal_device_get_property_string (hal_ctx, udi,
10545N/A+ "block.solaris.raw_device", NULL);
10545N/A+ if (!raw_device) {
10545N/A+ libhal_free_string (udi);
10545N/A+ continue;
10545N/A+ }
10545N/A+ libhal_free_string (udi);
10545N/A+ break;
10545N/A+ }
10545N/A+ }
10545N/A+ if (!raw_device)
10545N/A+ raw_device = device;
10545N/A+
10545N/A+ target = resolve_symlink (raw_device);
10545N/A+
10545N/A if (target == NULL) {
10545N/A goto out;
10545N/A }
10545N/A@@ -618,7 +646,7 @@
10545N/A */
10545N/A if (drive->priv->device != NULL &&
10545N/A (strcmp (drive->priv->device, target) == 0 ||
10545N/A- strcmp (drive->priv->device, device) == 0)) {
10545N/A+ strcmp (drive->priv->device, raw_device) == 0)) {
10545N/A ret = nautilus_burn_drive_ref (drive);
10545N/A break;
10545N/A }