Place command-line inline, to save on memory allocation hassles.
authorMichael Brown <mcb30@etherboot.org>
Fri, 12 Jan 2007 05:26:19 +0000 (05:26 +0000)
committerMichael Brown <mcb30@etherboot.org>
Fri, 12 Jan 2007 05:26:19 +0000 (05:26 +0000)
src/arch/i386/image/multiboot.c
src/include/gpxe/image.h

index f27f228..cdf81e6 100644 (file)
@@ -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 );
index da0f3cf..efc6a64 100644 (file)
@@ -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;