All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Vladimir 'φ-coder/phcoder' Serbinenko" <phcoder@gmail.com>
To: The development of GNU GRUB <grub-devel@gnu.org>
Subject: Re: [PATCH] fix using grub device name as install device
Date: Fri, 29 Nov 2013 07:27:06 +0100	[thread overview]
Message-ID: <529833BA.4030605@gmail.com> (raw)
In-Reply-To: <1385673108-13091-1-git-send-email-arvidjaar@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 5083 bytes --]

On 28.11.2013 22:11, Andrey Borzenkov wrote:
> Shell version of grub-install called grub-setup which resolved
> install device name and called main setup routine. C version of
> grub-install calls main setup routine directly, which leads
> to the error:
> 
Do you have a reason for continuing accepting such input? It was
considered wrong way of doing things for quite some while.
> grub2-install: info: grub-bios-setup  --verbose  --force  --skip-fs-probe --directory='/boot/grub2/i386-pc' --device-map='/boot/grub2/device.map' '(hd2)'.
> grub2-install: info: reading /boot/grub2/i386-pc/boot.img.
> grub2-install: info: reading /boot/grub2/i386-pc/core.img.
> grub2-install: info: root is `(null)', dest is `(hd2)'.
> grub2-install: info: Opening dest.
> grub2-install: info: drive = -1.
> grub2-install: error: disk `(hd2)' not found.
> 
> Move resolving of destination device name into main setup routine
> so it is done consistently in both cases.
> 
> ---
>  util/grub-setup.c | 41 +----------------------------------------
>  util/setup.c      | 26 +++++++++++++++++++++++++-
>  2 files changed, 26 insertions(+), 41 deletions(-)
> 
> diff --git a/util/grub-setup.c b/util/grub-setup.c
> index 90b9de0..cc3af5d 100644
> --- a/util/grub-setup.c
> +++ b/util/grub-setup.c
> @@ -209,23 +209,9 @@ DEVICE must be an OS device (e.g. /dev/sda)."),
>    NULL, help_filter, NULL
>  };
>  
> -static char *
> -get_device_name (char *dev)
> -{
> -  size_t len = strlen (dev);
> -
> -  if (dev[0] != '(' || dev[len - 1] != ')')
> -    return 0;
> -
> -  dev[len - 1] = '\0';
> -  return dev + 1;
> -}
> -
>  int
>  main (int argc, char *argv[])
>  {
> -  char *root_dev = NULL;
> -  char *dest_dev = NULL;
>    struct arguments arguments;
>  
>    grub_util_host_init (&argc, &argv);
> @@ -264,34 +250,11 @@ main (int argc, char *argv[])
>    grub_mdraid1x_init ();
>    grub_lvm_init ();
>  
> -  dest_dev = get_device_name (arguments.device);
> -  if (! dest_dev)
> -    {
> -      /* Possibly, the user specified an OS device file.  */
> -      dest_dev = grub_util_get_grub_dev (arguments.device);
> -      if (! dest_dev)
> -        {
> -          char *program = xstrdup(program_name);
> -          fprintf (stderr, _("Invalid device `%s'.\n"), arguments.device);
> -          argp_help (&argp, stderr, ARGP_HELP_STD_USAGE, program);
> -          free(program);
> -          exit(1);
> -        }
> -      grub_util_info ("transformed OS device `%s' into GRUB device `%s'",
> -                      arguments.device, dest_dev);
> -    }
> -  else
> -    {
> -      /* For simplicity.  */
> -      dest_dev = xstrdup (dest_dev);
> -      grub_util_info ("Using `%s' as GRUB device", dest_dev);
> -    }
> -
>    /* Do the real work.  */
>    GRUB_SETUP_FUNC (arguments.dir ? : DEFAULT_DIRECTORY,
>  		   arguments.boot_file ? : DEFAULT_BOOT_FILE,
>  		   arguments.core_file ? : DEFAULT_CORE_FILE,
> -		   dest_dev, arguments.force,
> +		   arguments.device, arguments.force,
>  		   arguments.fs_probe, arguments.allow_floppy);
>  
>    /* Free resources.  */
> @@ -303,8 +266,6 @@ main (int argc, char *argv[])
>    free (arguments.dir);
>    free (arguments.dev_map);
>    free (arguments.device);
> -  free (root_dev);
> -  free (dest_dev);
>  
>    return 0;
>  }
> diff --git a/util/setup.c b/util/setup.c
> index 337c304..c1de3d2 100644
> --- a/util/setup.c
> +++ b/util/setup.c
> @@ -247,12 +247,13 @@ identify_partmap (grub_disk_t disk __attribute__ ((unused)),
>  void
>  SETUP (const char *dir,
>         const char *boot_file, const char *core_file,
> -       const char *dest, int force,
> +       const char *dev, int force,
>         int fs_probe, int allow_floppy)
>  {
>    char *core_path;
>    char *boot_img, *core_img, *boot_path;
>    char *root = 0;
> +  char *dest = 0;
>    size_t boot_size, core_size;
>  #ifdef GRUB_SETUP_BIOS
>    grub_uint16_t core_sectors;
> @@ -269,6 +270,28 @@ SETUP (const char *dir,
>  #endif
>    bl.last_length = 0;
>  
> +  {
> +    size_t len = strlen (dev);
> +
> +    if (len > 2 && dev[0] == '(' && dev[len - 1] == ')')
> +      {
> +	dest = xmalloc (len - 1);
> +	strncpy (dest, dev + 1, len - 2);
> +	dest[len - 2] = '\0';
> +      }
> +  }
> +
> +  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);
> +    }
> +
> +
>    /* Read the boot image by the OS service.  */
>    boot_path = grub_util_get_path (dir, boot_file);
>    boot_size = grub_util_get_image_size (boot_path);
> @@ -303,6 +326,7 @@ SETUP (const char *dir,
>    dest_dev = grub_device_open (dest);
>    if (! dest_dev)
>      grub_util_error ("%s", grub_errmsg);
> +  free (dest);
>  
>    core_dev = dest_dev;
>  
> 



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 291 bytes --]

  reply	other threads:[~2013-11-29  6:27 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-28 21:11 [PATCH] fix using grub device name as install device Andrey Borzenkov
2013-11-29  6:27 ` Vladimir 'φ-coder/phcoder' Serbinenko [this message]
2013-11-29  6:52   ` Andrey Borzenkov
2013-11-29  7:18     ` Vladimir 'φ-coder/phcoder' Serbinenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=529833BA.4030605@gmail.com \
    --to=phcoder@gmail.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.