[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