[vlc-commits] Win32: fix gettext with non-ASCII installation path

Rémi Denis-Courmont git at videolan.org
Mon Jan 24 17:52:56 CET 2011


vlc/vlc-1.1 | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Mon Jan 24 18:32:10 2011 +0200| [fc8cd1d92c32c53a2b5802e2adf179c0e97389fc] | committer: Rémi Denis-Courmont

Win32: fix gettext with non-ASCII installation path

Note that this only works if the path can be represented in the ANSI
code page. Otherwise, you will need to patch gettext.
(cherry picked from commit 7b21f9d5490bd37f64b3aa67fce05e1a7d9b811f)
(cherry picked from commit bbcc3288fbad733a2b574efc435c32a400e872b1)

> http://git.videolan.org/gitweb.cgi/vlc/vlc-1.1.git/?a=commit;h=fc8cd1d92c32c53a2b5802e2adf179c0e97389fc
---

 src/modules/textdomain.c |   42 +++++++++++++++++++++++-------------------
 1 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/src/modules/textdomain.c b/src/modules/textdomain.c
index 4d7e54e..4b5ac5b 100644
--- a/src/modules/textdomain.c
+++ b/src/modules/textdomain.c
@@ -29,33 +29,44 @@
 # include <libintl.h>
 # if defined (__APPLE__) || defined (WIN32)
 #  include "config/configuration.h"
+#  include <vlc_charset.h>
 # endif
 #endif
 
 int vlc_bindtextdomain (const char *domain)
 {
-    int ret = 0;
-
 #if defined (ENABLE_NLS)
     /* Specify where to find the locales for current domain */
 # if !defined (__APPLE__) && !defined (WIN32)
     static const char path[] = LOCALEDIR;
+
+    if (bindtextdomain (domain, path) == NULL)
+    {
+        fprintf (stderr, "%s: text domain not found in %s\n", domain, path);
+        return -1;
+    }
 # else
     char *datadir = config_GetDataDirDefault();
-    char *path;
-
     if (unlikely(datadir == NULL))
         return -1;
-    ret = asprintf (&path, "%s" DIR_SEP "locale", datadir);
+
+    char *upath;
+    int ret = asprintf (&upath, "%s" DIR_SEP "locale", datadir);
     free (datadir);
-# endif
+    if (unlikely(ret == -1))
+        return -1;
 
-    if (bindtextdomain (domain, path) == NULL)
+    char *lpath = ToLocaleDup (upath);
+    if (lpath == NULL || bindtextdomain (domain, lpath) == NULL)
     {
-        fprintf (stderr, "%s: text domain not found in %s\n", domain, path);
-        ret = -1;
-        goto out;
+        free (lpath);
+        fprintf (stderr, "%s: text domain not found in %s\n", domain, upath);
+        free (upath);
+        return -1;
     }
+    free (lpath);
+    free (upath);
+# endif
 
     /* LibVLC wants all messages in UTF-8.
      * Unfortunately, we cannot ask UTF-8 for strerror_r(), strsignal_r()
@@ -66,24 +77,17 @@ int vlc_bindtextdomain (const char *domain)
         fprintf (stderr, "%s: UTF-8 encoding bot available\n", domain);
         // Unbinds the text domain to avoid broken encoding
         bindtextdomain (PACKAGE_NAME, "/DOES_NOT_EXIST");
-        ret = -1;
-        goto out;
+        return -1;
     }
 
     /* LibVLC does NOT set the default textdomain, since it is a library.
      * This could otherwise break programs using LibVLC (other than VLC).
      * textdomain (PACKAGE_NAME);
      */
-out:
-# if defined (__APPLE__) || defined (WIN32)
-    free (path);
-# endif
 
 #else /* !ENABLE_NLS */
     (void)domain;
 #endif
 
-    return ret;
+    return 0;
 }
-
-



More information about the vlc-commits mailing list