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 *path = config_GetDataDirDefault();
- char *buf;
+ char *datadir = config_GetDataDirDefault();
+ if (unlikely(datadir == NULL))
+ return -1;
- if (unlikely(path == NULL))
+ char *upath;
+ int ret = asprintf (&upath, "%s" DIR_SEP "locale", datadir);
+ free (datadir);
+ if (unlikely(ret == -1))
return -1;
- ret = asprintf (&buf, "%s" DIR_SEP "locale", path);
- free (path);
- path = ToLocaleDup (buf);
- free (buf);
-# endif
- 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()
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;
}
-
-