diff --git a/configure.ac b/configure.ac index bca57e69347eff56c4590db205af81650086ae2b..c4289c9dd4b07515341886d1ea42f25e8fa5d148 100644 --- a/configure.ac +++ b/configure.ac @@ -180,6 +180,25 @@ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <wchar.h>]], ] ) +AC_MSG_CHECKING([if iconv uses const pointers]) +AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <iconv.h>]], + [[ + const char *fromPtr=0; + size_t fromLen=0; + const char *toPtr=0; + size_t toLen=0; + iconv_t cv=0; + iconv(cv, &tmpPtr, &fromLen, &toPtr, &toLen); + ]])], + [ + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED([ICONV_USES_CONST_POINTER], 1, [Define to 1 if you have to use const char* with iconv, to 0 if you must use char*.]) + ], + [ + AC_MSG_RESULT([no]) + AC_DEFINE_UNQUOTED([ICONV_USES_CONST_POINTER], 0, [Define to 1 if you have to use const char* with iconv, to 0 if you must use char*.]) + ] + ) AC_SUBST([SHREXT], [$shrext_cmds]) diff --git a/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp b/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp index 9ab5f0e48386be4362bd0c42d60a1475861a799e..544953d4e91558dd62b0247e4bf41f35079a4fbb 100644 --- a/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp +++ b/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp @@ -242,7 +242,11 @@ XMLCh IconvGNUWrapper::toUpper (const XMLCh ch) xmlChToMbc (ch, wcbuf); char tmpArr[4]; +#if ICONV_USES_CONST_POINTER const char* ptr = wcbuf; +#else + char* ptr = wcbuf; +#endif size_t len = fUChSize; char *pTmpArr = tmpArr; size_t bLen = 2; @@ -271,7 +275,11 @@ XMLCh IconvGNUWrapper::toLower (const XMLCh ch) xmlChToMbc (ch, wcbuf); char tmpArr[4]; +#if ICONV_USES_CONST_POINTER const char* ptr = wcbuf; +#else + char* ptr = wcbuf; +#endif size_t len = fUChSize; char *pTmpArr = tmpArr; size_t bLen = 2; @@ -372,7 +380,11 @@ size_t IconvGNUWrapper::iconvFrom ( const char *fromPtr, char **toPtr, size_t toLen ) { +#if ICONV_USES_CONST_POINTER const char ** tmpPtr = &fromPtr; +#else + char ** tmpPtr = (char**)&fromPtr; +#endif return ::iconv (fCDFrom, tmpPtr, fromLen, toPtr, &toLen); } @@ -381,7 +393,11 @@ size_t IconvGNUWrapper::iconvTo ( const char *fromPtr, char **toPtr, size_t toLen ) { +#if ICONV_USES_CONST_POINTER const char ** tmpPtr = &fromPtr; +#else + char ** tmpPtr = (char**)&fromPtr; +#endif return ::iconv (fCDTo, tmpPtr, fromLen, toPtr, &toLen); }