From: BVK Chaitanya Date: Sat, 4 Sep 2010 05:26:23 +0000 (+0530) Subject: merge with mainline X-Git-Tag: 1.99~598^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=227cab7c79c68e23afcb936ccec9301f2739cba2;p=thirdparty%2Fgrub.git merge with mainline --- 227cab7c79c68e23afcb936ccec9301f2739cba2 diff --cc Makefile.util.def index 87c33c05e,6dfd9301d..45c2f9761 --- a/Makefile.util.def +++ b/Makefile.util.def @@@ -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; diff --cc grub-core/script/argv.c index c642ea9c5,92449138b..911989d0b --- a/grub-core/script/argv.c +++ b/grub-core/script/argv.c @@@ -55,25 -56,9 +56,26 @@@ grub_script_argv_free (struct grub_scri argv->argc = 0; argv->args = 0; + argv->script = 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}; ++ 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) diff --cc grub-core/script/execute.c index b911163f7,743b315eb..8e3c97434 --- a/grub-core/script/execute.c +++ b/grub-core/script/execute.c @@@ -113,35 -91,6 +114,35 @@@ grub_script_shift (grub_command_t cmd _ return GRUB_ERR_NONE; } +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 }; ++ 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) { @@@ -156,8 -105,7 +157,8 @@@ static char ** grub_script_env_get (const char *name, grub_script_arg_type_t type) { + unsigned i; - struct grub_script_argv result = { 0, 0 }; + struct grub_script_argv result = { 0, 0, 0 }; if (grub_script_argv_next (&result)) goto fail; diff --cc grub-core/script/lexer.c index 42a570348,3ab40049f..8d1623fb8 --- a/grub-core/script/lexer.c +++ b/grub-core/script/lexer.c @@@ -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)); diff --cc include/grub/script_sh.h index e0ed5c005,7952fff9b..b371e49f1 --- a/include/grub/script_sh.h +++ b/include/grub/script_sh.h @@@ -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);