]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
merge with mainline
authorBVK Chaitanya <bvk@dbook>
Sun, 15 Aug 2010 05:42:53 +0000 (11:12 +0530)
committerBVK Chaitanya <bvk@dbook>
Sun, 15 Aug 2010 05:42:53 +0000 (11:12 +0530)
1  2 
conf/common.rmk
include/grub/normal.h
include/grub/script_sh.h
normal/main.c
script/argv.c
script/execute.c
script/main.c
util/grub-script-check.c

diff --cc conf/common.rmk
Simple merge
Simple merge
index 7869a4680768f4424d18771ef5a715f5bd3792d1,77e8073600ca70a303131d13e8e026738f6511a8..ae435ff1ea90afa3b3c5eb93a4eccd7c9c5ebc3e
@@@ -220,8 -223,9 +221,10 @@@ struct grub_parser_para
    struct grub_lexer_param *lexerstate;
  };
  
- void grub_script_mem_free (struct grub_script_mem *mem);
+ void grub_script_init (void);
+ void grub_script_fini (void);
  
++void grub_script_mem_free (struct grub_script_mem *mem);
  void grub_script_argv_free    (struct grub_script_argv *argv);
  int grub_script_argv_next     (struct grub_script_argv *argv);
  int grub_script_argv_append   (struct grub_script_argv *argv, const char *s);
@@@ -303,8 -313,14 +306,14 @@@ grub_err_t grub_script_execute_cmdwhil
  
  /* Execute any GRUB pre-parsed command or script.  */
  grub_err_t grub_script_execute (struct grub_script *script);
 +grub_err_t grub_script_execute_sourcecode (const char *source, int argc, char **args);
  
+ /* Break command for loops.  */
+ grub_err_t grub_script_break (grub_command_t cmd, int argc, char *argv[]);
+ /* SHIFT command for GRUB script.  */
+ grub_err_t grub_script_shift (grub_command_t cmd, int argc, char *argv[]);
  /* This variable points to the parsed command.  This is used to
     communicate with the bison code.  */
  extern struct grub_script_cmd *grub_script_parsed;
diff --cc normal/main.c
Simple merge
diff --cc script/argv.c
index a7acbc23e95531ba42ee22f022473d596ee8dd9a,b69ee39c57be092dbbe358cf9879a0fc16bf98fe..92449138bc25e04f47fa3853784b5334e6b3a8b0
   */
  
  #include <grub/mm.h>
 +#include <grub/misc.h>
  #include <grub/script_sh.h>
  
+ /* Return nearest power of two that is >= v.  */
  static unsigned
  round_up_exp (unsigned v)
  {
index 43a8bd1d715ede1eed6d3f217e7b0e3ae5c249f3,26a46b12b0d48d94dffa41f233fac7387b23e519..c36d4e44bb3d58bbff456fcb9a62986721f8980d
@@@ -196,14 -248,6 +249,14 @@@ grub_script_arglist_to_argv (struct gru
              grub_free (values);
              break;
  
-             result.script = grub_script_get (arg->script);
 +          case GRUB_SCRIPT_ARG_TYPE_BLOCK:
 +            if (grub_script_argv_append (&result, "{") ||
 +                grub_script_argv_append (&result, arg->str) ||
 +                grub_script_argv_append (&result, "}"))
 +              goto fail;
++            result.script = arg->script;
 +            break;
 +
            case GRUB_SCRIPT_ARG_TYPE_TEXT:
              if (grub_strlen (arg->str) &&
                  grub_script_argv_append (&result, arg->str))
@@@ -334,10 -325,10 +390,10 @@@ grub_script_execute_cmdline (struct gru
    grub_script_function_t func = 0;
    char errnobuf[18];
    char *cmdname;
 -  struct grub_script_argv argv = { 0, 0 };
 +  struct grub_script_argv argv = { 0, 0, 0 };
  
    /* Lookup the command.  */
-   if (grub_script_arglist_to_argv (cmdline->arglist, &argv))
+   if (grub_script_arglist_to_argv (cmdline->arglist, &argv) || ! argv.args[0])
      return grub_errno;
  
    cmdname = argv.args[0];
diff --cc script/main.c
Simple merge
Simple merge