From: Jeffrey Altman Date: Fri, 14 Oct 2005 12:19:55 +0000 (+0000) Subject: STABLE14-windows-pattern-matching-20051014 X-Git-Tag: openafs-stable-1_4_1-rc1~36 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=86f61a2fb6743212e7716750a7ee0efa3e57e0b2;p=packages%2Fo%2Fopenafs.git STABLE14-windows-pattern-matching-20051014 FIXES 4623 Pattern matching was broken. '?' should match zero characters if it appears before a '.' or at the end of the file name. (cherry picked from commit 41fe908bead6b30e41fd9e4f5084cd5e1dc3ca4a) --- diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index 50e7b85af..3e91c6fdf 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -3557,9 +3557,10 @@ szWildCardMatchFileName(PSZ pattern, PSZ name, int casefold) while (*name) { switch (*pattern) { case '?': - if (*name == '.') - return FALSE; - ++pattern, ++name; + ++pattern; + if (*name == '.') + continue; + ++name; break; case '*': ++pattern; @@ -3581,10 +3582,12 @@ szWildCardMatchFileName(PSZ pattern, PSZ name, int casefold) } /* endswitch */ } /* endwhile */ - if (*pattern == '\0' || *pattern == '*' && *(pattern+1) == '\0') - return TRUE; - else - return FALSE; + /* if all we have left are wildcards, then we match */ + for (;*pattern; pattern++) { + if (*pattern != '*' && *pattern != '?') + return FALSE; + } + return TRUE; } /* do a case-folding search of the star name mask with the name in namep.