On Thursday 14 August 2003 11:47, Chmouel Boudjnah wrote:
> For me this (bourrinage) patch fix it :
>
> --- grub-0.93/lib/device.c.chmou 2003-08-14 11:33:57.000000000 +0200
> +++ grub-0.93/lib/device.c 2003-08-14 11:36:55.700163832 +0200
> @@ -581,7 +581,7 @@
> if (check_device (name))
> {
> (*map)[num_hd + 0x80] = strdup (name);
> - assert ((*map)[num_hd + 0x80]);
> + //assert ((*map)[num_hd + 0x80]);
>
> /* If the device map file is opened, write the map. */
> if (fp)
>
>
> don't know what's wrong though...
Chmouel,
Can you forward the following also to the Cooker mailing list, because for
several weeks I have not been able to post a single thing there. It's sad :-/
I found several strange things in the grub code.
(And yes, I applied both the memcpy and gcc patches)
I inserted in my grub/main.c the following (debug) statements:
[...]
case OPT_DEVICE_MAP:
device_map_file = strdup (optarg);
fprintf(stderr, "JvS in grub/main.c. We found a device_map file,
optarg=%s\n", optarg);
fprintf(stderr, "JvS in grub/main.c. and the device_map_file=%s\n",
device_map_file);
break;
[..]
And this is what happens:
[EMAIL PROTECTED] grub-0.93]$ grub/grub --device-map=/boot/grub/device.map
JvS in grub/main.c. We found a device_map file, optarg=/boot/grub/device.map
JvS in grub/main.c. and the device_map_file=(null)
And this shows that strdup() does not work as advertised!
using debug statements I determined that the actual segmentation fault
occurs within a system call to realpath()
in function init_device_map() at line 553 of lib/device.c
(realpath() tries to find the real path for /dev/discs/disc0 by following
the symlinks)
So there seems to be a problem with the use of standard system libraries
from grub.
I was not able to correct the problems.
I hope this analysis helps.
John