summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/downloader.c16
-rw-r--r--src/include/ipxe/downloader.h3
-rw-r--r--src/usr/imgmgmt.c32
3 files changed, 25 insertions, 26 deletions
diff --git a/src/core/downloader.c b/src/core/downloader.c
index 3927dfab..cec6625b 100644
--- a/src/core/downloader.c
+++ b/src/core/downloader.c
@@ -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>
@@ -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 */
@@ -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;
}
diff --git a/src/include/ipxe/downloader.h b/src/include/ipxe/downloader.h
index a7efa3f7..de1a2e75 100644
--- a/src/include/ipxe/downloader.h
+++ b/src/include/ipxe/downloader.h
@@ -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 */
diff --git a/src/usr/imgmgmt.c b/src/usr/imgmgmt.c
index 1f1f6904..18cabbbc 100644
--- a/src/usr/imgmgmt.c
+++ b/src/usr/imgmgmt.c
@@ -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 )
@@ -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;
}
@@ -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;
}