diff options
Diffstat (limited to 'sys-boot/grub/files/grub-0.92/grub-0.90-append.patch')
-rw-r--r-- | sys-boot/grub/files/grub-0.92/grub-0.90-append.patch | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/sys-boot/grub/files/grub-0.92/grub-0.90-append.patch b/sys-boot/grub/files/grub-0.92/grub-0.90-append.patch new file mode 100644 index 000000000000..99cd0285faef --- /dev/null +++ b/sys-boot/grub/files/grub-0.92/grub-0.90-append.patch @@ -0,0 +1,111 @@ +--- grub-0.90/stage2/stage2.c.append Thu Dec 20 08:20:48 2001 ++++ grub-0.90/stage2/stage2.c Thu Dec 20 17:01:20 2001 +@@ -500,7 +500,8 @@ + if (config_entries) + printf ("\ + Press enter to boot the selected OS, \'e\' to edit the\n\ +- commands before booting, or \'c\' for a command-line."); ++ commands before booting, \'a\' to modify the kernel arguments\n\ ++ before booting, or \'c\' for a command-line."); + else + printf ("\ + Press \'b\' to boot, \'e\' to edit the selected command in the\n\ +@@ -787,6 +788,98 @@ + enter_cmdline (heap, 0); + goto restart; + } ++ if (config_entries && c == 'a') ++ { ++ int new_num_entries = 0, i = 0, j; ++ int needs_padding, amount; ++ char *new_heap; ++ char * entries; ++ char * entry_copy; ++ char * append_line; ++ char * start; ++ ++ entry_copy = new_heap = heap; ++ cur_entry = get_entry (config_entries, first_entry + entryno, ++ 1); ++ ++ do ++ { ++ while ((*(new_heap++) = cur_entry[i++]) != 0); ++ new_num_entries++; ++ } ++ while (config_entries && cur_entry[i]); ++ ++ /* this only needs to be done if config_entries is non-NULL, ++ but it doesn't hurt to do it always */ ++ *(new_heap++) = 0; ++ ++ new_heap = heap + NEW_HEAPSIZE + 1; ++ ++ entries = entry_copy; ++ while (*entries) ++ { ++ if ((strstr(entries, "kernel") == entries) && ++ isspace(entries[6])) ++ break; ++ ++ while (*entries) entries++; ++ entries++; ++ } ++ ++ if (!*entries) ++ goto restart; ++ ++ start = entries + 6; ++ ++ /* skip the white space */ ++ while (*start && isspace(*start)) start++; ++ /* skip the kernel name */ ++ while (*start && !isspace(*start)) start++; ++ ++ /* skip the white space */ ++ needs_padding = (!*start || !isspace(*start)); ++ while (*start && isspace(*start)) start++; ++ ++ append_line = new_heap; ++ grub_strcpy(append_line, start); ++ ++ cls(); ++ print_cmdline_message (0); ++ ++ if (get_cmdline(PACKAGE " append> ", ++ append_line, NEW_HEAPSIZE + 1, ++ 0, 1)) ++ goto restart; ++ ++ /* have new args; append_line points to the ++ new args and start points to the old ++ args */ ++ ++ i = grub_strlen(start); ++ j = grub_strlen(append_line); ++ ++ if (i > (j + needs_padding)) ++ amount = i; ++ else ++ amount = j + needs_padding; ++ ++ /* align rest of commands properly */ ++ memmove (start + j + needs_padding, start + i, ++ ((int) append_line) - ((int) start) - (amount)); ++ ++ if (needs_padding) ++ *start = ' '; ++ ++ /* copy command to correct area */ ++ memmove (start + needs_padding, append_line, j); ++ ++ /* set up this entry to boot */ ++ config_entries = NULL; ++ cur_entry = entry_copy; ++ heap = new_heap; ++ ++ break; ++ } + #ifdef GRUB_UTIL + if (c == 'q') + { |