grub_strword ("filesystem", "file") returns 0 in your implementation.
If I write this function, I use grub_strstr and check if the previous character and the next character are boundaries.
This is a very good idea. The standalone testcase below works for me:
int
grub_isspace (int c)
{
return (c == '\n' || c == '\r' || c == ' ' || c == '\t');
}int
grub_iswordseparator (int c)
{
return (grub_isspace (c) || c == ',' || c == ';' || c == '|' || c == '&');
}
int
grub_strword(const char *haystack, const char *needle)
{
char *match;
char *end;match = strstr (haystack, needle);
if (match == NULL)
return 0;
if ((match > haystack) && (!grub_iswordseparator (match[-1])))
return 0; end = match + strlen(needle)+1;
if (*end && !grub_iswordseparator (*end))
return 0;return 1; }
int main(void)
{
int i;
char *list[][2] = {
{ "foo", "bar" },
{ "file", "file" },
{ "filesystem", "file" },
{ NULL, NULL},
}; for (i=0; list[i][0] != NULL; i++) {
if (grub_strword (list[i][0], list[i][1]))
printf ("%s/%s matched\n", list[i][0], list[i][1]);
else
printf ("%s/%s didn't match\n", list[i][0], list[i][1]);
}
return 0;
}I would like to make sure Vincent's patch gets in soon, so that as I debug I can leave conditional debug printfs in the code where they're needed. I believe grub_strword was the only subject of conversation in his patch; are there any other comments? If so please speak up soon... :)
-Hollis
_______________________________________________ Grub-devel mailing list [email protected] http://lists.gnu.org/mailman/listinfo/grub-devel
