From: RĂ©mi Denis-Courmont Date: Sun, 18 Jul 2010 08:59:57 +0000 (+0300) Subject: nl_langinfo is not thread-safe, avoid it X-Git-Tag: 1.2.0-pre1~5789 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=9164192f0231bed4913e5cd3bb4174343163439b;p=vlc nl_langinfo is not thread-safe, avoid it This brings some useless overhead for native UTF-8 systems. Linux packagers may want to define ASSUME_UTF8 to avoid this problem. Also, this assumes that iconv_open() recognizes "" as the current character set (POSIX says nothing about valid iconv_open() parameters). --- diff --git a/src/text/unicode.c b/src/text/unicode.c index 77b7684d4a..41734eddc7 100644 --- a/src/text/unicode.c +++ b/src/text/unicode.c @@ -57,38 +57,14 @@ # error No UTF8 charset conversion implemented on this platform! #endif -#if defined (USE_ICONV) -# include -static char charset[sizeof ("CSISO11SWEDISHFORNAMES")] = ""; - -static void find_charset_once (void) -{ - strlcpy (charset, nl_langinfo (CODESET), sizeof (charset)); - if (!strcasecmp (charset, "ASCII") - || !strcasecmp (charset, "ANSI_X3.4-1968")) - strcpy (charset, "UTF-8"); /* superset... */ -} - -static int find_charset (void) -{ - static pthread_once_t once = PTHREAD_ONCE_INIT; - pthread_once (&once, find_charset_once); - return !strcasecmp (charset, "UTF-8"); -} -#endif - - static char *locale_fast (const char *string, bool from) { if( string == NULL ) return NULL; #if defined (USE_ICONV) - if (find_charset ()) - return (char *)string; - - vlc_iconv_t hd = vlc_iconv_open (from ? "UTF-8" : charset, - from ? charset : "UTF-8"); + vlc_iconv_t hd = vlc_iconv_open (from ? "UTF-8" : "", + from ? "" : "UTF-8"); if (hd == (vlc_iconv_t)(-1)) return NULL; /* Uho! */ @@ -144,8 +120,6 @@ static inline char *locale_dup (const char *string, bool from) assert( string ); #if defined (USE_ICONV) - if (find_charset ()) - return strdup (string); return locale_fast (string, from); #elif defined (USE_MB2MB) return locale_fast (string, from); @@ -162,8 +136,7 @@ static inline char *locale_dup (const char *string, bool from) void LocaleFree (const char *str) { #if defined (USE_ICONV) - if (!find_charset ()) - free ((char *)str); + free ((char *)str); #elif defined (USE_MB2MB) free ((char *)str); #else