]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/lib/arg.c (grub_arg_parse): Avoid interpreting direct
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 1 Nov 2010 11:45:51 +0000 (12:45 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 1 Nov 2010 11:45:51 +0000 (12:45 +0100)
argument as an argument to no-argument option.

ChangeLog
grub-core/lib/arg.c

index 96df25ede9a5a468b99ec35716df0b684889c953..45e76b68a9fb9ae3287f89a2830ab27f3bc451fb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-11-01  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/lib/arg.c (grub_arg_parse): Avoid interpreting direct
+       argument as an argument to no-argument option.
+
 2010-11-01  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * util/grub.d/10_linux.in: Add missing load_video with explicit
index 1c765f12af95e82d959f5412e23f7b9dff7eb033..75b1dd53cb7a46b4bdd22cbf5c412a3e11405b17 100644 (file)
@@ -340,17 +340,20 @@ grub_arg_parse (grub_extcmd_t cmd, int argc, char **argv,
            }
 
          option = grub_strchr (arg, '=');
-         if (option) {
-           arglen = option - arg - 2;
-           option++;
-         } else {
+         if (option)
+           {
+             arglen = option - arg - 2;
+             option++;
+           }
+         else
            arglen = grub_strlen (arg) - 2;
-           if (argv[curarg + 1])
-             option = argv[curarg + 1][0] == '-' ? 0 : argv[++curarg];
-         }
 
          opt = find_long (cmd->options, arg + 2, arglen);
 
+         if (!option && argv[curarg + 1] && argv[curarg + 1][0] != '-'
+             && opt->type != ARG_TYPE_NONE)
+           option = argv[++curarg];
+
          if (!opt && (cmd->cmd->flags & GRUB_COMMAND_ACCEPT_DASH))
            {
              if (add_arg (arg) != 0)