From: Antony Dovgal Date: Tue, 4 Dec 2007 11:26:54 +0000 (+0000) Subject: detect IBM iconv implementation and use correct encoding names X-Git-Tag: RELEASE_2_0_0a1~1239 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6905cf29829102bc62ac27defd05c243f41df298;p=php 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 3e8c8a90fa..635858cbbf 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -1102,7 +1102,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) { @@ -1413,7 +1413,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 383f232d26..42818a3fa0 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" @@ -74,9 +75,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