diff --git a/configure.ac b/configure.ac index 409531c4e..19b2137e1 100644 --- a/configure.ac +++ b/configure.ac @@ -653,6 +653,14 @@ case "$host" in ;; esac +dnl TEST: check if iconv uses const char +AC_MSG_CHECKING([whether iconv uses const char**]) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([ +#include +size_t iconv(iconv_t, const char **restrict, size_t *restrict, char **restrict, size_t *restrict); +])], AC_DEFINE(ICONV_CONST_CHAR, 1) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) +AH_TEMPLATE(ICONV_CONST_CHAR,[Whether iconv uses const char**]) + dnl LIBRARY TEST: SDLnet AC_CHECK_HEADER(SDL_net.h,have_sdl_net_h=yes,) AC_CHECK_LIB(SDL2_net, SDLNet_Init, have_sdl2_net_lib=yes, , ) diff --git a/include/iconvpp.hpp b/include/iconvpp.hpp index 25804bc52..85fa1515d 100644 --- a/include/iconvpp.hpp +++ b/include/iconvpp.hpp @@ -31,6 +31,12 @@ # define ICONV_BIG_ENDIAN BIG_ENDIAN #endif +#ifdef ICONV_CONST_CHAR +# define ICONV_IN_TYPE const char** +#else +# define ICONV_IN_TYPE char** +#endif + #include #include #include @@ -247,7 +253,7 @@ public: iconv(context,NULL,NULL,NULL,NULL); /* Ref: [http://man7.org/linux/man-pages/man3/iconv.3.html] */ - int ret = iconv(context,(char**)(&(pclass::src_ptr)),&src_left,(char**)(&(pclass::dst_ptr)),&dst_left); + int ret = iconv(context,(ICONV_IN_TYPE)(&(pclass::src_ptr)),&src_left,(char**)(&(pclass::dst_ptr)),&dst_left); pclass::src_adv = (size_t)(pclass::src_ptr - i_src); pclass::dst_adv = (size_t)(pclass::dst_ptr - i_dst);