common = tests/grub_script_shift.in;
};
+ script = {
+ testcase;
+ name = grub_script_blockarg;
+ common = tests/grub_script_blockarg.in;
+ };
+
+script = {
+ testcase;
+ name = grub_script_expansion;
+ common = tests/grub_script_expansion.in;
+};
+
program = {
testcase;
name = example_unit_test;
int i;
char **values = 0;
struct grub_script_arg *arg = 0;
- struct grub_script_argv result = { 0, 0 };
+ struct grub_script_argv result = { 0, 0, 0 };
+ auto int append (char *s, int escape_type);
+ int append (char *s, int escape_type)
+ {
+ int r;
+ char *p = 0;
+
+ if (! grub_wildcard_translator || escape_type == 0)
+ return grub_script_argv_append (&result, s);
+
+ if (escape_type > 0)
+ p = grub_wildcard_translator->escape (s);
+ else if (escape_type < 0)
+ p = grub_wildcard_translator->unescape (s);
+
+ if (! p)
+ return 1;
+
+ r = grub_script_argv_append (&result, p);
+ grub_free (p);
+ return r;
+ }
+
for (; arglist && arglist->arg; arglist = arglist->next)
{
if (grub_script_argv_next (&result))
{
unsigned argc;
char **args;
+ struct grub_script *script;
};
- extern struct grub_script_wildcard_translator *grub_filename_translator;
+/* Pluggable wildcard translator. */
+struct grub_script_wildcard_translator
+{
+ char *(*escape) (const char *str);
+ char *(*unescape) (const char *str);
+ grub_err_t (*expand) (const char *str, char ***expansions);
+};
+extern struct grub_script_wildcard_translator *grub_wildcard_translator;
++extern struct grub_script_wildcard_translator grub_filename_translator;
+
/* A complete argument. It consists of a list of one or more `struct
grub_script_arg's. */
struct grub_script_arglist