diff --git a/src/arch/i386/image/multiboot.c b/src/arch/i386/image/multiboot.c index f27f2280..cdf81e6e 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 da0f3cfd..efc6a642 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;