svn commit: r199210 - head/sys/boot/common
Attilio Rao
attilio at FreeBSD.org
Thu Nov 12 01:30:18 UTC 2009
Author: attilio
Date: Thu Nov 12 01:30:17 2009
New Revision: 199210
URL: http://svn.freebsd.org/changeset/base/199210
Log:
Introduce a new option (BOOT_PROMPT_123) that lets enter the boot prompt
only when typing the sequence "123" (opposite to the standard 'push any
button' approach).
That results useful when using serial lines sending garbage and leading
to unwilling boot prompt appearence.
Obtained from: Sandvine Incorporated
Reviewed by: emaste, jhb
Sponsored by: Sandvine Incorporated
MFC: 1 week
Modified:
head/sys/boot/common/Makefile.inc
head/sys/boot/common/boot.c
Modified: head/sys/boot/common/Makefile.inc
==============================================================================
--- head/sys/boot/common/Makefile.inc Thu Nov 12 00:52:14 2009 (r199209)
+++ head/sys/boot/common/Makefile.inc Thu Nov 12 01:30:17 2009 (r199210)
@@ -38,4 +38,8 @@ MAN+= ../forth/loader.conf.5
MAN+= ../forth/loader.4th.8
.endif
+.if defined(BOOT_PROMPT_123)
+CFLAGS+= -DBOOT_PROMPT_123
+.endif
+
MAN+= loader.8
Modified: head/sys/boot/common/boot.c
==============================================================================
--- head/sys/boot/common/boot.c Thu Nov 12 00:52:14 2009 (r199209)
+++ head/sys/boot/common/boot.c Thu Nov 12 01:30:17 2009 (r199210)
@@ -162,6 +162,9 @@ autoboot(int timeout, char *prompt)
int c, yes;
char *argv[2], *cp, *ep;
char *kernelname;
+#ifdef BOOT_PROMPT_123
+ const char *seq = "123", *p = seq;
+#endif
autoboot_tried = 1;
@@ -192,14 +195,29 @@ autoboot(int timeout, char *prompt)
yes = 0;
+#ifdef BOOT_PROMPT_123
+ printf("%s\n", (prompt == NULL) ? "Hit [Enter] to boot immediately, or "
+ "1 2 3 sequence for command prompt." : prompt);
+#else
printf("%s\n", (prompt == NULL) ? "Hit [Enter] to boot immediately, or any other key for command prompt." : prompt);
+#endif
for (;;) {
if (ischar()) {
c = getchar();
+#ifdef BOOT_PROMPT_123
+ if ((c == '\r') || (c == '\n')) {
+ yes = 1;
+ break;
+ } else if (c != *p++)
+ p = seq;
+ if (*p == 0)
+ break;
+#else
if ((c == '\r') || (c == '\n'))
yes = 1;
break;
+#endif
}
ntime = time(NULL);
if (ntime >= when) {
More information about the svn-src-head
mailing list