From: Tsuda Kageyu Date: Tue, 8 Nov 2016 12:39:53 +0000 (+0900) Subject: tolower() depends on the current locale. X-Git-Tag: v1.12-beta-1~120 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d81d894d41f8f9b916cdea70b4fdb30adb49a0b4;p=taglib tolower() depends on the current locale. It's much easier to write our own function than to use locales properly. --- diff --git a/taglib/toolkit/tutils.h b/taglib/toolkit/tutils.h index e3e4f6c3..365cfcab 100644 --- a/taglib/toolkit/tutils.h +++ b/taglib/toolkit/tutils.h @@ -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++; }