diff options
author | Arjun Shankar <arjun@redhat.com> | 2020-09-25 14:47:06 +0200 |
---|---|---|
committer | Arjun Shankar <arjun@redhat.com> | 2020-09-25 14:47:06 +0200 |
commit | 7d4ec75e111291851620c6aa2c4460647b7fd50d (patch) | |
tree | 1692804299aa1634e52cd2cf021ab4dbce2b01c6 /intl/tst-codeset.c | |
parent | 06e95b93f0bb5943363ad3dcf0cd0fb9d8613b61 (diff) | |
download | glibc-7d4ec75e111291851620c6aa2c4460647b7fd50d.tar.gz glibc-7d4ec75e111291851620c6aa2c4460647b7fd50d.tar.xz glibc-7d4ec75e111291851620c6aa2c4460647b7fd50d.zip |
intl: Handle translation output codesets with suffixes [BZ #26383]
Commit 91927b7c7643 (Rewrite iconv option parsing [BZ #19519]) did not handle cases where the output codeset for translations (via the `gettext' family of functions) might have a caller specified encoding suffix such as TRANSLIT or IGNORE. This led to a regression where translations did not work when the codeset had a suffix. This commit fixes the above issue by parsing any suffixes passed to __dcigettext and adds two new test-cases to intl/tst-codeset.c to verify correct behaviour. The iconv-internal function __gconv_create_spec and the static iconv-internal function gconv_destroy_spec are now visible internally within glibc and used in intl/dcigettext.c.
Diffstat (limited to 'intl/tst-codeset.c')
-rw-r--r-- | intl/tst-codeset.c | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/intl/tst-codeset.c b/intl/tst-codeset.c index fd70432eca..e9f6e5e09f 100644 --- a/intl/tst-codeset.c +++ b/intl/tst-codeset.c @@ -22,13 +22,11 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <support/check.h> static int do_test (void) { - char *s; - int result = 0; - unsetenv ("LANGUAGE"); unsetenv ("OUTPUT_CHARSET"); setlocale (LC_ALL, "de_DE.ISO-8859-1"); @@ -36,25 +34,21 @@ do_test (void) bindtextdomain ("codeset", OBJPFX "domaindir"); /* Here we expect output in ISO-8859-1. */ - s = gettext ("cheese"); - if (strcmp (s, "K\344se")) - { - printf ("call 1 returned: %s\n", s); - result = 1; - } + TEST_COMPARE_STRING (gettext ("cheese"), "K\344se"); + /* Here we expect output in UTF-8. */ bind_textdomain_codeset ("codeset", "UTF-8"); + TEST_COMPARE_STRING (gettext ("cheese"), "K\303\244se"); - /* Here we expect output in UTF-8. */ - s = gettext ("cheese"); - if (strcmp (s, "K\303\244se")) - { - printf ("call 2 returned: %s\n", s); - result = 1; - } - - return result; + /* `a with umlaut' is transliterated to `ae'. */ + bind_textdomain_codeset ("codeset", "ASCII//TRANSLIT"); + TEST_COMPARE_STRING (gettext ("cheese"), "Kaese"); + + /* Transliteration also works by default even if not set. */ + bind_textdomain_codeset ("codeset", "ASCII"); + TEST_COMPARE_STRING (gettext ("cheese"), "Kaese"); + + return 0; } -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" +#include <support/test-driver.c> |