Commit 9cd9116a authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

locale_fast: simplifications

parent fdc31525
...@@ -2,8 +2,7 @@ ...@@ -2,8 +2,7 @@
* unicode.c: Unicode <-> locale functions * unicode.c: Unicode <-> locale functions
***************************************************************************** *****************************************************************************
* Copyright (C) 2005-2006 the VideoLAN team * Copyright (C) 2005-2006 the VideoLAN team
* Copyright © 2005-2006 Rémi Denis-Courmont * Copyright © 2005-2008 Rémi Denis-Courmont
* $Id$
* *
* Authors: Rémi Denis-Courmont <rem # videolan.org> * Authors: Rémi Denis-Courmont <rem # videolan.org>
* *
...@@ -78,26 +77,22 @@ ...@@ -78,26 +77,22 @@
#endif #endif
#if defined (USE_ICONV) #if defined (USE_ICONV)
static char charset[sizeof ("CSISO11SWEDISHFORNAMES//translit")] = ""; # include <langinfo.h>
static char charset[sizeof ("CSISO11SWEDISHFORNAMES")] = "";
static void find_charset_once (void) static void find_charset_once (void)
{ {
char *psz_charset; strlcpy (charset, nl_langinfo (CODESET), sizeof (charset));
if (vlc_current_charset (&psz_charset) if (!strcasecmp (charset, "ASCII")
|| (psz_charset == NULL) || !strcasecmp (charset, "ANSI_X3.4-1968"))
|| (strcmp (psz_charset, "ASCII") == 0) strcpy (charset, "UTF-8"); /* superset... */
|| ((size_t)snprintf (charset, sizeof (charset), "%s//translit",
psz_charset) >= sizeof (charset)))
strcpy (charset, "UTF-8");
free (psz_charset);
} }
static int find_charset (void) static int find_charset (void)
{ {
static pthread_once_t once = PTHREAD_ONCE_INIT; static pthread_once_t once = PTHREAD_ONCE_INIT;
pthread_once (&once, find_charset_once); pthread_once (&once, find_charset_once);
return !strcmp (charset, "UTF-8"); return !strcasecmp (charset, "UTF-8");
} }
#endif #endif
...@@ -111,7 +106,7 @@ static char *locale_fast (const char *string, bool from) ...@@ -111,7 +106,7 @@ static char *locale_fast (const char *string, bool from)
vlc_iconv_t hd = vlc_iconv_open (from ? "UTF-8" : charset, vlc_iconv_t hd = vlc_iconv_open (from ? "UTF-8" : charset,
from ? charset : "UTF-8"); from ? charset : "UTF-8");
if (hd == (vlc_iconv_t)(-1)) if (hd == (vlc_iconv_t)(-1))
return strdup (string); /* Uho! */ return NULL; /* Uho! */
const char *iptr = string; const char *iptr = string;
size_t inb = strlen (string); size_t inb = strlen (string);
...@@ -127,7 +122,7 @@ static char *locale_fast (const char *string, bool from) ...@@ -127,7 +122,7 @@ static char *locale_fast (const char *string, bool from)
outb--; outb--;
iptr++; iptr++;
inb--; inb--;
vlc_iconv (hd, NULL, NULL, NULL, NULL); vlc_iconv (hd, NULL, NULL, NULL, NULL); /* reset */
} }
*optr = '\0'; *optr = '\0';
vlc_iconv_close (hd); vlc_iconv_close (hd);
...@@ -149,15 +144,17 @@ static char *locale_fast (const char *string, bool from) ...@@ -149,15 +144,17 @@ static char *locale_fast (const char *string, bool from)
wchar_t wide[len]; wchar_t wide[len];
MultiByteToWideChar (from ? CP_ACP : CP_UTF8, 0, string, -1, wide, len); MultiByteToWideChar (from ? CP_ACP : CP_UTF8, 0, string, -1, wide, len);
len = 1 + WideCharToMultiByte (from ? CP_UTF8 : CP_ACP, 0, wide, -1, NULL, 0, NULL, NULL); len = 1 + WideCharToMultiByte (from ? CP_UTF8 : CP_ACP, 0, wide, -1,
NULL, 0, NULL, NULL);
out = malloc (len); out = malloc (len);
if (out == NULL) if (out == NULL)
return NULL; return NULL;
WideCharToMultiByte (from ? CP_UTF8 : CP_ACP, 0, wide, -1, out, len, NULL, NULL); WideCharToMultiByte (from ? CP_UTF8 : CP_ACP, 0, wide, -1, out, len,
NULL, NULL);
return out; return out;
#else #else
VLC_UNUSED(from); (void)from;
return (char *)string; return (char *)string;
#endif #endif
} }
...@@ -174,7 +171,7 @@ static inline char *locale_dup (const char *string, bool from) ...@@ -174,7 +171,7 @@ static inline char *locale_dup (const char *string, bool from)
#elif defined (USE_MB2MB) #elif defined (USE_MB2MB)
return locale_fast (string, from); return locale_fast (string, from);
#else #else
VLC_UNUSED(from); (void)from;
return strdup (string); return strdup (string);
#endif #endif
} }
...@@ -191,7 +188,7 @@ void LocaleFree (const char *str) ...@@ -191,7 +188,7 @@ void LocaleFree (const char *str)
#elif defined (USE_MB2MB) #elif defined (USE_MB2MB)
free ((char *)str); free ((char *)str);
#else #else
VLC_UNUSED(str); (void)str;
#endif #endif
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment