commit-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[2499] 2009-08-14 Vladimir Serbinenko <address@hidden>


From: Vladimir Serbinenko
Subject: [2499] 2009-08-14 Vladimir Serbinenko <address@hidden>
Date: Fri, 14 Aug 2009 15:19:24 +0000

Revision: 2499
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2499
Author:   phcoder
Date:     2009-08-14 15:19:24 +0000 (Fri, 14 Aug 2009)
Log Message:
-----------
2009-08-14  Vladimir Serbinenko  <address@hidden>

        * loader/i386/multiboot.c (grub_multiboot): Don't pass filename to
        payload.
        (grub_module): Likewise.

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/loader/i386/multiboot.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog       2009-08-14 15:15:33 UTC (rev 2498)
+++ trunk/grub2/ChangeLog       2009-08-14 15:19:24 UTC (rev 2499)
@@ -1,5 +1,11 @@
 2009-08-14  Vladimir Serbinenko  <address@hidden>
 
+       * loader/i386/multiboot.c (grub_multiboot): Don't pass filename to
+       payload.
+       (grub_module): Likewise.
+
+2009-08-14  Vladimir Serbinenko  <address@hidden>
+
        * loader/i386/multiboot.c (grub_multiboot_unload): Don't free mbi and
        mbi->cmdline but free playground.
 

Modified: trunk/grub2/loader/i386/multiboot.c
===================================================================
--- trunk/grub2/loader/i386/multiboot.c 2009-08-14 15:15:33 UTC (rev 2498)
+++ trunk/grub2/loader/i386/multiboot.c 2009-08-14 15:19:24 UTC (rev 2499)
@@ -201,6 +201,8 @@
   grub_ssize_t len, cmdline_length, boot_loader_name_length;
   grub_uint32_t mmap_length;
   int i;
+  int cmdline_argc;
+  char **cmdline_argv;
 
   grub_loader_unset ();
 
@@ -257,9 +259,16 @@
   mmap_length = grub_get_multiboot_mmap_len ();
 
   /* Figure out cmdline length.  */
-  for (i = 0, cmdline_length = 0; i < argc; i++)
-    cmdline_length += grub_strlen (argv[i]) + 1;
+  /* Skip filename.  */
+  cmdline_argc = argc - 1;
+  cmdline_argv = argv + 1;
 
+  for (i = 0, cmdline_length = 0; i < cmdline_argc; i++)
+    cmdline_length += grub_strlen (cmdline_argv[i]) + 1;
+
+  if (cmdline_length == 0)
+    cmdline_length = 1;
+
   boot_loader_name_length = sizeof(PACKAGE_STRING);
 
 #define cmdline_addr(x)                ((void *) ((x) + code_size))
@@ -351,14 +360,16 @@
   if (! cmdline)
     goto fail;
 
-  for (i = 0; i < argc; i++)
+  for (i = 0; i < cmdline_argc; i++)
     {
-      p = grub_stpcpy (p, argv[i]);
+      p = grub_stpcpy (p, cmdline_argv[i]);
       *(p++) = ' ';
     }
 
   /* Remove the space after the last word.  */
-  *(--p) = '\0';
+  if (p != cmdline)
+    p--;
+  *p = 0;
 
   mbi->flags |= MULTIBOOT_INFO_CMDLINE;
   mbi->cmdline = (grub_uint32_t) cmdline_addr (grub_multiboot_payload_dest);
@@ -393,6 +404,8 @@
   grub_ssize_t size, len = 0;
   char *module = 0, *cmdline = 0, *p;
   int i;
+  int cmdline_argc;
+  char **cmdline_argv;
 
   if (argc == 0)
     {
@@ -422,21 +435,30 @@
       goto fail;
     }
 
-  for (i = 0; i < argc; i++)
-    len += grub_strlen (argv[i]) + 1;
+  /* Skip module name.  */
+  cmdline_argc = argc - 1;
+  cmdline_argv = argv + 1;
 
+  for (i = 0; i < cmdline_argc; i++)
+    len += grub_strlen (cmdline_argv[i]) + 1;
+
+  if (len == 0)
+    len = 1;
+
   cmdline = p = grub_malloc (len);
   if (! cmdline)
     goto fail;
 
-  for (i = 0; i < argc; i++)
+  for (i = 0; i < cmdline_argc; i++)
     {
-      p = grub_stpcpy (p, argv[i]);
+      p = grub_stpcpy (p, cmdline_argv[i]);
       *(p++) = ' ';
     }
 
   /* Remove the space after the last word.  */
-  *(--p) = '\0';
+  if (p != cmdline)
+    p--;
+  *p = '\0';
 
   if (mbi->flags & MULTIBOOT_INFO_MODS)
     {





reply via email to

[Prev in Thread] Current Thread [Next in Thread]