From: Antony Dovgal Date: Tue, 4 Dec 2007 11:27:25 +0000 (+0000) Subject: MFH: detect IBM iconv implementation and use correct encoding names X-Git-Tag: RELEASE_1_3_1~548 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=550b617be14bbfecaca6238b4394ccab65dd1cff;p=php MFH: detect IBM iconv implementation and use correct encoding names --- diff --git a/ext/iconv/config.m4 b/ext/iconv/config.m4 index 3c619d8bab..d673b0adba 100644 --- a/ext/iconv/config.m4 +++ b/ext/iconv/config.m4 @@ -79,9 +79,24 @@ int main() { ]) fi + if test -z "$iconv_impl_name"; then + AC_MSG_CHECKING([if using IBM iconv]) + php_iconv_old_ld="$LDFLAGS" + LDFLAGS="-liconv $LDFLAGS" + AC_TRY_LINK([#include ],[cstoccsid("");], + [ + AC_MSG_RESULT(yes) + iconv_impl_name="ibm" + ],[ + AC_MSG_RESULT(no) + LDFLAGS="$php_iconv_old_ld" + ]) + fi + echo > ext/iconv/php_have_bsd_iconv.h echo > ext/iconv/php_have_glibc_iconv.h echo > ext/iconv/php_have_libiconv.h + echo > ext/iconv/php_have_ibm_iconv.h case "$iconv_impl_name" in gnu_libiconv [)] @@ -104,6 +119,12 @@ int main() { PHP_DEFINE([PHP_ICONV_IMPL],[\"glibc\"],[ext/iconv]) AC_DEFINE([PHP_ICONV_IMPL],["glibc"],[Which iconv implementation to use]) ;; + ibm [)] + PHP_DEFINE([HAVE_IBM_ICONV],1,[ext/iconv]) + AC_DEFINE([HAVE_IBM_ICONV],1,[IBM iconv implementation]) + PHP_DEFINE([PHP_ICONV_IMPL],[\"IBM iconv\"],[ext/iconv]) + AC_DEFINE([PHP_ICONV_IMPL],["IBM iconv"],[Which iconv implementation to use]) + ;; esac AC_MSG_CHECKING([if iconv supports errno]) diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index 37d187a13a..c63929bf3a 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -1040,7 +1040,7 @@ static php_iconv_err_t _php_iconv_mime_encode(smart_str *pretval, const char *fn goto out; } - cd_pl = iconv_open("ASCII", enc); + cd_pl = iconv_open(ICONV_ASCII_ENCODING, enc); if (cd_pl == (iconv_t)(-1)) { #if ICONV_SUPPORTS_ERRNO if (errno == EINVAL) { @@ -1351,7 +1351,7 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st *next_pos = NULL; } - cd_pl = iconv_open(enc, "ASCII"); + cd_pl = iconv_open(enc, ICONV_ASCII_ENCODING); if (cd_pl == (iconv_t)(-1)) { #if ICONV_SUPPORTS_ERRNO diff --git a/ext/iconv/php_iconv.h b/ext/iconv/php_iconv.h index 25c9990824..4d6e579864 100644 --- a/ext/iconv/php_iconv.h +++ b/ext/iconv/php_iconv.h @@ -37,6 +37,7 @@ #include "ext/iconv/php_have_libiconv.h" #include "ext/iconv/php_have_glibc_iconv.h" #include "ext/iconv/php_have_bsd_iconv.h" +#include "ext/iconv/php_have_ibm_iconv.h" #include "ext/iconv/php_iconv_supports_errno.h" #include "ext/iconv/php_php_iconv_impl.h" #include "ext/iconv/php_php_iconv_h_path.h" @@ -75,9 +76,17 @@ ZEND_END_MODULE_GLOBALS(iconv) #define ICONVG(v) (iconv_globals.v) #endif -#define ICONV_INPUT_ENCODING "ISO-8859-1" -#define ICONV_OUTPUT_ENCODING "ISO-8859-1" -#define ICONV_INTERNAL_ENCODING "ISO-8859-1" +#ifdef HAVE_IBM_ICONV +# define ICONV_INPUT_ENCODING "ISO8859-1" +# define ICONV_OUTPUT_ENCODING "ISO8859-1" +# define ICONV_INTERNAL_ENCODING "ISO8859-1" +# define ICONV_ASCII_ENCODING "IBM-850" +#else +# define ICONV_INPUT_ENCODING "ISO-8859-1" +# define ICONV_OUTPUT_ENCODING "ISO-8859-1" +# define ICONV_INTERNAL_ENCODING "ISO-8859-1" +# define ICONV_ASCII_ENCODING "ASCII" +#endif #ifndef ICONV_CSNMAXLEN #define ICONV_CSNMAXLEN 64