Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Patch for boot loader: "menu" command
> On Thu, Jul 25, 2013 at 02:24:29PM +0200, Havard Eidnes wrote:
>> Now, there are probably several ways to go around mending this.
>> Some of them are:
>>
>> 1) provide a way to display the contents of boot.cfg (but need to
>> prevent showing the "contents of /netbsd"...)
>> 2) provide a way to recall and edit one of the boot commands from
>> boot.cfg (sounds complicated, and more than I intended to chew
>> off in this round)
>> 3) provide a way to re-enter the boot menu you dropped from in
>> the first step in the procedure above, and then allow to
>> select one of the boot methods already specified in boot.cfg
>
> How about change "boot" to use whatever boot.cfg says is the default
> boot option, and "boot ...anything..." to be the override-the-menu
> command?
How does the attached look? It should implement the suggested idea.
Regards,
- Håvard
? boot/boot2.c.menu
Index: boot/boot2.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/stand/boot/boot2.c,v
retrieving revision 1.58
diff -u -r1.58 boot2.c
--- boot/boot2.c 4 Aug 2012 03:51:27 -0000 1.58
+++ boot/boot2.c 25 Jul 2013 23:06:28 -0000
@@ -439,6 +439,11 @@
bootit(filename, howto, tell);
} else {
int i;
+
+#ifndef SMALL
+ if (bootconf.nummenu > 0)
+ bootdefault();
+#endif
for (i = 0; i < NUMNAMES; i++) {
bootit(names[i][0], howto, tell);
bootit(names[i][1], howto, tell);
Index: lib/bootmenu.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/stand/lib/bootmenu.c,v
retrieving revision 1.10
diff -u -r1.10 bootmenu.c
--- lib/bootmenu.c 18 Aug 2011 13:20:04 -0000 1.10
+++ lib/bootmenu.c 25 Jul 2013 23:06:28 -0000
@@ -41,6 +41,8 @@
#define isnum(c) ((c) >= '0' && (c) <= '9')
+static void docommandchoice(int);
+
extern struct x86_boot_params boot_params;
extern const char bootprog_name[], bootprog_rev[], bootprog_kernrev[];
@@ -297,11 +299,47 @@
return choice;
}
+static void
+docommandchoice(int choice)
+{
+ char input[80], *ic, *oc;
+
+ ic = bootconf.command[choice];
+ /* Split command string at ; into separate commands */
+ do {
+ oc = input;
+ /* Look for ; separator */
+ for (; *ic && *ic != COMMAND_SEPARATOR; ic++)
+ *oc++ = *ic;
+ if (*input == '\0')
+ continue;
+ /* Strip out any trailing spaces */
+ oc--;
+ for (; *oc == ' ' && oc > input; oc--);
+ *++oc = '\0';
+ if (*ic == COMMAND_SEPARATOR)
+ ic++;
+ /* Stop silly command strings like ;;; */
+ if (*input != '\0')
+ docommand(input);
+ /* Skip leading spaces */
+ for (; *ic == ' '; ic++);
+ } while (*ic);
+}
+
+void
+bootdefault(void)
+{
+
+ if (bootconf.nummenu > 0)
+ docommandchoice(bootconf.def);
+}
+
void
doboottypemenu(void)
{
int choice;
- char input[80], *ic, *oc;
+ char input[80];
printf("\n");
/* Display menu */
@@ -357,27 +395,7 @@
printf("type \"?\" or \"help\" for help.\n");
bootmenu(); /* does not return */
} else {
- ic = bootconf.command[choice];
- /* Split command string at ; into separate commands */
- do {
- oc = input;
- /* Look for ; separator */
- for (; *ic && *ic != COMMAND_SEPARATOR; ic++)
- *oc++ = *ic;
- if (*input == '\0')
- continue;
- /* Strip out any trailing spaces */
- oc--;
- for (; *oc == ' ' && oc > input; oc--);
- *++oc = '\0';
- if (*ic == COMMAND_SEPARATOR)
- ic++;
- /* Stop silly command strings like ;;; */
- if (*input != '\0')
- docommand(input);
- /* Skip leading spaces */
- for (; *ic == ' '; ic++);
- } while (*ic);
+ docommandchoice(choice);
}
}
Index: lib/bootmenu.h
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/stand/lib/bootmenu.h,v
retrieving revision 1.2
diff -u -r1.2 bootmenu.h
--- lib/bootmenu.h 13 Dec 2008 23:30:54 -0000 1.2
+++ lib/bootmenu.h 25 Jul 2013 23:06:28 -0000
@@ -36,6 +36,7 @@
void parsebootconf(const char *);
void doboottypemenu(void);
+void bootdefault(void);
int atoi(const char *);
struct bootconf_def {
Home |
Main Index |
Thread Index |
Old Index