/* Case-insensitive string comparison function.
- Copyright (C) 1998-1999, 2005-2008 Free Software Foundation, Inc.
+ Copyright (C) 1998-1999, 2005-2008, 2010-2011 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2007.
This program is free software: you can redistribute it and/or modify
/* Compare the initial segment of the character string STRING consisting of
at most mbslen (PREFIX) characters with the character string PREFIX,
- ignoring case, returning less than, equal to or greater than zero if this
- initial segment is lexicographically less than, equal to or greater than
- PREFIX.
- Note: This function may, in multibyte locales, return 0 if STRING is of
- smaller length than PREFIX! */
+ ignoring case. If the two match, return a pointer to the first byte
+ after this prefix in STRING. Otherwise, return NULL.
+ Note: This function may, in multibyte locales, return non-NULL if STRING
+ is of smaller length than PREFIX! */
char *
mbspcasecmp (const char *string, const char *prefix)
{
mbui_init (iter2, prefix);
while (mbui_avail (iter1) && mbui_avail (iter2))
- {
- int cmp = mb_casecmp (mbui_cur (iter1), mbui_cur (iter2));
+ {
+ int cmp = mb_casecmp (mbui_cur (iter1), mbui_cur (iter2));
- if (cmp != 0)
- return NULL;
+ if (cmp != 0)
+ return NULL;
- mbui_advance (iter1);
- mbui_advance (iter2);
- }
+ mbui_advance (iter1);
+ mbui_advance (iter2);
+ }
if (!mbui_avail (iter2))
- /* PREFIX equals STRING or is terminated before STRING. */
- return (char *) mbui_cur_ptr (iter1);
+ /* PREFIX equals STRING or is terminated before STRING. */
+ return (char *) mbui_cur_ptr (iter1);
else
- /* STRING terminated before PREFIX. */
- return NULL;
+ /* STRING terminated before PREFIX. */
+ return NULL;
}
else
{
unsigned char c1, c2;
for (; ; p1++, p2++)
- {
- c1 = TOLOWER (*p1);
- c2 = TOLOWER (*p2);
+ {
+ c1 = TOLOWER (*p1);
+ c2 = TOLOWER (*p2);
- if (c2 == '\0' || c1 != c2)
- break;
- }
+ if (c2 == '\0' || c1 != c2)
+ break;
+ }
if (c2 == '\0')
- /* PREFIX equals STRING or is terminated before STRING. */
- return (char *) p1;
+ /* PREFIX equals STRING or is terminated before STRING. */
+ return (char *) p1;
else
- /* STRING terminated before PREFIX. */
- return NULL;
+ /* STRING terminated before PREFIX. */
+ return NULL;
}
}