From: BVK Chaitanya Date: Sun, 15 Aug 2010 05:42:53 +0000 (+0530) Subject: merge with mainline X-Git-Tag: 1.99~596^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1379af7834716be96567c7c5c8c4ed71c68a67da;p=thirdparty%2Fgrub.git merge with mainline --- 1379af7834716be96567c7c5c8c4ed71c68a67da diff --cc include/grub/script_sh.h index 7869a4680,77e807360..ae435ff1e --- a/include/grub/script_sh.h +++ b/include/grub/script_sh.h @@@ -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 script/argv.c index a7acbc23e,b69ee39c5..92449138b --- a/script/argv.c +++ b/script/argv.c @@@ -18,9 -18,9 +18,10 @@@ */ #include +#include #include + /* Return nearest power of two that is >= v. */ static unsigned round_up_exp (unsigned v) { diff --cc script/execute.c index 43a8bd1d7,26a46b12b..c36d4e44b --- a/script/execute.c +++ b/script/execute.c @@@ -196,14 -248,6 +249,14 @@@ grub_script_arglist_to_argv (struct gru grub_free (values); break; + 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 = grub_script_get (arg->script); ++ 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];