summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorMichael Brown2007-01-12 09:02:27 +0100
committerMichael Brown2007-01-12 09:02:27 +0100
commit475d6d1f7c7f169a89ea363ad819b0dd2975ae10 (patch)
tree000239996a57f863fb56326ed137bf85c3517934 /src/usr
parentAllow "imgexec" with no arguments to boot the file that was loaded with (diff)
downloadipxe-475d6d1f7c7f169a89ea363ad819b0dd2975ae10.tar.gz
ipxe-475d6d1f7c7f169a89ea363ad819b0dd2975ae10.tar.xz
ipxe-475d6d1f7c7f169a89ea363ad819b0dd2975ae10.zip
fetch() now knows nothing about struct image; it simply loads a file and
returns the allocated buffer.
Diffstat (limited to 'src/usr')
-rw-r--r--src/usr/fetch.c20
-rw-r--r--src/usr/imgmgmt.c2
2 files changed, 13 insertions, 9 deletions
diff --git a/src/usr/fetch.c b/src/usr/fetch.c
index 001731845..fe5ae59fa 100644
--- a/src/usr/fetch.c
+++ b/src/usr/fetch.c
@@ -34,13 +34,18 @@
#include <gpxe/dhcp.h>
/**
- * Fetch file as executable/loadable image
+ * Fetch file
*
- * @v image Executable/loadable image
- * @v filename Filename
+ * @v filename Filename to fetch
+ * @ret data Loaded file
+ * @ret len Length of loaded file
* @ret rc Return status code
+ *
+ * Fetch file to an external buffer allocated with emalloc(). The
+ * caller is responsible for eventually freeing the buffer with
+ * efree().
*/
-int fetch ( struct image *image, const char *filename ) {
+int fetch ( const char *filename, userptr_t *data, size_t *len ) {
struct buffer buffer;
int rc;
@@ -69,10 +74,9 @@ int fetch ( struct image *image, const char *filename ) {
return rc;
}
- /* Transfer ownserhip of the data buffer to the image */
- image->data = buffer.addr;
- image->len = buffer.fill;
- image->free = efree;
+ /* Fill in buffer address and length */
+ *data = buffer.addr;
+ *len = buffer.fill;
return 0;
}
diff --git a/src/usr/imgmgmt.c b/src/usr/imgmgmt.c
index 2c949ae24..6a2599d53 100644
--- a/src/usr/imgmgmt.c
+++ b/src/usr/imgmgmt.c
@@ -54,7 +54,7 @@ int imgfetch ( const char *filename, const char *name,
strncpy ( image->name, name, ( sizeof ( image->name ) - 1 ) );
/* Fetch the file */
- if ( ( rc = fetch ( image, filename ) ) != 0 )
+ if ( ( rc = fetch ( filename, &image->data, &image->len ) ) != 0 )
goto err;
/* Register the image */