[gPXE-devel] [PATCH] [script] Allow for exiting scripts
Shao Miller
Shao.Miller at yrdsb.edu.on.ca
Fri Mar 5 00:15:45 EST 2010
With sincere apologies to all gPXE users, I got my To: list crossed.
This was meant for the developers' mailing list. - Shao
Shao Miller wrote:
>
> In staging:
> http://git.etherboot.org/?p=gpxe-staging.git;a=commitdiff;h=963f18ec1127b55b42434002587ac565ce33cb3a
>
> In tracking system:
> http://support.etherboot.org/index.php?do=details&task_id=73
> <http://support.etherboot.org/index.php?do=details&task_id=73>
>
> Also attached.
>
> - Shao Miller
> -----
>
> From 963f18ec1127b55b42434002587ac565ce33cb3a Mon Sep 17 00:00:00 2001
> From: Shao Miller <shao.miller at yrdsb.edu.on.ca>
> Date: Thu, 4 Mar 2010 23:14:56 -0500
> Subject: [PATCH] [script] Allow for exiting scripts
>
> This commit allows the 'exit' command to set a flag which the
> script parser will use to choose whether or not to terminate
> execution of a script. The flag is reset so that any calling
> script is not also terminated.
>
> Previously, the 'exit' command in a script did nothing. This
> would suggest that adding it as a new feature should not
> negatively impact any gPXE scripts currently in existence.
>
> For example,
>
> #!gpxe
> # caller.gpxe
> echo Caller executing
> imgload callee.gpxe
> boot callee.gpxe
> echo Callee must have terminated
> exit
> echo Impossibility
>
> #!gpxe
> # callee.gpxe
> echo Callee executing
> echo Pre-exit
> exit
> echo Post-exit
>
> $ make EMBEDDED_IMAGE=caller.gpxe,callee.gpxe bin/gpxe.pdsk
> $ qemu -fda bin/gpxe.pdsk -boot a
>
> Code size cost: 19 bytes uncompressed (!)
> ---
> src/hci/shell.c | 8 ++++----
> src/image/script.c | 7 +++++++
> src/include/gpxe/shell.h | 1 +
> 3 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/src/hci/shell.c b/src/hci/shell.c
> index 5bedbdc..825dac3 100644
> --- a/src/hci/shell.c
> +++ b/src/hci/shell.c
> @@ -35,13 +35,13 @@ FILE_LICENCE ( GPL2_OR_LATER );
> static const char shell_prompt[] = "gPXE> ";
>
> /** Flag set in order to exit shell */
> -static int exit_flag = 0;
> +int shell_exit_flag = 0;
>
> /** "exit" command body */
> static int exit_exec ( int argc, char **argv __unused ) {
>
> if ( argc == 1 ) {
> - exit_flag = 1;
> + shell_exit_flag = 1;
> } else {
> printf ( "Usage: exit\n"
> "Exits the command shell\n" );
> @@ -91,8 +91,8 @@ struct command help_command __command = {
> void shell ( void ) {
> char *line;
>
> - exit_flag = 0;
> - while ( ! exit_flag ) {
> + shell_exit_flag = 0;
> + while ( ! shell_exit_flag ) {
> line = readline ( shell_prompt );
> if ( line ) {
> system ( line );
> diff --git a/src/image/script.c b/src/image/script.c
> index 0835ecb..4073eb0 100644
> --- a/src/image/script.c
> +++ b/src/image/script.c
> @@ -30,6 +30,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
> #include <ctype.h>
> #include <errno.h>
> #include <gpxe/image.h>
> +#include <gpxe/shell.h>
>
> struct image_type script_image_type __image_type ( PROBE_NORMAL );
>
> @@ -73,12 +74,18 @@ static int script_exec ( struct image *image ) {
> }
> }
>
> + if ( shell_exit_flag )
> + /* "exit" command should exit this script */
> + goto done;
> /* Move to next line */
> offset += ( len + 1 );
> }
>
> rc = 0;
> done:
> + /* Reset exit flag */
> + shell_exit_flag = 0;
> +
> /* Re-register image and return */
> register_image ( image );
> return rc;
> diff --git a/src/include/gpxe/shell.h b/src/include/gpxe/shell.h
> index a65a344..148ea83 100644
> --- a/src/include/gpxe/shell.h
> +++ b/src/include/gpxe/shell.h
> @@ -9,6 +9,7 @@
>
> FILE_LICENCE ( GPL2_OR_LATER );
>
> +extern int shell_exit_flag;
> extern void shell ( void );
>
> #endif /* _GPXE_SHELL_H */
> --
> 1.5.6.3
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://etherboot.org/pipermail/gpxe-devel/attachments/20100305/fd69c419/attachment.html
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0001--script-Allow-for-exiting-scripts.patch
Url: http://etherboot.org/pipermail/gpxe-devel/attachments/20100305/fd69c419/attachment.cc
More information about the gPXE-devel
mailing list