[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: iconv: detect HP-UX bug
From: |
Bruno Haible |
Subject: |
Re: iconv: detect HP-UX bug |
Date: |
Sat, 31 Mar 2007 22:30:18 +0200 |
User-agent: |
KMail/1.5.4 |
The last iconv.m4 patch from two days ago always resulted in
"checking for working iconv... no"
This fixes it, and adds detection of another HP-UX iconv deficiency.
2007-03-31 Bruno Haible <address@hidden>
* m4/iconv.m4 (AM_ICONV_LINK): Fix 2007-03-29 patch. Test also against
a bug in HP-UX iconv_open().
*** m4/iconv.m4 30 Mar 2007 01:51:13 -0000 1.11
--- m4/iconv.m4 31 Mar 2007 20:25:57 -0000
***************
*** 58,92 ****
])
if test "$am_cv_func_iconv" = yes; then
AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [
! dnl This tests against a bug in AIX 5.1: failures are not
distinguishable
! dnl from successul returns.
am_save_LIBS="$LIBS"
if test $am_cv_lib_iconv = yes; then
LIBS="$LIBS $LIBICONV"
fi
AC_TRY_RUN([
int main ()
{
! static const char input[] = "\342\202\254"; /* EURO SIGN */
! iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
! if (cd_utf8_to_88591 != (iconv_t)(-1))
! {
! char buf[10];
! const char *inptr = input;
! size_t inbytesleft = strlen (input);
! char *outptr = buf;
! size_t outbytesleft = sizeof (buf);
! size_t res = iconv (cd_utf8_to_88591,
! (char **) &inptr, &inbytesleft,
! &outptr, &outbytesleft);
! return res == 0;
! }
! else
! return 0;
}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
[case "$host_os" in
! aix*) am_cv_func_iconv_works="guessing no" ;;
! *) am_cv_func_iconv_works="guessing yes" ;;
esac])
LIBS="$am_save_LIBS"
])
--- 58,127 ----
])
if test "$am_cv_func_iconv" = yes; then
AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [
! dnl This tests against bugs in AIX 5.1 and HP-UX 11.11.
am_save_LIBS="$LIBS"
if test $am_cv_lib_iconv = yes; then
LIBS="$LIBS $LIBICONV"
fi
AC_TRY_RUN([
+ #include <iconv.h>
+ #include <string.h>
int main ()
{
! /* Test against AIX 5.1 bug: Failures are not distinguishable from
successful
! returns. */
! {
! iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
! if (cd_utf8_to_88591 != (iconv_t)(-1))
! {
! static const char input[] = "\342\202\254"; /* EURO SIGN */
! char buf[10];
! const char *inptr = input;
! size_t inbytesleft = strlen (input);
! char *outptr = buf;
! size_t outbytesleft = sizeof (buf);
! size_t res = iconv (cd_utf8_to_88591,
! (char **) &inptr, &inbytesleft,
! &outptr, &outbytesleft);
! if (res == 0)
! return 1;
! }
! }
! #if 0 /* This bug could be worked around by the caller. */
! /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
! {
! iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
! if (cd_88591_to_utf8 != (iconv_t)(-1))
! {
! static const char input[] = "\304rger mit b\366sen B\374bchen ohne
Augenma\337";
! char buf[50];
! const char *inptr = input;
! size_t inbytesleft = strlen (input);
! char *outptr = buf;
! size_t outbytesleft = sizeof (buf);
! size_t res = iconv (cd_88591_to_utf8,
! (char **) &inptr, &inbytesleft,
! &outptr, &outbytesleft);
! if ((int)res > 0)
! return 1;
! }
! }
! #endif
! /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
! provided. */
! if (/* Try standardized names. */
! iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
! /* Try IRIX, OSF/1 names. */
! && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
! /* Try AIX names. */
! && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
! /* Try HP-UX names. */
! && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
! return 0;
}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
[case "$host_os" in
! aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
! *) am_cv_func_iconv_works="guessing yes" ;;
esac])
LIBS="$am_save_LIBS"
])