summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/arch/i386/image/multiboot.c11
-rw-r--r--src/include/gpxe/image.h13
2 files changed, 16 insertions, 8 deletions
diff --git a/src/arch/i386/image/multiboot.c b/src/arch/i386/image/multiboot.c
index f27f22807..cdf81e6eb 100644
--- a/src/arch/i386/image/multiboot.c
+++ b/src/arch/i386/image/multiboot.c
@@ -119,8 +119,7 @@ multiboot_build_module_list ( struct image *image,
module->mod_start = user_to_phys ( module_image->data, 0 );
module->mod_end = user_to_phys ( module_image->data,
module_image->len );
- if ( image->cmdline )
- module->string = virt_to_phys ( image->cmdline );
+ module->string = virt_to_phys ( image->cmdline );
/* We promise to page-align modules, so at least check */
assert ( ( module->mod_start & 0xfff ) == 0 );
@@ -154,11 +153,9 @@ static int multiboot_exec ( struct image *image ) {
mbinfo.mmap_addr = virt_to_phys ( &mbmemmap[0].base_addr );
mbinfo.flags |= ( MBI_FLAG_MEM | MBI_FLAG_MMAP );
- /* Set command line, if present */
- if ( image->cmdline ) {
- mbinfo.cmdline = virt_to_phys ( image->cmdline );
- mbinfo.flags |= MBI_FLAG_CMDLINE;
- }
+ /* Set command line */
+ mbinfo.cmdline = virt_to_phys ( image->cmdline );
+ mbinfo.flags |= MBI_FLAG_CMDLINE;
/* Construct module list */
num_modules = multiboot_build_module_list ( image, NULL );
diff --git a/src/include/gpxe/image.h b/src/include/gpxe/image.h
index da0f3cfde..efc6a642b 100644
--- a/src/include/gpxe/image.h
+++ b/src/include/gpxe/image.h
@@ -14,6 +14,9 @@
struct image_type;
+/** Maximum length of a command line */
+#define CMDLINE_MAX 128
+
/** An executable or loadable image */
struct image {
/** Name */
@@ -22,12 +25,20 @@ struct image {
struct list_head list;
/** Command line to pass to image */
- const char *cmdline;
+ char cmdline[CMDLINE_MAX];
/** Raw file image */
userptr_t data;
/** Length of raw file image */
size_t len;
+ /**
+ * Free raw file image
+ *
+ * @v data Raw file image
+ *
+ * Call this method before freeing up the @c struct @c image.
+ */
+ void ( * free ) ( userptr_t data );
/** Entry point */
physaddr_t entry;