diff options
| author | okuji <okuji@localhost> | 2005-08-20 08:25:51 +0000 |
|---|---|---|
| committer | okuji <okuji@localhost> | 2005-08-20 08:25:51 +0000 |
| commit | 16ccb8b138218d56875051d547af84410d18f9aa (patch) | |
| tree | 83538e68eae900e48da65a3feab05898f5c09db8 | |
| parent | 6a85ce795351ed43201eaf79ab4715b809228430 (diff) | |
| download | grub-16ccb8b138218d56875051d547af84410d18f9aa.tar.gz | |
2005-08-20 Yoshinori K. Okuji <okuji@enbug.org>
* loader/powerpc/ieee1275/linux.c (grub_rescue_cmd_linux): Specify
the boot file by the option BOOT_IMAGE. Use grub_stpcpy instead of
grub_strcat.
* loader/i386/pc/linux.c (grub_rescue_cmd_linux): Specify the boot
file by the option BOOT_IMAGE. Use grub_stpcpy instead of
grub_strcpy and grub_strlen. Take it into account that a space
character is inserted as a delimiter.
| -rw-r--r-- | ChangeLog | 11 | ||||
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | loader/i386/pc/linux.c | 24 | ||||
| -rw-r--r-- | loader/powerpc/ieee1275/linux.c | 17 |
4 files changed, 36 insertions, 18 deletions
@@ -1,5 +1,16 @@ 2005-08-20 Yoshinori K. Okuji <okuji@enbug.org> + * loader/powerpc/ieee1275/linux.c (grub_rescue_cmd_linux): Specify + the boot file by the option BOOT_IMAGE. Use grub_stpcpy instead of + grub_strcat. + + * loader/i386/pc/linux.c (grub_rescue_cmd_linux): Specify the boot + file by the option BOOT_IMAGE. Use grub_stpcpy instead of + grub_strcpy and grub_strlen. Take it into account that a space + character is inserted as a delimiter. + +2005-08-20 Yoshinori K. Okuji <okuji@enbug.org> + * partmap/pc.c (pc_partition_map_iterate): Include the value of an invalid magic in thre error. @@ -8,6 +8,8 @@ New in 1.91: * New commands, "search", "vbetest" and "vbeinfo". +* The option BOOT_IMAGE is passed to Linux. + New in 1.90 - 2005-08-07: diff --git a/loader/i386/pc/linux.c b/loader/i386/pc/linux.c index 50369cebb..48c59c79d 100644 --- a/loader/i386/pc/linux.c +++ b/loader/i386/pc/linux.c @@ -1,7 +1,7 @@ /* linux.c - boot Linux zImage or bzImage */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc. + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -250,22 +250,22 @@ grub_rescue_cmd_linux (int argc, char *argv[]) ((GRUB_LINUX_MAX_SETUP_SECTS - setup_sects - 1) << GRUB_DISK_SECTOR_BITS)); + /* Specify the boot file. */ + dest = grub_stpcpy (grub_linux_tmp_addr + GRUB_LINUX_CL_OFFSET, + "BOOT_IMAGE="); + dest = grub_stpcpy (dest, argv[0]); + /* Copy kernel parameters. */ - for (i = 1, dest = grub_linux_tmp_addr + GRUB_LINUX_CL_OFFSET; + for (i = 1; i < argc - && dest + grub_strlen (argv[i]) < (grub_linux_tmp_addr - + GRUB_LINUX_CL_END_OFFSET); - i++, *dest++ = ' ') + && dest + grub_strlen (argv[i]) + 1 < (grub_linux_tmp_addr + + GRUB_LINUX_CL_END_OFFSET); + i++) { - grub_strcpy (dest, argv[i]); - dest += grub_strlen (argv[i]); + *dest++ = ' '; + dest = grub_stpcpy (dest, argv[i]); } - if (i != 1) - dest--; - - *dest = '\0'; - len = prot_size; if (grub_file_read (file, (char *) GRUB_LINUX_BZIMAGE_ADDR, len) != len) grub_error (GRUB_ERR_FILE_READ_ERROR, "Couldn't read file"); diff --git a/loader/powerpc/ieee1275/linux.c b/loader/powerpc/ieee1275/linux.c index 659bdd4ab..19a8cb5cd 100644 --- a/loader/powerpc/ieee1275/linux.c +++ b/loader/powerpc/ieee1275/linux.c @@ -108,6 +108,7 @@ grub_rescue_cmd_linux (int argc, char *argv[]) grub_addr_t entry; int found_addr = 0; int size; + char *dest; grub_dl_ref (my_mod); @@ -214,18 +215,22 @@ grub_rescue_cmd_linux (int argc, char *argv[]) } } - size = 0; + size = sizeof ("BOOT_IMAGE=") + grub_strlen (argv[0]); for (i = 0; i < argc; i++) - size += grub_strlen (argv[i]); + size += grub_strlen (argv[i]) + 1; - linux_args = grub_malloc (size + argc + 1); - if (!linux_args) + linux_args = grub_malloc (size); + if (! linux_args) goto fail; + /* Specify the boot file. */ + dest = grub_stpcpy (linux_args, "BOOT_IMAGE="); + dest = grub_stpcpy (dest, argv[0]); + for (i = 1; i < argc; i++) { - grub_strcat (linux_args, argv[i]); - grub_strcat (linux_args, " "); + *dest++ = ' '; + dest = grub_stpcpy (dest, argv[i]); } fail: |
