* grub-core/loader/multiboot_mbi2.c: Likewise.
+2013-11-09 Vladimir Serbinenko <phcoder@gmail.com>
+
+ * grub-core/loader/i386/multiboot_mbi.c: Handle space in command line.
+ * grub-core/loader/multiboot_mbi2.c: Likewise.
+
2013-11-09 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/lib/cmdline.c (grub_loader_cmdline_size): Fix empty cmdline
cppflags = "-DGRUB_USE_MULTIBOOT2";
common = loader/multiboot.c;
+ common = lib/cmdline.c;
common = loader/multiboot_mbi2.c;
enable = x86;
enable = mips;
module = {
name = multiboot;
common = loader/multiboot.c;
+ common = lib/cmdline.c;
x86 = loader/i386/multiboot_mbi.c;
extra_dist = loader/multiboot_elfxx.c;
enable = x86;
#include <grub/file.h>
#include <grub/net.h>
#include <grub/i18n.h>
+#include <grub/lib/cmdline.h>
#ifdef GRUB_MACHINE_EFI
#include <grub/efi/efi.h>
grub_multiboot_init_mbi (int argc, char *argv[])
{
grub_ssize_t len = 0;
- char *p;
- int i;
grub_multiboot_free_mbi ();
- for (i = 0; i < argc; i++)
- len += grub_strlen (argv[i]) + 1;
- if (len == 0)
- len = 1;
+ len = grub_loader_cmdline_size (argc, argv);
- cmdline = p = grub_malloc (len);
+ cmdline = grub_malloc (len);
if (! cmdline)
return grub_errno;
cmdline_size = len;
- for (i = 0; i < argc; i++)
- {
- p = grub_stpcpy (p, argv[i]);
- *(p++) = ' ';
- }
-
- /* Remove the space after the last word. */
- if (p != cmdline)
- p--;
- *p = '\0';
+ grub_create_loader_cmdline (argc, argv, cmdline,
+ cmdline_size);
return GRUB_ERR_NONE;
}
int argc, char *argv[])
{
struct module *newmod;
- char *p;
- grub_ssize_t len = 0;
- int i;
+ grub_size_t len = 0;
newmod = grub_malloc (sizeof (*newmod));
if (!newmod)
newmod->size = size;
newmod->next = 0;
- for (i = 0; i < argc; i++)
- len += grub_strlen (argv[i]) + 1;
-
- if (len == 0)
- len = 1;
+ len = grub_loader_cmdline_size (argc, argv);
- newmod->cmdline = p = grub_malloc (len);
+ newmod->cmdline = grub_malloc (len);
if (! newmod->cmdline)
{
grub_free (newmod);
newmod->cmdline_size = len;
total_modcmd += ALIGN_UP (len, 4);
- for (i = 0; i < argc; i++)
- {
- p = grub_stpcpy (p, argv[i]);
- *(p++) = ' ';
- }
-
- /* Remove the space after the last word. */
- if (p != newmod->cmdline)
- p--;
- *p = '\0';
+ grub_create_loader_cmdline (argc, argv, newmod->cmdline,
+ newmod->cmdline_size);
if (modules_last)
modules_last->next = newmod;
else
- {
- modules = newmod;
- modules_last->next = NULL;
- }
+ modules = newmod;
modules_last = newmod;
modcnt++;
#include <grub/acpi.h>
#include <grub/i18n.h>
#include <grub/net.h>
+#include <grub/lib/cmdline.h>
#if defined (GRUB_MACHINE_EFI)
#include <grub/efi/efi.h>
grub_multiboot_init_mbi (int argc, char *argv[])
{
grub_ssize_t len = 0;
- char *p;
- int i;
grub_multiboot_free_mbi ();
- for (i = 0; i < argc; i++)
- len += grub_strlen (argv[i]) + 1;
- if (len == 0)
- len = 1;
+ len = grub_loader_cmdline_size (argc, argv);
- cmdline = p = grub_malloc (len);
+ cmdline = grub_malloc (len);
if (! cmdline)
return grub_errno;
cmdline_size = len;
- for (i = 0; i < argc; i++)
- {
- p = grub_stpcpy (p, argv[i]);
- *(p++) = ' ';
- }
-
- /* Remove the space after the last word. */
- if (p != cmdline)
- p--;
- *p = '\0';
+ grub_create_loader_cmdline (argc, argv, cmdline,
+ cmdline_size);
return GRUB_ERR_NONE;
}
int argc, char *argv[])
{
struct module *newmod;
- char *p;
- grub_ssize_t len = 0;
- int i;
+ grub_size_t len = 0;
newmod = grub_malloc (sizeof (*newmod));
if (!newmod)
newmod->start = start;
newmod->size = size;
- for (i = 0; i < argc; i++)
- len += grub_strlen (argv[i]) + 1;
+ len = grub_loader_cmdline_size (argc, argv);
- if (len == 0)
- len = 1;
-
- newmod->cmdline = p = grub_malloc (len);
+ newmod->cmdline = grub_malloc (len);
if (! newmod->cmdline)
{
grub_free (newmod);
newmod->cmdline_size = len;
total_modcmd += ALIGN_UP (len, MULTIBOOT_TAG_ALIGN);
- for (i = 0; i < argc; i++)
- {
- p = grub_stpcpy (p, argv[i]);
- *(p++) = ' ';
- }
-
- /* Remove the space after the last word. */
- if (p != newmod->cmdline)
- p--;
- *p = '\0';
+ grub_create_loader_cmdline (argc, argv, newmod->cmdline,
+ newmod->cmdline_size);
if (modules_last)
modules_last->next = newmod;