From: Michael Brown Date: Sun, 28 Nov 2010 21:09:33 +0000 (+0000) Subject: [shell] Add "shell" command X-Git-Tag: v1.20.1~2374 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1fcea25c429472adaf498bb8a10fbe67b31c10dc;p=thirdparty%2Fipxe.git [shell] Add "shell" command The "shell" command allows a script to enter an interactive shell, which is potentially useful for troubleshooting. Signed-off-by: Michael Brown --- diff --git a/src/hci/shell.c b/src/hci/shell.c index f9cd3af28..7bf138a2e 100644 --- a/src/hci/shell.c +++ b/src/hci/shell.c @@ -74,14 +74,57 @@ struct command help_command __command = { * Start command shell * */ -void shell ( void ) { +int shell ( void ) { char *line; + int rc = 0; do { line = readline ( shell_prompt ); if ( line ) { - system ( line ); + rc = system ( line ); free ( line ); } } while ( shell_exit == 0 ); + shell_exit = 0; + + return rc; +} + +/** "shell" options */ +struct shell_options {}; + +/** "shell" option list */ +static struct option_descriptor shell_opts[] = {}; + +/** "shell" command descriptor */ +static struct command_descriptor shell_cmd = + COMMAND_DESC ( struct shell_options, shell_opts, 0, 0, + "", "" ); + +/** + * "shell" command + * + * @v argc Argument count + * @v argv Argument list + * @ret rc Return status code + */ +static int shell_exec ( int argc, char **argv ) { + struct shell_options opts; + int rc; + + /* Parse options */ + if ( ( rc = parse_options ( argc, argv, &shell_cmd, &opts ) ) != 0 ) + return rc; + + /* Start shell */ + if ( ( rc = shell() ) != 0 ) + return rc; + + return 0; } + +/** "shell" command */ +struct command shell_command __command = { + .name = "shell", + .exec = shell_exec, +}; diff --git a/src/include/ipxe/shell.h b/src/include/ipxe/shell.h index 635de248b..55e56346c 100644 --- a/src/include/ipxe/shell.h +++ b/src/include/ipxe/shell.h @@ -9,6 +9,6 @@ FILE_LICENCE ( GPL2_OR_LATER ); -extern void shell ( void ); +extern int shell ( void ); #endif /* _IPXE_SHELL_H */