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);
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)
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;