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);
/* 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;
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))
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];