From: Jeffrey Altman Date: Fri, 14 Oct 2005 12:18:15 +0000 (+0000) Subject: windows-pattern-matching-20051014 X-Git-Tag: openafs-devel-1_5_0~262 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=41fe908bead6b30e41fd9e4f5084cd5e1dc3ca4a;p=packages%2Fo%2Fopenafs.git 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. --- 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.