Allow "imgexec" with no arguments to boot the file that was loaded with

"kernel".
This commit is contained in:
Michael Brown
2007-01-12 07:32:46 +00:00
parent f135a37f30
commit 2876197306
3 changed files with 35 additions and 9 deletions

View File

@@ -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 = {
{ {

View File

@@ -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 );

View File

@@ -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
* *