Skip to content

Commit

Permalink
add root flag to grub bios setup
Browse files Browse the repository at this point in the history
Signed-off-by: Tomasz Żyjewski <[email protected]>
Upstream-Status: Pending
  • Loading branch information
TomaszAIR authored and SergiiDmytruk committed Jan 22, 2025
1 parent 21c770a commit 2f8a8fa
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 10 deletions.
4 changes: 2 additions & 2 deletions include/grub/util/install.h
Original file line number Diff line number Diff line change
Expand Up @@ -203,13 +203,13 @@ 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 *root, const char *dest, int force,
int fs_probe, int allow_floppy,
int add_rs_codes, int warn_short_mbr_gap);
void
grub_util_sparc_setup (const char *dir,
const char *boot_file, const char *core_file,
const char *dest, int force,
const char *root, const char *dest, int force,
int fs_probe, int allow_floppy,
int add_rs_codes, int warn_short_mbr_gap);

Expand Down
4 changes: 2 additions & 2 deletions util/grub-install.c
Original file line number Diff line number Diff line change
Expand Up @@ -1830,7 +1830,7 @@ main (int argc, char *argv[])
if (install_bootsector)
{
grub_util_bios_setup (platdir, "boot.img", "core.img",
install_drive, force,
NULL, install_drive, force,
fs_probe, allow_floppy, add_rs_codes,
!grub_install_is_short_mbrgap_supported ());

Expand Down Expand Up @@ -1861,7 +1861,7 @@ main (int argc, char *argv[])
if (install_bootsector)
{
grub_util_sparc_setup (platdir, "boot.img", "core.img",
install_drive, force,
NULL, install_drive, force,
fs_probe, allow_floppy,
0 /* unused */, 0 /* unused */ );

Expand Down
11 changes: 10 additions & 1 deletion util/grub-setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ static struct argp_option options[] = {
N_("install even if problems are detected"), 0},
{"skip-fs-probe",'s',0, 0,
N_("do not probe for filesystems in DEVICE"), 0},
{"root-device", 'r', N_("DEVICE"), 0,
N_("use DEVICE as the root device"), 0},
{"verbose", 'v', 0, 0, N_("print verbose messages."), 0},
{"allow-floppy", 'a', 0, 0,
/* TRANSLATORS: The potential breakage isn't limited to floppies but it's
Expand Down Expand Up @@ -130,6 +132,7 @@ struct arguments
char *core_file;
char *dir;
char *dev_map;
char *root_dev;
int force;
int fs_probe;
int allow_floppy;
Expand Down Expand Up @@ -178,6 +181,12 @@ argp_parser (int key, char *arg, struct argp_state *state)
arguments->dev_map = xstrdup (arg);
break;

case 'r':
if (arguments->root_dev)
free (arguments->root_dev);
arguments->root_dev = xstrdup (arg);
break;

case 'f':
arguments->force = 1;
break;
Expand Down Expand Up @@ -313,7 +322,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,
dest_dev, arguments.force,
arguments.root_dev, dest_dev, arguments.force,
arguments.fs_probe, arguments.allow_floppy,
arguments.add_rs_codes, 0);

Expand Down
13 changes: 8 additions & 5 deletions util/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -252,14 +252,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 *root, const char *dest, int force,
int fs_probe, int allow_floppy,
int add_rs_codes __attribute__ ((unused)), /* unused on sparc64 */
int warn_small)
{
char *core_path;
char *boot_img, *core_img, *boot_path;
char *root = 0;
size_t boot_size, core_size;
grub_uint16_t core_sectors;
grub_device_t root_dev = 0, dest_dev, core_dev;
Expand Down Expand Up @@ -311,7 +310,10 @@ SETUP (const char *dir,

core_dev = dest_dev;

{
if (root)
root_dev = grub_device_open(root);

if (!root_dev) {
char **root_devices = grub_guess_root_devices (dir);
char **cur;
int found = 0;
Expand All @@ -324,6 +326,8 @@ SETUP (const char *dir,
char *drive;
grub_device_t try_dev;

if (root_dev)
break;
drive = grub_util_get_grub_dev (*cur);
if (!drive)
continue;
Expand All @@ -338,7 +342,7 @@ SETUP (const char *dir,
{
if (root_dev)
grub_device_close (root_dev);
free (root);
free ((void *)root);
root_dev = try_dev;
root = drive;
found = 1;
Expand Down Expand Up @@ -874,4 +878,3 @@ SETUP (const char *dir,
grub_device_close (dest_dev);
grub_device_close (root_dev);
}

0 comments on commit 2f8a8fa

Please sign in to comment.