Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[image] Ensure every image has a fully resolved URI
Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Feb 27, 2014
1 parent 7667536 commit c165e8d
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 26 deletions.
16 changes: 4 additions & 12 deletions src/core/downloader.c
Expand Up @@ -20,7 +20,6 @@
FILE_LICENCE ( GPL2_OR_LATER );

#include <stdlib.h>
#include <stdarg.h>
#include <errno.h>
#include <syslog.h>
#include <ipxe/iobuf.h>
Expand Down Expand Up @@ -229,17 +228,13 @@ static struct interface_descriptor downloader_job_desc =
*
* @v job Job control interface
* @v image Image to fill with downloaded file
* @v type Location type to pass to xfer_open()
* @v ... Remaining arguments to pass to xfer_open()
* @ret rc Return status code
*
* Instantiates a downloader object to download the specified URI into
* the specified image object.
* Instantiates a downloader object to download the content of the
* specified image from its URI.
*/
int create_downloader ( struct interface *job, struct image *image,
int type, ... ) {
int create_downloader ( struct interface *job, struct image *image ) {
struct downloader *downloader;
va_list args;
int rc;

/* Allocate and initialise structure */
Expand All @@ -252,21 +247,18 @@ int create_downloader ( struct interface *job, struct image *image,
intf_init ( &downloader->xfer, &downloader_xfer_desc,
&downloader->refcnt );
downloader->image = image_get ( image );
va_start ( args, type );

/* Instantiate child objects and attach to our interfaces */
if ( ( rc = xfer_vopen ( &downloader->xfer, type, args ) ) != 0 )
if ( ( rc = xfer_open_uri ( &downloader->xfer, image->uri ) ) != 0 )
goto err;

/* Attach parent interface, mortalise self, and return */
intf_plug_plug ( &downloader->job, job );
ref_put ( &downloader->refcnt );
va_end ( args );
return 0;

err:
downloader_finished ( downloader, rc );
ref_put ( &downloader->refcnt );
va_end ( args );
return rc;
}
3 changes: 1 addition & 2 deletions src/include/ipxe/downloader.h
Expand Up @@ -12,7 +12,6 @@ FILE_LICENCE ( GPL2_OR_LATER );
struct interface;
struct image;

extern int create_downloader ( struct interface *job, struct image *image,
int type, ... );
extern int create_downloader ( struct interface *job, struct image *image );

#endif /* _IPXE_DOWNLOADER_H */
32 changes: 20 additions & 12 deletions src/usr/imgmgmt.c
Expand Up @@ -48,13 +48,6 @@ int imgdownload ( struct uri *uri, struct image **image ) {
char *uri_string_redacted;
int rc;

/* Allocate image */
*image = alloc_image ( uri );
if ( ! *image ) {
rc = -ENOMEM;
goto err_alloc_image;
}

/* Construct redacted URI */
password = uri->password;
if ( password )
Expand All @@ -63,12 +56,25 @@ int imgdownload ( struct uri *uri, struct image **image ) {
uri->password = password;
if ( ! uri_string_redacted ) {
rc = -ENOMEM;
goto err_uri;
goto err_uri_string;
}

/* Resolve URI */
uri = resolve_uri ( cwuri, uri );
if ( ! uri ) {
rc = -ENOMEM;
goto err_resolve_uri;
}

/* Allocate image */
*image = alloc_image ( uri );
if ( ! *image ) {
rc = -ENOMEM;
goto err_alloc_image;
}

/* Create downloader */
if ( ( rc = create_downloader ( &monojob, *image, LOCATION_URI,
uri ) ) != 0 ) {
if ( ( rc = create_downloader ( &monojob, *image ) ) != 0 ) {
printf ( "Could not start download: %s\n", strerror ( rc ) );
goto err_create_downloader;
}
Expand All @@ -86,10 +92,12 @@ int imgdownload ( struct uri *uri, struct image **image ) {
err_register_image:
err_monojob_wait:
err_create_downloader:
free ( uri_string_redacted );
err_uri:
image_put ( *image );
err_alloc_image:
uri_put ( uri );
err_resolve_uri:
free ( uri_string_redacted );
err_uri_string:
return rc;
}

Expand Down

0 comments on commit c165e8d

Please sign in to comment.