[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 <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2012-07-20 12:36:41 +01:00
parent d3c660b671
commit 5d3c368efb
2 changed files with 64 additions and 11 deletions

View File

@@ -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 <freed> replacing self with IMAGE %s\n",
replacement->name );
if ( ( rc = image_exec ( replacement ) ) != 0 )
return rc;
}
if ( replacement )
return image_exec ( replacement );
return rc;
}