From 1416b1dd8e09b6da8528b349802cda6dbb64bc70 Mon Sep 17 00:00:00 2001 From: Alberto Massari <amassari@apache.org> Date: Wed, 5 Aug 2009 17:49:53 +0000 Subject: [PATCH] On Linux, iconv requires char*; on Solaris, const char*. Use autoconf to pick the correct code git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@801335 13f79535-47bb-0310-9956-ffa450edef68 --- configure.ac | 19 +++++++++++++++++++ .../IconvGNU/IconvGNUTransService.cpp | 16 ++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/configure.ac b/configure.ac index bca57e693..c4289c9dd 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 9ab5f0e48..544953d4e 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); } -- GitLab