Browse Source

MFH: detect IBM iconv implementation and use correct encoding names

PECL
Antony Dovgal 19 years ago
parent
commit
550b617be1
  1. 21
      ext/iconv/config.m4
  2. 4
      ext/iconv/iconv.c
  3. 15
      ext/iconv/php_iconv.h

21
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 <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])

4
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

15
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

Loading…
Cancel
Save