diff options
| author | Michael Brown | 2008-03-27 00:16:20 +0100 |
|---|---|---|
| committer | Michael Brown | 2008-03-27 00:16:20 +0100 |
| commit | 978996cdae6d38b3febc9c07acf2585dde842722 (patch) | |
| tree | 8cf19d2e31e4c8008b879eafcf8631a85fff7eb8 /src | |
| parent | [libc] Whitespace cleanup in errno.h (diff) | |
| download | ipxe-978996cdae6d38b3febc9c07acf2585dde842722.tar.gz ipxe-978996cdae6d38b3febc9c07acf2585dde842722.tar.xz ipxe-978996cdae6d38b3febc9c07acf2585dde842722.zip | |
[usr] Offer user a second chance to enter the shell on boot failure
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/main.c | 34 | ||||
| -rw-r--r-- | src/hci/shell_banner.c | 19 |
2 files changed, 32 insertions, 21 deletions
diff --git a/src/core/main.c b/src/core/main.c index 3295feaf2..ca62db252 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -14,26 +14,54 @@ Literature dealing with the network protocols: **************************************************************************/ +#include <stdio.h> #include <gpxe/init.h> +#include <gpxe/features.h> #include <gpxe/shell.h> #include <gpxe/shell_banner.h> #include <usr/autoboot.h> +#define NORMAL "\033[0m" +#define BOLD "\033[1m" +#define CYAN "\033[36m" + +static struct feature features[0] __table_start ( struct feature, features ); +static struct feature features_end[0] __table_end ( struct feature, features ); + /** * Main entry point * * @ret rc Return status code */ __cdecl int main ( void ) { + struct feature *feature; initialise(); startup(); - if ( shell_banner() ) + /* Print welcome banner */ + printf ( NORMAL "\n\n\n" BOLD "gPXE " VERSION + NORMAL " -- Open Source Boot Firmware -- " + CYAN "http://etherboot.org" NORMAL "\n" + "Features:" ); + for ( feature = features ; feature < features_end ; feature++ ) + printf ( " %s", feature->name ); + printf ( "\n" ); + + /* Prompt for shell */ + if ( shell_banner() ) { + /* User wants shell; just give them a shell */ shell(); - else + } else { + /* User doesn't want shell; try booting. If booting + * fails, offer a second chance to enter the shell for + * diagnostics. + */ autoboot(); - + if ( shell_banner() ) + shell(); + } + shutdown(); return 0; diff --git a/src/hci/shell_banner.c b/src/hci/shell_banner.c index 62da487c7..92cd17ddf 100644 --- a/src/hci/shell_banner.c +++ b/src/hci/shell_banner.c @@ -18,7 +18,6 @@ #include <stdio.h> #include <console.h> -#include <gpxe/features.h> #include <gpxe/timer.h> #include <gpxe/shell_banner.h> @@ -30,13 +29,6 @@ #define BANNER_TIMEOUT ( 2 * TICKS_PER_SEC ) -#define NORMAL "\033[0m" -#define BOLD "\033[1m" -#define CYAN "\033[36m" - -static struct feature features[0] __table_start ( struct feature, features ); -static struct feature features_end[0] __table_end ( struct feature, features ); - /** * Print shell banner and prompt for shell entry * @@ -44,18 +36,9 @@ static struct feature features_end[0] __table_end ( struct feature, features ); */ int shell_banner ( void ) { unsigned long timeout = ( currticks() + BANNER_TIMEOUT ); - struct feature *feature; - int key; int enter_shell = 0; + int key; - /* Print welcome banner */ - printf ( NORMAL "\n\n\n" BOLD "gPXE " VERSION - NORMAL " -- Open Source Boot Firmware -- " - CYAN "http://etherboot.org" NORMAL "\n" - "Features:" ); - for ( feature = features ; feature < features_end ; feature++ ) { - printf ( " %s", feature->name ); - } printf ( "\nPress Ctrl-B for the gPXE command line..." ); /* Wait for key */ |
