fix partition module names when /boot is on diskfilter

/usr/local/grub2/sbin/grub-install: info: grub-mkimage --directory '/usr/local/grub2/lib/grub/i386-pc' --prefix '(mduuid/e6d1dcf06cea72140bafae74a8677f36)/grub' --output '/boot/grub/i386-pc/core.img' --format 'i386-pc' --compression 'auto'  'ext2' 'msdos' 'msdos' 'diskfilter' 'mdraid1x' 'biosdisk'
.
/usr/local/grub2/sbin/grub-install: error: cannot open `/usr/local/grub2/lib/grub/i386-pc/msdos.mod': No such file or directory.

Introduce common helper for both diskfilter and non-diskfilter case that
converts partition map names into module names.
This commit is contained in:
Andrey Borzenkov 2013-12-07 15:00:37 +04:00
parent 5ff249072d
commit f585c90505
4 changed files with 71 additions and 39 deletions

View file

@ -209,9 +209,23 @@ 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);
@ -250,11 +264,34 @@ 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,
arguments.device, arguments.force,
dest_dev, arguments.force,
arguments.fs_probe, arguments.allow_floppy);
/* Free resources. */
@ -266,6 +303,8 @@ main (int argc, char *argv[])
free (arguments.dir);
free (arguments.dev_map);
free (arguments.device);
free (root_dev);
free (dest_dev);
return 0;
}