aboutsummaryrefslogtreecommitdiffstats
path: root/src/include/ipxe/shell.h
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2010-11-29 14:19:59 +0000
committerMichael Brown <mcb30@ipxe.org>2010-11-29 14:19:59 +0000
commit7bebe9579ee5ea1cfcfcdf25032dbab80ccc489f (patch)
tree1d9a7812b7b79c1ba5f71af8ce01823cb89763a0 /src/include/ipxe/shell.h
parent01df5c510f4949f1d9d85c0067c24b1093e3f838 (diff)
downloadipxe-7bebe9579ee5ea1cfcfcdf25032dbab80ccc489f.tar.gz
[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 <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/shell.h')
-rw-r--r--src/include/ipxe/shell.h22
1 files changed, 22 insertions, 0 deletions
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 */