+++ /dev/null
---- 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 (CMDLINE_EDIT_MODE);
-+
-+ 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')
- {