merge with mainline
authorBVK Chaitanya <bvk@dbook>
Sat, 4 Sep 2010 05:26:23 +0000 (10:56 +0530)
committerBVK Chaitanya <bvk@dbook>
Sat, 4 Sep 2010 05:26:23 +0000 (10:56 +0530)
1  2 
Makefile.util.def
grub-core/script/argv.c
grub-core/script/execute.c
grub-core/script/lexer.c
grub-core/script/main.c
include/grub/script_sh.h

@@@ -496,12 -501,12 +501,18 @@@ script = 
    common = tests/grub_script_shift.in;
  };
  
+ script = {
+   testcase;
+   name = grub_script_blockarg;
+   common = tests/grub_script_blockarg.in;
+ };
 +script = {
 +  testcase;
 +  name = grub_script_setparams;
 +  common = tests/grub_script_setparams.in;
 +};
 +
  program = {
    testcase;
    name = example_unit_test;
@@@ -55,25 -56,9 +56,26 @@@ grub_script_argv_free (struct grub_scri
  
    argv->argc = 0;
    argv->args = 0;
+   argv->script = 0;
  }
  
-   struct grub_script_argv r = { 0, 0};
 +/* Make argv from argc, args pair.  */
 +int
 +grub_script_argv_make (struct grub_script_argv *argv, int argc, char **args)
 +{
 +  int i;
++  struct grub_script_argv r = { 0, 0, 0 };
 +
 +  for (i = 0; i < argc; i++)
 +    if (grub_script_argv_next (&r) || grub_script_argv_append (&r, args[i]))
 +      {
 +      grub_script_argv_free (&r);
 +      return 1;
 +      }
 +  *argv = r;
 +  return 0;
 +}
 +
  /* Prepare for next argc.  */
  int
  grub_script_argv_next (struct grub_script_argv *argv)
@@@ -113,35 -91,6 +114,35 @@@ grub_script_shift (grub_command_t cmd _
    return GRUB_ERR_NONE;
  }
  
-   struct grub_script_argv argv = { 0, 0 };
 +grub_err_t
 +grub_script_setparams (grub_command_t cmd __attribute__((unused)),
 +                     int argc, char **args)
 +{
 +  struct grub_script_scope *new_scope;
++  struct grub_script_argv argv = { 0, 0, 0 };
 +
 +  if (! scope)
 +    return GRUB_ERR_INVALID_COMMAND;
 +
 +  new_scope = grub_malloc (sizeof (*new_scope));
 +  if (! new_scope)
 +    return grub_errno;
 +
 +  if (grub_script_argv_make (&argv, argc, args))
 +    {
 +      grub_free (new_scope);
 +      return grub_errno;
 +    }
 +
 +  new_scope->shifts = 0;
 +  new_scope->argv = argv;
 +  new_scope->flags = GRUB_SCRIPT_SCOPE_MALLOCED |
 +    GRUB_SCRIPT_SCOPE_ARGS_MALLOCED;
 +
 +  replace_scope (new_scope);
 +  return GRUB_ERR_NONE;
 +}
 +
  static int
  grub_env_special (const char *name)
  {
  static char **
  grub_script_env_get (const char *name, grub_script_arg_type_t type)
  {
-   struct grub_script_argv result = { 0, 0 };
 +  unsigned i;
+   struct grub_script_argv result = { 0, 0, 0 };
  
    if (grub_script_argv_next (&result))
      goto fail;
@@@ -207,9 -205,8 +205,6 @@@ struct grub_lexer_param 
  grub_script_lexer_init (struct grub_parser_param *parser, char *script,
                        grub_reader_getline_t getline)
  {
--  int len;
-   char *script2;
--  YY_BUFFER_STATE buffer;
    struct grub_lexer_param *lexerstate;
  
    lexerstate = grub_zalloc (sizeof (*lexerstate));
Simple merge
@@@ -226,8 -245,9 +245,10 @@@ struct grub_parser_para
  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_make     (struct grub_script_argv *argv, int argc, char **args);
  int grub_script_argv_next     (struct grub_script_argv *argv);
  int grub_script_argv_append   (struct grub_script_argv *argv, const char *s);
  int grub_script_argv_split_append (struct grub_script_argv *argv, char *s);