Merge branch 'mainline' into relocator
Conflicts: loader/i386/multiboot.c
This commit is contained in:
commit
5e03640baf
56 changed files with 2847 additions and 4824 deletions
|
@ -85,7 +85,7 @@ grub_multiboot_boot (void)
|
|||
static grub_err_t
|
||||
grub_multiboot_unload (void)
|
||||
{
|
||||
if (mbi)
|
||||
if (playground)
|
||||
{
|
||||
unsigned int i;
|
||||
for (i = 0; i < mbi->mods_count; i++)
|
||||
|
@ -96,11 +96,11 @@ grub_multiboot_unload (void)
|
|||
((struct grub_mod_list *) mbi->mods_addr)[i].cmdline);
|
||||
}
|
||||
grub_free ((void *) mbi->mods_addr);
|
||||
grub_free ((void *) mbi->cmdline);
|
||||
grub_free (mbi);
|
||||
grub_free (playground);
|
||||
}
|
||||
|
||||
mbi = 0;
|
||||
mbi = NULL;
|
||||
playground = NULL;
|
||||
grub_dl_unref (my_mod);
|
||||
|
||||
return GRUB_ERR_NONE;
|
||||
|
@ -218,6 +218,8 @@ grub_multiboot (int argc, char *argv[])
|
|||
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 ();
|
||||
|
||||
|
@ -271,8 +273,15 @@ grub_multiboot (int argc, char *argv[])
|
|||
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);
|
||||
|
||||
|
@ -351,14 +360,16 @@ grub_multiboot (int argc, char *argv[])
|
|||
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);
|
||||
|
@ -395,6 +406,8 @@ grub_module (int argc, char *argv[])
|
|||
grub_ssize_t size, len = 0;
|
||||
char *module = 0, *cmdline = 0, *p;
|
||||
int i;
|
||||
int cmdline_argc;
|
||||
char **cmdline_argv;
|
||||
|
||||
if (argc == 0)
|
||||
{
|
||||
|
@ -424,21 +437,30 @@ grub_module (int argc, char *argv[])
|
|||
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)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue