aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Serpell <daniel.serpell@gmail.com>2019-12-20 21:11:19 -0300
committerDaniel Serpell <daniel.serpell@gmail.com>2019-12-20 21:11:19 -0300
commite96a85085206d697bc4c0b865ff37907093f6f69 (patch)
tree1d0e82df4d4a4f4fc987637dff0af9086cfb7502
parent3cdd57792a6c8e8a3bfa88671b19ae0bec70e8fb (diff)
downloademu2-e96a85085206d697bc4c0b865ff37907093f6f69.tar.gz
Fixes glob for '?', in DOS it can match zero or one characters.
-rw-r--r--src/dosnames.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/dosnames.c b/src/dosnames.c
index 07ad46d..b242c5c 100644
--- a/src/dosnames.c
+++ b/src/dosnames.c
@@ -121,16 +121,21 @@ static int dos_glob(const char *n, const char *g)
while(*n && *g)
{
char cg = *g, cn = *n;
- // An '*' consumes any leter, except the dot
- if(cg == '*' && cn != '.')
+ // An '*' consumes any letter, except the dot
+ if(cg == '*')
{
- n++;
+ if(cn == '.')
+ g++;
+ else
+ n++;
continue;
}
- // Consume extra '*'
- if(cg == '*')
+ // An '?' consumes one letter, except the dot
+ if(cg == '?')
{
g++;
+ if(cn != '.')
+ n++;
continue;
}
// Convert letters to uppercase
@@ -138,8 +143,8 @@ static int dos_glob(const char *n, const char *g)
cg = cg - 'a' + 'A';
if(cn >= 'a' && cn <= 'z')
cn = cn - 'a' + 'A';
- // Consume equal leters or '?'
- if(cg == '?' || cg == cn)
+ // Consume equal letters or '?'
+ if(cg == cn)
{
g++;
n++;
@@ -147,8 +152,8 @@ static int dos_glob(const char *n, const char *g)
}
return 0;
}
- // Consume extra '*' and '.'
- while(*g == '*' || *g == '.')
+ // Consume extra '*', '?' and '.'
+ while(*g == '*' || *g == '?' || *g == '.')
g++;
if(*n || *g)
return 0;
Un proyecto texto-plano.xyz