tolower() depends on the current locale.

It's much easier to write our own function than to use locales properly.
This commit is contained in:
Tsuda Kageyu 2016-11-08 21:39:53 +09:00
parent e390cbac52
commit d81d894d41

View File

@ -222,15 +222,27 @@ namespace TagLib
}
/*!
* Returns whether the two strings s1 and s2 are equal, ignoring the case of
* the characters.
* Converts the letter c to lower case, not depending on the locale.
*/
inline int toLowerCase(char c)
{
if('A' <= c && c <= 'Z')
return c + ('a' - 'A');
else
return c;
}
/*!
* Returns whether the two strings s1 and s2 are equal, ignoring the case
* of the characters. This only supports US-ASCII and does not depend on
* the current locale.
*
* We took the trouble to define this one here, since there are some
* incompatible variations of case insensitive strcmp().
*/
inline bool equalsIgnoreCase(const char *s1, const char *s2)
{
while(*s1 != '\0' && *s2 != '\0' && ::tolower(*s1) == ::tolower(*s2)) {
while(*s1 != '\0' && *s2 != '\0' && toLowerCase(*s1) == toLowerCase(*s2)) {
s1++;
s2++;
}