Mercurial > hg > octave-nkf > gnulib-hg
changeset 10225:263c02b12cef
Avoid question marks in proper_name_utf8 result.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sat, 21 Jun 2008 17:50:05 +0200 |
parents | bc89433c293a |
children | 79eaf2932dad |
files | ChangeLog lib/propername.c |
diffstat | 2 files changed, 37 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-06-21 Bruno Haible <bruno@clisp.org> + + * lib/propername.c (proper_name_utf8): Don't use the transliterated + result if it contains question marks. + Reported by Michael Geng <linux@michaelgeng.de>. + 2008-06-19 Bruno Haible <bruno@clisp.org> Fix CVS-ism.
--- a/lib/propername.c +++ b/lib/propername.c @@ -205,15 +205,32 @@ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \ || _LIBICONV_VERSION >= 0x0105 { + char *converted_translit; + size_t len = strlen (locale_code); char *locale_code_translit = XNMALLOC (len + 10 + 1, char); memcpy (locale_code_translit, locale_code, len); memcpy (locale_code_translit + len, "//TRANSLIT", 10 + 1); - name_converted_translit = alloc_name_converted_translit = + converted_translit = xstr_iconv (name_utf8, "UTF-8", locale_code_translit); free (locale_code_translit); + + if (converted_translit != NULL) + { +# if !_LIBICONV_VERSION + /* Don't use the transliteration if it added question marks. + glibc's transliteration falls back to question marks; libiconv's + transliteration does not. + mbschr is equivalent to strchr in this case. */ + if (strchr (converted_translit, '?') != NULL) + free (converted_translit); + else +# endif + name_converted_translit = alloc_name_converted_translit = + converted_translit; + } } # endif #endif @@ -270,7 +287,7 @@ } } -#ifdef TEST +#ifdef TEST1 # include <locale.h> int main (int argc, char *argv[]) @@ -281,3 +298,15 @@ return 0; } #endif + +#ifdef TEST2 +# include <locale.h> +# include <stdio.h> +int +main (int argc, char *argv[]) +{ + setlocale (LC_ALL, ""); + printf ("%s\n", proper_name_utf8 ("Franc,ois Pinard", "Fran\303\247ois Pinard")); + return 0; +} +#endif