From d81d894d41f8f9b916cdea70b4fdb30adb49a0b4 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Tue, 8 Nov 2016 21:39:53 +0900 Subject: [PATCH] tolower() depends on the current locale. It's much easier to write our own function than to use locales properly. --- taglib/toolkit/tutils.h | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) 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++; } -- 2.40.0