diff options
author | Daniel Serpell <daniel.serpell@gmail.com> | 2019-12-20 21:11:19 -0300 |
---|---|---|
committer | Daniel Serpell <daniel.serpell@gmail.com> | 2019-12-20 21:11:19 -0300 |
commit | e96a85085206d697bc4c0b865ff37907093f6f69 (patch) | |
tree | 1d0e82df4d4a4f4fc987637dff0af9086cfb7502 | |
parent | 3cdd57792a6c8e8a3bfa88671b19ae0bec70e8fb (diff) | |
download | emu2-e96a85085206d697bc4c0b865ff37907093f6f69.tar.gz |
Fixes glob for '?', in DOS it can match zero or one characters.
-rw-r--r-- | src/dosnames.c | 23 |
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; |