76 lines
1.7 KiB
C
76 lines
1.7 KiB
C
|
#include <stdio.h>
|
||
|
|
||
|
#ifndef TRUE
|
||
|
#define TRUE 1
|
||
|
#define FALSE 0
|
||
|
#endif
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* Does `string' match `pattern'? '*' in pattern matches any sub-string
|
||
|
* (including the null string) '?' matches any single char. For use
|
||
|
* by filenameforall. Note that '*' matches across directory boundaries
|
||
|
*
|
||
|
* This code donated by Paul Hudson <paulh@harlequin.co.uk>
|
||
|
* It is public domain, no strings attached. No guarantees either.
|
||
|
*
|
||
|
*****************************************************************************/
|
||
|
int matchWildcards(char *pattern, char *string)
|
||
|
{
|
||
|
if(string == NULL)
|
||
|
{
|
||
|
if(pattern == NULL)
|
||
|
return TRUE;
|
||
|
else if(strcmp(pattern,"*")==0)
|
||
|
return TRUE;
|
||
|
else
|
||
|
return FALSE;
|
||
|
}
|
||
|
if(pattern == NULL)
|
||
|
return TRUE;
|
||
|
|
||
|
while (*string && *pattern)
|
||
|
{
|
||
|
if (*pattern == '?')
|
||
|
{
|
||
|
/* match any character */
|
||
|
pattern += 1;
|
||
|
string += 1;
|
||
|
}
|
||
|
else if (*pattern == '*')
|
||
|
{
|
||
|
/* see if the rest of the pattern matches any trailing substring
|
||
|
of the string. */
|
||
|
pattern += 1;
|
||
|
if (*pattern == 0)
|
||
|
{
|
||
|
return TRUE; /* trailing * must match rest */
|
||
|
}
|
||
|
while (*string)
|
||
|
{
|
||
|
if (matchWildcards(pattern,string))
|
||
|
{
|
||
|
return TRUE;
|
||
|
}
|
||
|
string++;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (*pattern == '\\')
|
||
|
pattern ++; /* has strange, but harmless effects if the last
|
||
|
character is a '\\' */
|
||
|
if (*pattern++ != *string++)
|
||
|
{
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if((*pattern == 0)&&(*string == 0))
|
||
|
return TRUE;
|
||
|
if((*string == 0)&&(strcmp(pattern,"*")==0))
|
||
|
return TRUE;
|
||
|
return FALSE;
|
||
|
}
|
||
|
|