mirror of
https://github.com/ipxe/ipxe
synced 2025-12-15 00:12:19 +03:00
Allow "imgexec" with no arguments to boot the file that was loaded with
"kernel".
This commit is contained in:
@@ -304,7 +304,7 @@ static int imgexec_exec ( int argc, char **argv ) {
|
|||||||
{ NULL, 0, NULL, 0 },
|
{ NULL, 0, NULL, 0 },
|
||||||
};
|
};
|
||||||
struct image *image;
|
struct image *image;
|
||||||
const char *name;
|
const char *name = NULL;
|
||||||
int c;
|
int c;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
@@ -320,19 +320,29 @@ static int imgexec_exec ( int argc, char **argv ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Need exactly one image name */
|
/* Need no more than one image name */
|
||||||
if ( optind != ( argc - 1 ) ) {
|
if ( optind != argc )
|
||||||
|
name = argv[optind++];
|
||||||
|
if ( optind != argc ) {
|
||||||
imgexec_syntax ( argv );
|
imgexec_syntax ( argv );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
name = argv[optind];
|
|
||||||
|
|
||||||
/* Execute specified image */
|
/* Execute specified image */
|
||||||
image = find_image ( name );
|
if ( name ) {
|
||||||
if ( ! image ) {
|
image = find_image ( name );
|
||||||
printf ( "No such image: %s\n", name );
|
if ( ! image ) {
|
||||||
return 1;
|
printf ( "No such image: %s\n", name );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
image = imgautoselect();
|
||||||
|
if ( ! image ) {
|
||||||
|
printf ( "No loaded images\n" );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ( rc = imgexec ( image ) ) != 0 ) {
|
if ( ( rc = imgexec ( image ) ) != 0 ) {
|
||||||
printf ( "Could not execute %s: %s\n", name, strerror ( rc ) );
|
printf ( "Could not execute %s: %s\n", name, strerror ( rc ) );
|
||||||
return 1;
|
return 1;
|
||||||
@@ -448,7 +458,6 @@ static int imgfree_exec ( int argc, char **argv ) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Image management commands */
|
/** Image management commands */
|
||||||
struct command image_commands[] __command = {
|
struct command image_commands[] __command = {
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ extern int imgfetch ( const char *filename, const char *name,
|
|||||||
struct image **new_image );
|
struct image **new_image );
|
||||||
extern int imgload ( struct image *image );
|
extern int imgload ( struct image *image );
|
||||||
extern int imgexec ( struct image *image );
|
extern int imgexec ( struct image *image );
|
||||||
|
extern struct image * imgautoselect ( void );
|
||||||
extern void imgstat ( struct image *image );
|
extern void imgstat ( struct image *image );
|
||||||
extern void imgfree ( struct image *image );
|
extern void imgfree ( struct image *image );
|
||||||
|
|
||||||
|
|||||||
@@ -90,6 +90,22 @@ int imgexec ( struct image *image ) {
|
|||||||
return image_exec ( image );
|
return image_exec ( image );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Identify the first loaded image
|
||||||
|
*
|
||||||
|
* @ret image Image, or NULL
|
||||||
|
*/
|
||||||
|
struct image * imgautoselect ( void ) {
|
||||||
|
struct image *image;
|
||||||
|
|
||||||
|
for_each_image ( image ) {
|
||||||
|
if ( image->flags & IMAGE_LOADED )
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display status of an image
|
* Display status of an image
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user