#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.
* Modified by Emanuele Caratti <wiz@iol.it>
*
*****************************************************************************/
int
matchWildcards(char *pattern, char *string)
{
if (pattern == NULL)
return TRUE;
else if (*pattern == '*' && !*(pattern+1))
return TRUE;
if (string == NULL)
return FALSE;
while (*string && *pattern) {
if (*pattern == '?') {
/* match any character */
pattern++;
string++;
} else if (*pattern == '*') {
/* see if the rest of the pattern matches any trailing substring
* of the string. */
pattern++;
if (*pattern == 0) {
return TRUE; /* trailing * must match rest */
}
while (1){
while(*string && (*string != *pattern))
string++;
if(!*string)
return FALSE;
if( matchWildcards(pattern,string))
return TRUE;
string++;
}
} 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;
}
syntax highlighted by Code2HTML, v. 0.9.1