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 | |
| 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')
| -rw-r--r-- | src/usr/fetch.c | 7 | ||||
| -rw-r--r-- | src/usr/imgmgmt.c | 77 |
2 files changed, 75 insertions, 9 deletions
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 <libgen.h> #include <vsprintf.h> #include <gpxe/emalloc.h> #include <gpxe/ebuffer.h> @@ -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 <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 ); +} |
