]> granicus.if.org Git - php/commitdiff
MFH: detect IBM iconv implementation and use correct encoding names
authorAntony Dovgal <tony2001@php.net>
Tue, 4 Dec 2007 11:27:25 +0000 (11:27 +0000)
committerAntony Dovgal <tony2001@php.net>
Tue, 4 Dec 2007 11:27:25 +0000 (11:27 +0000)
ext/iconv/config.m4
ext/iconv/iconv.c
ext/iconv/php_iconv.h

index 3c619d8bab751d79eb160f1fe371e5a1e792d122..d673b0adba4588ad536f27e0c363a66a7f56ae19 100644 (file)
@@ -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 <iconv.h>],[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])
index 37d187a13aba638324d57263d7090647190a12e6..c63929bf3ab96c8e56e7ec998f6e5d3d2c5b4550 100644 (file)
@@ -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
index 25c9990824e9f028eeecb3f0c0891a840a2d48ca..4d6e579864082b9499a74b20d92b5c51bbc600ac 100644 (file)
@@ -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