mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-05-11 09:48:24 +02:00
Add some patches to grub.
This commit is contained in:
111
src/patches/grub-0.90-append.patch
Normal file
111
src/patches/grub-0.90-append.patch
Normal file
@@ -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 (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')
|
||||
{
|
||||
Reference in New Issue
Block a user