11504
|
1 |
--- nautilus-cd-burner-2.21.5/src/nautilus-burn-drive-monitor.c.orig 2007-05-06 14:12:34.497011000 +0800
|
|
2 |
+++ nautilus-cd-burner-2.21.5/src/nautilus-burn-drive-monitor.c 2007-05-06 14:12:09.958116000 +0800
|
|
3 |
@@ -597,13 +597,40 @@
|
|
4 |
NautilusBurnDrive *drive;
|
|
5 |
NautilusBurnDrive *ret;
|
|
6 |
char *target;
|
|
7 |
+ char *raw_device = NULL;
|
9803
|
8 |
|
11504
|
9 |
ret = NULL;
|
9803
|
10 |
|
11504
|
11 |
g_return_val_if_fail (monitor != NULL, NULL);
|
|
12 |
g_return_val_if_fail (device != NULL, NULL);
|
9803
|
13 |
|
11504
|
14 |
- target = resolve_symlink (device);
|
|
15 |
+ char ** cd_udis;
|
|
16 |
+ LibHalContext * hal_ctx = monitor->priv->ctx;
|
|
17 |
+ int num_hal_udis = 0;
|
|
18 |
+ int i;
|
9803
|
19 |
+
|
11504
|
20 |
+ if ((cd_udis = libhal_manager_find_device_string_match ( hal_ctx, "block.device",
|
|
21 |
+ device, &num_hal_udis, NULL)) == NULL)
|
|
22 |
+ goto out;
|
|
23 |
+ else if (num_hal_udis)
|
|
24 |
+ for (i = 0; i < num_hal_udis; i++) {
|
|
25 |
+ char * udi;
|
|
26 |
+ udi = cd_udis[i];
|
|
27 |
+ if (libhal_device_query_capability (hal_ctx, udi, "volume", NULL)) {
|
|
28 |
+ raw_device = libhal_device_get_property_string (hal_ctx, udi,
|
|
29 |
+ "block.solaris.raw_device", NULL);
|
|
30 |
+ libhal_free_string (udi);
|
|
31 |
+ if (!raw_device)
|
|
32 |
+ continue;
|
|
33 |
+ for (;i < num_hal_udis; i ++)
|
|
34 |
+ libhal_free_string (cd_udis[i]);
|
|
35 |
+ break;
|
|
36 |
+ }
|
|
37 |
+ }
|
|
38 |
+ if (!raw_device)
|
|
39 |
+ raw_device = g_strdup (device);
|
9803
|
40 |
+
|
11504
|
41 |
+ target = resolve_symlink (raw_device);
|
|
42 |
if (target == NULL) {
|
|
43 |
goto out;
|
|
44 |
}
|
|
45 |
@@ -618,13 +645,14 @@
|
|
46 |
*/
|
|
47 |
if (drive->priv->device != NULL &&
|
|
48 |
(strcmp (drive->priv->device, target) == 0 ||
|
9803
|
49 |
- strcmp (drive->priv->device, device) == 0)) {
|
11504
|
50 |
+ strcmp (drive->priv->device, raw_device) == 0)) {
|
|
51 |
ret = nautilus_burn_drive_ref (drive);
|
|
52 |
break;
|
|
53 |
}
|
|
54 |
}
|
9841
|
55 |
|
11504
|
56 |
g_free (target);
|
|
57 |
+ g_free (raw_device);
|
9841
|
58 |
|
|
59 |
out:
|
11504
|
60 |
return ret;
|