From 475d6d1f7c7f169a89ea363ad819b0dd2975ae10 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 12 Jan 2007 08:02:27 +0000 Subject: fetch() now knows nothing about struct image; it simply loads a file and returns the allocated buffer. --- src/usr/fetch.c | 20 ++++++++++++-------- src/usr/imgmgmt.c | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) (limited to 'src/usr') 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 /** - * 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 */ -- cgit v1.2.3-55-g7522