From 7bebe9579ee5ea1cfcfcdf25032dbab80ccc489f Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 29 Nov 2010 14:19:59 +0000 Subject: [cmdline] Match user expectations for &&, ||, goto, and exit The && and || operators should be left-associative, since that is how they are treated in most other languages (including C and Unix shell). For example, in the command: dhcp net0 && goto dhcp_ok || echo No DHCP on net0 if the "dhcp net0" fails then the "echo" should be executed. After an "exit" or a successful "goto", further commands on the same line should never be executed. For example: goto somewhere && echo This should never be printed exit 0 && echo This should never be printed exit 1 && echo This should never be printed An "exit" should cause the current shell or script to terminate and return the specified exit status to its caller. For example: chain test.ipxe && echo Success || echo Failure [in test.ipxe] #!ipxe exit 0 should echo "Success". Signed-off-by: Michael Brown --- src/include/ipxe/command.h | 2 -- src/include/ipxe/shell.h | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'src/include') diff --git a/src/include/ipxe/command.h b/src/include/ipxe/command.h index 2486e7aa2..a7d0ae462 100644 --- a/src/include/ipxe/command.h +++ b/src/include/ipxe/command.h @@ -23,6 +23,4 @@ struct command { #define __command __table_entry ( COMMANDS, 01 ) -extern int shell_exit; - #endif /* _IPXE_COMMAND_H */ diff --git a/src/include/ipxe/shell.h b/src/include/ipxe/shell.h index 55e56346c..faa32f422 100644 --- a/src/include/ipxe/shell.h +++ b/src/include/ipxe/shell.h @@ -9,6 +9,28 @@ FILE_LICENCE ( GPL2_OR_LATER ); +/** Shell stop states */ +enum shell_stop_state { + /** Continue processing */ + SHELL_CONTINUE = 0, + /** + * Stop processing current command line + * + * This is the stop state entered by commands that change the flow + * of execution, such as "goto". + */ + SHELL_STOP_COMMAND = 1, + /** + * Stop processing commands + * + * This is the stop state entered by commands that terminate + * the flow of execution, such as "exit". + */ + SHELL_STOP_COMMAND_SEQUENCE = 2, +}; + +extern void shell_stop ( int stop ); +extern int shell_stopped ( int stop ); extern int shell ( void ); #endif /* _IPXE_SHELL_H */ -- cgit v1.2.3-55-g7522