[image] Provide image_set_uri() to modify an image's URI

Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/43/head
Michael Brown 2016-01-09 13:22:37 +00:00
parent 74c812a68c
commit 57fa0db03f
2 changed files with 29 additions and 10 deletions

View File

@ -88,7 +88,6 @@ static void free_image ( struct refcnt *refcnt ) {
* @ret image Executable image
*/
struct image * alloc_image ( struct uri *uri ) {
const char *name;
struct image *image;
int rc;
@ -99,23 +98,42 @@ struct image * alloc_image ( struct uri *uri ) {
/* Initialise image */
ref_init ( &image->refcnt, free_image );
if ( uri ) {
image->uri = uri_get ( uri );
if ( uri->path ) {
name = basename ( ( char * ) uri->path );
if ( ( rc = image_set_name ( image, name ) ) != 0 )
goto err_set_name;
}
}
if ( uri && ( ( rc = image_set_uri ( image, uri ) ) != 0 ) )
goto err_set_uri;
return image;
err_set_name:
err_set_uri:
image_put ( image );
err_alloc:
return NULL;
}
/**
* Set image URI
*
* @v image Image
* @v uri New image URI
* @ret rc Return status code
*/
int image_set_uri ( struct image *image, struct uri *uri ) {
const char *name;
int rc;
/* Set name, if image does not already have one */
if ( uri->path && ( ! ( image->name && image->name[0] ) ) ) {
name = basename ( ( char * ) uri->path );
if ( ( rc = image_set_name ( image, name ) ) != 0 )
return rc;
}
/* Update image URI */
uri_put ( image->uri );
image->uri = uri_get ( uri );
return 0;
}
/**
* Set image name
*

View File

@ -158,6 +158,7 @@ static inline struct image * first_image ( void ) {
}
extern struct image * alloc_image ( struct uri *uri );
extern int image_set_uri ( struct image *image, struct uri *uri );
extern int image_set_name ( struct image *image, const char *name );
extern int image_set_cmdline ( struct image *image, const char *cmdline );
extern int register_image ( struct image *image );