]> git.sesse.net Git - vlc/commitdiff
Use C locale when formatting error messages in the log
authorRémi Denis-Courmont <remi@remlab.net>
Sat, 6 Feb 2010 12:23:34 +0000 (14:23 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 6 Feb 2010 12:24:35 +0000 (14:24 +0200)
include/vlc_fixups.h
src/libvlc.h
src/misc/messages.c

index e1680ae69f27279fa8f7f2015116776c9d81d790..ef6fae285db437ea66889844e68d0d0b9725e1f9 100644 (file)
@@ -170,7 +170,8 @@ static inline char *getenv (const char *name)
 #endif
 
 #ifndef HAVE_USELOCALE
-#define LC_NUMERIC_MASK 0
+#define LC_NUMERIC_MASK  0
+#define LC_MESSAGES_MASK 0
 typedef void *locale_t;
 static inline locale_t uselocale(locale_t loc)
 {
index ff1b89f8f8c399be219c7499a687ccb655792a80..06c955c95d2b410b05fe2354e933a58bf40de4e8 100644 (file)
@@ -100,6 +100,8 @@ typedef struct msg_bank_t
 #ifdef UNDER_CE
     FILE *logfile;
 #endif
+
+    locale_t locale;
 } msg_bank_t;
 
 void msg_Create  (libvlc_int_t *);
index 30cb00455a526f714a1bf4338a0afb8bf9ac94e5..45af2e510648b1e392978f4eda4bfe57d8a46126 100644 (file)
@@ -35,7 +35,7 @@
 #include <vlc_common.h>
 
 #include <stdarg.h>                                       /* va_list for BSD */
-
+#include <locale.h>
 #include <errno.h>                                                  /* errno */
 
 #ifdef WIN32
@@ -109,6 +109,9 @@ void msg_Create (libvlc_int_t *p_libvlc)
     QUEUE.i_sub = 0;
     QUEUE.pp_sub = NULL;
 
+    /* C locale to get error messages in English in the logs */
+    bank->locale = newlocale (LC_MESSAGES_MASK, "C", (locale_t)0);
+
 #ifdef UNDER_CE
     QUEUE.logfile =
         CreateFile( L"vlc-log.txt", GENERIC_WRITE,
@@ -175,6 +178,8 @@ void msg_Destroy (libvlc_int_t *p_libvlc)
 #ifdef UNDER_CE
     CloseHandle( QUEUE.logfile );
 #endif
+    if (bank->locale != (locale_t)0)
+       freelocale (bank->locale);
 
     vlc_dictionary_clear( &priv->msg_enabled_objects, NULL, NULL );
 
@@ -288,6 +293,9 @@ static void QueueMsg( vlc_object_t *p_this, int i_type, const char *psz_module,
         (p_this->i_flags & OBJECT_FLAGS_NODBG && i_type == VLC_MSG_DBG) )
         return;
 
+    msg_bank_t *bank = &QUEUE;
+    locale_t locale = uselocale (bank->locale);
+
 #ifndef __GLIBC__
     /* Expand %m to strerror(errno) - only once */
     char buf[strlen( psz_format ) + 2001], *ptr;
@@ -373,8 +381,10 @@ static void QueueMsg( vlc_object_t *p_this, int i_type, const char *psz_module,
         va_end( args );
         fputs( "\n", stderr );
         vlc_restorecancel (canc);
+        uselocale (locale);
         return;
     }
+    uselocale (locale);
 
     msg_item_t * p_item = malloc (sizeof (*p_item));
     if (p_item == NULL)
@@ -421,7 +431,6 @@ static void QueueMsg( vlc_object_t *p_this, int i_type, const char *psz_module,
 
     PrintMsg( p_this, p_item );
 
-    msg_bank_t *bank = &QUEUE;
     vlc_rwlock_rdlock (&bank->lock);
     for (int i = 0; i < bank->i_sub; i++)
     {