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

Initialize iconv at The Right Times

parent 9aa61aa0
...@@ -92,6 +92,8 @@ static vlc_t * p_static_vlc; ...@@ -92,6 +92,8 @@ static vlc_t * p_static_vlc;
/***************************************************************************** /*****************************************************************************
* Local prototypes * Local prototypes
*****************************************************************************/ *****************************************************************************/
static void LocaleInit( void );
static void LocaleDeinit( void );
static void SetLanguage ( char const * ); static void SetLanguage ( char const * );
static int GetFilenames ( vlc_t *, int, char *[] ); static int GetFilenames ( vlc_t *, int, char *[] );
static void Help ( vlc_t *, char const *psz_help_name ); static void Help ( vlc_t *, char const *psz_help_name );
...@@ -191,22 +193,6 @@ int VLC_Create( void ) ...@@ -191,22 +193,6 @@ int VLC_Create( void )
libvlc.b_color = VLC_FALSE; libvlc.b_color = VLC_FALSE;
#endif #endif
/*
* Global iconv
*/
if( !vlc_current_charset( &psz_env ) )
{
vlc_mutex_init( p_libvlc, &libvlc.from_locale_lock );
vlc_mutex_init( p_libvlc, &libvlc.to_locale_lock );
libvlc.from_locale = vlc_iconv_open( "UTF-8", psz_env );
libvlc.to_locale = vlc_iconv_open( psz_env, "UTF-8" );
}
else
{
libvlc.from_locale = libvlc.to_locale = (vlc_iconv_t)-1;
}
free( psz_env );
/* Initialize message queue */ /* Initialize message queue */
msg_Create( p_libvlc ); msg_Create( p_libvlc );
...@@ -218,6 +204,9 @@ int VLC_Create( void ) ...@@ -218,6 +204,9 @@ int VLC_Create( void )
libvlc.p_module_bank = NULL; libvlc.p_module_bank = NULL;
libvlc.b_ready = VLC_TRUE; libvlc.b_ready = VLC_TRUE;
/* UTF-8 convertor are initialized after the locale */
libvlc.from_locale = libvlc.to_locale = (vlc_iconv_t)(-1);
} }
vlc_mutex_unlock( lockval.p_address ); vlc_mutex_unlock( lockval.p_address );
var_Destroy( p_libvlc, "libvlc" ); var_Destroy( p_libvlc, "libvlc" );
...@@ -301,6 +290,12 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] ) ...@@ -301,6 +290,12 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] )
*/ */
SetLanguage( "" ); SetLanguage( "" );
/*
* Global iconv, must be done after setlocale()
* so that vlc_current_charset() works.
*/
LocaleInit();
/* Translate "C" to the language code: "fr", "en_GB", "nl", "ru"... */ /* Translate "C" to the language code: "fr", "en_GB", "nl", "ru"... */
msg_Dbg( p_vlc, "translation test: code is \"%s\"", _("C") ); msg_Dbg( p_vlc, "translation test: code is \"%s\"", _("C") );
...@@ -431,6 +426,8 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] ) ...@@ -431,6 +426,8 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] )
/* Reset the default domain */ /* Reset the default domain */
SetLanguage( psz_language ); SetLanguage( psz_language );
LocaleDeinit();
LocaleInit();
/* Translate "C" to the language code: "fr", "en_GB", "nl", "ru"... */ /* Translate "C" to the language code: "fr", "en_GB", "nl", "ru"... */
msg_Dbg( p_vlc, "translation test: code is \"%s\"", _("C") ); msg_Dbg( p_vlc, "translation test: code is \"%s\"", _("C") );
...@@ -982,13 +979,7 @@ int VLC_Destroy( int i_object ) ...@@ -982,13 +979,7 @@ int VLC_Destroy( int i_object )
msg_Destroy( p_libvlc ); msg_Destroy( p_libvlc );
/* Destroy global iconv */ /* Destroy global iconv */
if( libvlc.to_locale != (vlc_iconv_t)(-1) ) LocaleDeinit();
{
vlc_mutex_destroy( &libvlc.from_locale_lock );
vlc_mutex_destroy( &libvlc.to_locale_lock );
vlc_iconv_close( libvlc.from_locale );
vlc_iconv_close( libvlc.to_locale );
}
/* Destroy mutexes */ /* Destroy mutexes */
vlc_mutex_destroy( &p_vlc->config_lock ); vlc_mutex_destroy( &p_vlc->config_lock );
...@@ -1842,6 +1833,33 @@ int VLC_FullScreen( int i_object ) ...@@ -1842,6 +1833,33 @@ int VLC_FullScreen( int i_object )
/* following functions are local */ /* following functions are local */
static void LocaleInit( void )
{
char *psz_charset;
if( !vlc_current_charset( &psz_charset ) )
{
vlc_mutex_init( p_libvlc, &libvlc.from_locale_lock );
vlc_mutex_init( p_libvlc, &libvlc.to_locale_lock );
libvlc.from_locale = vlc_iconv_open( "UTF-8", psz_charset );
libvlc.to_locale = vlc_iconv_open( psz_charset, "UTF-8" );
}
else
libvlc.from_locale = libvlc.to_locale = (vlc_iconv_t)(-1);
free( psz_charset );
}
static void LocaleDeinit( void )
{
if( libvlc.to_locale != (vlc_iconv_t)(-1) )
{
vlc_mutex_destroy( &libvlc.from_locale_lock );
vlc_mutex_destroy( &libvlc.to_locale_lock );
vlc_iconv_close( libvlc.from_locale );
vlc_iconv_close( libvlc.to_locale );
}
}
/***************************************************************************** /*****************************************************************************
* SetLanguage: set the interface language. * SetLanguage: set the interface language.
***************************************************************************** *****************************************************************************
......
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