Index: util/i386/pc/grub-setup.c =================================================================== --- util/i386/pc/grub-setup.c (revision 1964) +++ util/i386/pc/grub-setup.c (working copy) @@ -94,6 +94,7 @@ static void setup (const char *dir, + const char *prefix, const char *boot_file, const char *core_file, const char *root, const char *dest, int must_embed) { @@ -373,7 +374,7 @@ /* Make sure that GRUB reads the identical image as the OS. */ tmp_img = xmalloc (core_size); - core_path_dev = grub_util_get_path (DEFAULT_DIRECTORY, core_file); + core_path_dev = grub_util_get_path (prefix, core_file); /* It is a Good Thing to sync two times. */ sync (); @@ -540,6 +541,7 @@ -b, --boot-image=FILE use FILE as the boot image [default=%s]\n\ -c, --core-image=FILE use FILE as the core image [default=%s]\n\ -d, --directory=DIR use GRUB files in the directory DIR [default=%s]\n\ + -p, --prefix=DIR specify the name of GRUB directory relative to partition root [default=%s]\n \ -m, --device-map=FILE use FILE as the device map [default=%s]\n\ -r, --root-device=DEV use DEV as the root device [default=guessed]\n\ -h, --help display this message and exit\n\ @@ -548,7 +550,8 @@ \n\ Report bugs to <%s>.\n\ ", - DEFAULT_BOOT_FILE, DEFAULT_CORE_FILE, DEFAULT_DIRECTORY, + DEFAULT_BOOT_FILE, DEFAULT_CORE_FILE, DEFAULT_DIRECTORY, + DEFAULT_DIRECTORY, DEFAULT_DEVICE_MAP, PACKAGE_BUGREPORT); exit (status); @@ -575,6 +578,7 @@ char *dev_map = 0; char *root_dev = 0; char *dest_dev; + char *prefix = 0; int must_embed = 0; progname = "grub-setup"; @@ -582,7 +586,7 @@ /* Check for options. */ while (1) { - int c = getopt_long (argc, argv, "b:c:d:m:r:hVv", options, 0); + int c = getopt_long (argc, argv, "p:b:c:d:m:r:hVv", options, 0); if (c == -1) break; @@ -603,6 +607,14 @@ core_file = xstrdup (optarg); break; + case 'p': + if (prefix) + free (prefix); + + prefix = xstrdup (optarg); + break; + + case 'd': if (dir) free (dir); @@ -723,6 +735,7 @@ for (i = 0; devicelist[i]; i++) { setup (dir ? : DEFAULT_DIRECTORY, + prefix ? : DEFAULT_DIRECTORY, boot_file ? : DEFAULT_BOOT_FILE, core_file ? : DEFAULT_CORE_FILE, root_dev, grub_util_get_grub_dev (devicelist[i]), 1); @@ -732,6 +745,7 @@ #endif /* Do the real work. */ setup (dir ? : DEFAULT_DIRECTORY, + prefix ? : DEFAULT_DIRECTORY, boot_file ? : DEFAULT_BOOT_FILE, core_file ? : DEFAULT_CORE_FILE, root_dev, dest_dev, must_embed);