From f135a37f3050a40ad5399e150169ba6b880fe47d Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 12 Jan 2007 07:22:20 +0000 Subject: Cleaner separation between imgXXX() functions and image_cmd.c --- src/usr/fetch.c | 7 ----- src/usr/imgmgmt.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 75 insertions(+), 9 deletions(-) (limited to 'src/usr') diff --git a/src/usr/fetch.c b/src/usr/fetch.c index f7f3a771e..001731845 100644 --- a/src/usr/fetch.c +++ b/src/usr/fetch.c @@ -23,7 +23,6 @@ * */ -#include #include #include #include @@ -45,12 +44,6 @@ int fetch ( struct image *image, const char *filename ) { struct buffer buffer; int rc; - /* Name the image, if it isn't explicitly named */ - if ( ! image->name[0] ) { - strncpy ( image->name, basename ( filename ), - ( sizeof ( image->name ) - 1 ) ); - } - /* Allocate an expandable buffer to hold the file */ if ( ( rc = ebuffer_alloc ( &buffer, 0 ) ) != 0 ) return rc; diff --git a/src/usr/imgmgmt.c b/src/usr/imgmgmt.c index 437cf8e48..de71dee1b 100644 --- a/src/usr/imgmgmt.c +++ b/src/usr/imgmgmt.c @@ -17,8 +17,11 @@ */ #include +#include +#include #include #include +#include #include /** @file @@ -27,19 +30,89 @@ * */ +/** + * Fetch an image + * + * @v filename Filename for image + * @v name Name for image, or NULL + * @ret new_image Newly created image + * @ret rc Return status code + */ +int imgfetch ( const char *filename, const char *name, + struct image **new_image ) { + struct image *image; + int rc; + + /* Allocate new image */ + image = malloc ( sizeof ( *image ) ); + if ( ! image ) + return -ENOMEM; + memset ( image, 0, sizeof ( *image ) ); + + /* Fill in image name */ + if ( name ) + strncpy ( image->name, name, ( sizeof ( image->name ) - 1 ) ); + + /* Fetch the file */ + if ( ( rc = fetch ( image, filename ) ) != 0 ) + goto err; + + /* Register the image */ + if ( ( rc = register_image ( image ) ) != 0 ) + goto err; + + *new_image = image; + return 0; + + err: + free_image ( image ); + free ( image ); + return rc; +} + +/** + * Load an image + * + * @v image Image + * @ret rc Return status code + */ +int imgload ( struct image *image ) { + return image_autoload ( image ); +} + +/** + * Execute an image + * + * @v image Image + * @ret rc Return status code + */ +int imgexec ( struct image *image ) { + return image_exec ( image ); +} + /** * Display status of an image * * @v image Executable/loadable image */ void imgstat ( struct image *image ) { - printf ( "%s: %zd bytes ", image->name, image->len ); + printf ( "%s: %zd bytes", image->name, image->len ); if ( image->type ) printf ( " [%s]", image->type->name ); if ( image->flags & IMAGE_LOADED ) printf ( " [LOADED]" ); if ( image->cmdline[0] ) - printf ( "\"%s\"", image->cmdline ); + printf ( " \"%s\"", image->cmdline ); printf ( "\n" ); } +/** + * Free an image + * + * @v image Executable/loadable image + */ +void imgfree ( struct image *image ) { + unregister_image ( image ); + free_image ( image ); + free ( image ); +} -- cgit v1.2.3-55-g7522