diff options
author | Michael Brown | 2007-01-12 08:22:20 +0100 |
---|---|---|
committer | Michael Brown | 2007-01-12 08:22:20 +0100 |
commit | f135a37f3050a40ad5399e150169ba6b880fe47d (patch) | |
tree | ae82ed4470bf1f0b09b23fbc8018541ed07735cb /src/usr/imgmgmt.c | |
parent | Add free_image (diff) | |
download | ipxe-f135a37f3050a40ad5399e150169ba6b880fe47d.tar.gz ipxe-f135a37f3050a40ad5399e150169ba6b880fe47d.tar.xz ipxe-f135a37f3050a40ad5399e150169ba6b880fe47d.zip |
Cleaner separation between imgXXX() functions and image_cmd.c
Diffstat (limited to 'src/usr/imgmgmt.c')
-rw-r--r-- | src/usr/imgmgmt.c | 77 |
1 files changed, 75 insertions, 2 deletions
diff --git a/src/usr/imgmgmt.c b/src/usr/imgmgmt.c index 437cf8e4..de71dee1 100644 --- a/src/usr/imgmgmt.c +++ b/src/usr/imgmgmt.c @@ -17,8 +17,11 @@ */ #include <stdint.h> +#include <stdlib.h> +#include <errno.h> #include <vsprintf.h> #include <gpxe/image.h> +#include <usr/fetch.h> #include <usr/imgmgmt.h> /** @file @@ -28,18 +31,88 @@ */ /** + * 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 ); +} |