[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