On Thu, Dec 5, 2013 at 9:56 AM, <arvidj...@gmail.com> wrote: > > > Отправлено с iPhone > >> 04 дек. 2013 г., в 23:15, Colin Watson <cjwat...@ubuntu.com> написал(а): >> >>> On Wed, Dec 04, 2013 at 01:54:42PM -0800, Jonathan McCune wrote: >>> Tested successfully on i386-pc in a QEMU VM. >> >> Thanks. I made a slight mistake, though, and broke the case of >> "grub-install '(hd0)'", which is what Andrey had been trying to fix in >> the first place. Here's a better version which I've tested to handle >> both OS and GRUB device forms successfully. >> > > Ouch. It becomes messier and messier ... :) Why not simply drop resolution of > device in grub-install? Let's do it in one place. >
One should not answer that early in the morning ... Colin, I see where the problem is, but let's do not complicate it even further. The real fix is to revert my patch and simply strip parenthesis in grub-install (with suitable modification of is_same_disk). Feel free to do it, otherwise I'll fix it on weekend. > >> diff --git a/ChangeLog b/ChangeLog >> index 8fba56c..c8072b5 100644 >> --- a/ChangeLog >> +++ b/ChangeLog >> @@ -1,3 +1,16 @@ >> +2013-12-04 Colin Watson <cjwat...@ubuntu.com> >> + >> + * util/setup.c (SETUP): Accept new dev_is_drive argument. If >> + passed, don't map dev to a GRUB drive again. >> + * include/grub/util/install.h (grub_util_bios_setup): Update >> + prototype. >> + (grub_util_sparc_setup): Likewise. >> + * util/grub-install.c (main): Tell grub_util_bios_setup that >> + install_drive has already been mapped to a GRUB drive. Likewise for >> + grub_util_sparc_setup, and pass install_drive rather than >> + install_device. >> + * util/grub-setup.c (main): Adjust call to GRUB_SETUP_FUNC. >> + >> 2013-12-04 Vladimir Serbinenko <phco...@gmail.com> >> >> * grub-core/boot/sparc64/ieee1275/boot.S [CDBOOT]: Move scratchpad >> diff --git a/include/grub/util/install.h b/include/grub/util/install.h >> index 4ba00f5..d1b4567 100644 >> --- a/include/grub/util/install.h >> +++ b/include/grub/util/install.h >> @@ -180,12 +180,12 @@ grub_install_get_image_target (const char *arg); >> void >> grub_util_bios_setup (const char *dir, >> const char *boot_file, const char *core_file, >> - const char *dest, int force, >> + const char *dev, int dev_is_drive, int force, >> int fs_probe, int allow_floppy); >> void >> grub_util_sparc_setup (const char *dir, >> const char *boot_file, const char *core_file, >> - const char *dest, int force, >> + const char *dev, int dev_is_drive, int force, >> int fs_probe, int allow_floppy); >> >> char * >> diff --git a/util/grub-install.c b/util/grub-install.c >> index 2d6ef75..3bb82fc 100644 >> --- a/util/grub-install.c >> +++ b/util/grub-install.c >> @@ -1436,11 +1436,12 @@ main (int argc, char *argv[]) >> platdir, >> device_map, >> install_device); >> + grub_util_info ("('%s' mapped to '%s')", install_device, install_drive); >> >> /* Now perform the installation. */ >> if (install_bootsector) >> grub_util_bios_setup (platdir, "boot.img", "core.img", >> - install_drive, force, >> + install_drive, 1, force, >> fs_probe, allow_floppy); >> break; >> } >> @@ -1461,12 +1462,13 @@ main (int argc, char *argv[]) >> !fs_probe ? "--skip-fs-probe" : "", >> platdir, >> device_map, >> - install_drive); >> + install_device); >> + grub_util_info ("('%s' mapped to '%s')", install_device, install_drive); >> >> /* Now perform the installation. */ >> if (install_bootsector) >> grub_util_sparc_setup (platdir, "boot.img", "core.img", >> - install_device, force, >> + install_drive, 1, force, >> fs_probe, allow_floppy); >> break; >> } >> diff --git a/util/grub-setup.c b/util/grub-setup.c >> index cc3af5d..6e8951e 100644 >> --- a/util/grub-setup.c >> +++ b/util/grub-setup.c >> @@ -254,7 +254,7 @@ main (int argc, char *argv[]) >> GRUB_SETUP_FUNC (arguments.dir ? : DEFAULT_DIRECTORY, >> arguments.boot_file ? : DEFAULT_BOOT_FILE, >> arguments.core_file ? : DEFAULT_CORE_FILE, >> - arguments.device, arguments.force, >> + arguments.device, 0, arguments.force, >> arguments.fs_probe, arguments.allow_floppy); >> >> /* Free resources. */ >> diff --git a/util/setup.c b/util/setup.c >> index c1de3d2..7bf125d 100644 >> --- a/util/setup.c >> +++ b/util/setup.c >> @@ -247,7 +247,7 @@ identify_partmap (grub_disk_t disk __attribute__ >> ((unused)), >> void >> SETUP (const char *dir, >> const char *boot_file, const char *core_file, >> - const char *dev, int force, >> + const char *dev, int dev_is_drive, int force, >> int fs_probe, int allow_floppy) >> { >> char *core_path; >> @@ -271,6 +271,7 @@ SETUP (const char *dir, >> bl.last_length = 0; >> >> { >> + /* Perhaps the user specified a parenthesised GRUB drive name. */ >> size_t len = strlen (dev); >> >> if (len > 2 && dev[0] == '(' && dev[len - 1] == ')') >> @@ -283,12 +284,18 @@ SETUP (const char *dir, >> >> if (! dest) >> { >> - /* Possibly, the user specified an OS device file. */ >> - dest = grub_util_get_grub_dev (dev); >> - if (! dest) >> - grub_util_error (_("Invalid device `%s'.\n"), dev); >> - grub_util_info ("transformed OS device `%s' into GRUB device `%s'", >> - dev, dest); >> + if (dev_is_drive) >> + dest = xstrdup (dev); >> + else >> + { >> + /* Possibly, the user specified an OS device file. */ >> + grub_util_pull_device (dev); >> + dest = grub_util_get_grub_dev (dev); >> + if (! dest) >> + grub_util_error (_("Invalid device `%s'.\n"), dev); >> + grub_util_info ("transformed OS device `%s' into GRUB device `%s'", >> + dev, dest); >> + } >> } >> >> >> -- >> 1.8.4.4 >> >> >> -- >> Colin Watson [cjwat...@ubuntu.com] >> >> _______________________________________________ >> Grub-devel mailing list >> Grub-devel@gnu.org >> https://lists.gnu.org/mailman/listinfo/grub-devel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel