grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Fix grub-install with OS device name


From: Andrey Borzenkov
Subject: Re: [PATCH] Fix grub-install with OS device name
Date: Thu, 5 Dec 2013 11:08:40 +0400

On Thu, Dec 5, 2013 at 9:56 AM,  <address@hidden> wrote:
>
>
> Отправлено с iPhone
>
>> 04 дек. 2013 г., в 23:15, Colin Watson <address@hidden> написал(а):
>>
>>> 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  <address@hidden>
>> +
>> +    * 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  <address@hidden>
>>
>>    * 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                                       address@hidden
>>
>> _______________________________________________
>> Grub-devel mailing list
>> address@hidden
>> https://lists.gnu.org/mailman/listinfo/grub-devel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]