From 5d3c368efbc23d0e85e7bb3fa20c3766bfafd88a Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 20 Jul 2012 12:36:41 +0100 Subject: [image] Add "--replace" option Expose image tail-recursion to iPXE scripts via the "--replace" option. This functions similarly to exec() under Unix: the currently-executing script is replaced with the new image (as opposed to running the new image as a subroutine). Signed-off-by: Michael Brown --- src/core/image.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/core') diff --git a/src/core/image.c b/src/core/image.c index 666ee3de8..1bf5447f0 100644 --- a/src/core/image.c +++ b/src/core/image.c @@ -327,6 +327,14 @@ int image_exec ( struct image *image ) { if ( image->flags & IMAGE_AUTO_UNREGISTER ) unregister_image ( image ); + /* Debug message for tail-recursion. Placed here because the + * image_put() may end up freeing the image. + */ + if ( replacement ) { + DBGC ( image, "IMAGE %s replacing self with IMAGE %s\n", + image->name, replacement->name ); + } + /* Drop temporary reference to the original image */ image_put ( image ); @@ -338,12 +346,8 @@ int image_exec ( struct image *image ) { uri_put ( old_cwuri ); /* Tail-recurse into replacement image, if one exists */ - if ( replacement ) { - DBGC ( image, "IMAGE replacing self with IMAGE %s\n", - replacement->name ); - if ( ( rc = image_exec ( replacement ) ) != 0 ) - return rc; - } + if ( replacement ) + return image_exec ( replacement ); return rc; } -- cgit v1.2.3-55-g7522