Fix wildcard escaping.
* grub-core/commands/wildcard.c (wildcard_escape): Moved from here ... * grub-core/script/execute.c (wildcard_escape): .. to here. Don't escape dot. * grub-core/commands/wildcard.c (wildcard_unescape): Moved from here ... * grub-core/script/execute.c (wildcard_unescape): .. to here. Don't escape dot. * grub-core/script/execute.c (gettext_append): Always escape. (grub_script_arglist_to_argv): Always handle escaping/unescaping. * grub-core/script/yylex.l: Don't cut away the escaping. * tests/grub_script_echo1.in: Add tests with wildcard.
This commit is contained in:
parent
c8ca585593
commit
5e619f408d
6 changed files with 112 additions and 104 deletions
|
@ -36,14 +36,10 @@ static char ** match_devices (const regex_t *regexp, int noparts);
|
|||
static char ** match_files (const char *prefix, const char *suffix_start,
|
||||
const char *suffix_end, const regex_t *regexp);
|
||||
|
||||
static char* wildcard_escape (const char *s);
|
||||
static char* wildcard_unescape (const char *s);
|
||||
static grub_err_t wildcard_expand (const char *s, char ***strs);
|
||||
|
||||
struct grub_script_wildcard_translator grub_filename_translator = {
|
||||
.expand = wildcard_expand,
|
||||
.escape = wildcard_escape,
|
||||
.unescape = wildcard_unescape
|
||||
};
|
||||
|
||||
static char **
|
||||
|
@ -414,55 +410,6 @@ check_file (const char *dir, const char *basename)
|
|||
return found;
|
||||
}
|
||||
|
||||
static char*
|
||||
wildcard_escape (const char *s)
|
||||
{
|
||||
int i;
|
||||
int len;
|
||||
char ch;
|
||||
char *p;
|
||||
|
||||
len = grub_strlen (s);
|
||||
p = grub_malloc (len * 2 + 1);
|
||||
if (! p)
|
||||
return NULL;
|
||||
|
||||
i = 0;
|
||||
while ((ch = *s++))
|
||||
{
|
||||
if (isregexop (ch))
|
||||
p[i++] = '\\';
|
||||
p[i++] = ch;
|
||||
}
|
||||
p[i] = '\0';
|
||||
return p;
|
||||
}
|
||||
|
||||
static char*
|
||||
wildcard_unescape (const char *s)
|
||||
{
|
||||
int i;
|
||||
int len;
|
||||
char ch;
|
||||
char *p;
|
||||
|
||||
len = grub_strlen (s);
|
||||
p = grub_malloc (len + 1);
|
||||
if (! p)
|
||||
return NULL;
|
||||
|
||||
i = 0;
|
||||
while ((ch = *s++))
|
||||
{
|
||||
if (ch == '\\' && isregexop (*s))
|
||||
p[i++] = *s++;
|
||||
else
|
||||
p[i++] = ch;
|
||||
}
|
||||
p[i] = '\0';
|
||||
return p;
|
||||
}
|
||||
|
||||
static grub_err_t
|
||||
wildcard_expand (const char *s, char ***strs)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue