src/lib/wildcmp.c 1.7
1.7 2009/11/20 19:11:16 angie
Adding more const qualifiers because cart.c needs startsWith and wildMatch to have the same signature (thanks Galt!).
Index: src/lib/wildcmp.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/lib/wildcmp.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -b -B -U 1000000 -r1.6 -r1.7
--- src/lib/wildcmp.c 20 Nov 2009 08:08:26 -0000 1.6
+++ src/lib/wildcmp.c 20 Nov 2009 19:11:16 -0000 1.7
@@ -1,117 +1,117 @@
/* Wildcard matching.
*
* This file is copyright 2002 Jim Kent, but license is hereby
* granted for all use - public, private or commercial. */
#include "common.h"
static char const rcsid[] = "$Id$";
-static int subMatch(char *str, char *wild, char single, char multi)
+static int subMatch(const char *str, const char *wild, char single, char multi)
/* Returns number of characters that match between str and wild up
* to the next wildcard in wild (or up to end of string.). */
{
int len = 0;
for(;;)
{
if(toupper(*str++) != toupper(*wild++) )
return(0);
++len;
char c = *wild;
if (c == 0 || c == single || c == multi)
return len;
}
}
-boolean anyWild(char *string)
+boolean anyWild(const char *string)
/* Return TRUE if any wild card characters in string. */
{
char c;
while ((c = *string++) != 0)
{
if (c == '?' || c == '*')
return TRUE;
}
return FALSE;
}
-static boolean globMatch(char *wildCard, char *string, char single, char multi)
+static boolean globMatch(const char *wildCard, const char *string, char single, char multi)
/* does a case sensitive wild card match with a string.
* * matches any string or no character.
* ? matches any single character.
* anything else etc must match the character exactly. */
{
boolean matchStar = 0;
int starMatchSize;
char c;
for(;;)
{
NEXT_WILD:
c = *wildCard;
if (c == 0)
{
if(matchStar)
{
while(*string++)
;
return TRUE;
}
else if(*string)
return FALSE;
else
return TRUE;
}
else if (c == multi)
{
matchStar = TRUE;
}
else if (c == single)
{
if(*string == 0)
return FALSE; /* out of string, no match for ? */
++string;
}
else
{
if(matchStar)
{
for(;;)
{
if(*string == 0) /* if out of string no match */
return FALSE;
/* note matchStar is re-used here for substring
* after star match length */
if((starMatchSize = subMatch(string,wildCard,single,multi)) != 0)
{
string += starMatchSize;
wildCard += starMatchSize;
matchStar = FALSE;
goto NEXT_WILD;
}
++string;
}
}
/* default: they must be equal or no match */
if(toupper(*string) != toupper(*wildCard))
return FALSE;
++string;
}
++wildCard;
}
}
-boolean wildMatch(char *wildCard, char *string)
+boolean wildMatch(const char *wildCard, const char *string)
/* Match using * and ? wildcards. */
{
return globMatch(wildCard, string, '?', '*');
}
boolean sqlMatchLike(char *wildCard, char *string)
/* Match using % and _ wildcards. */
{
return globMatch(wildCard, string, '_', '%');
}