From eca6d64195a05282ea9d4a9166406e47f6fbe4c0 Mon Sep 17 00:00:00 2001 From: Jookia Date: Fri, 9 Sep 2022 10:33:08 +1000 Subject: [PATCH] configure: Check if iconv uses const char** --- configure.ac | 8 ++++++++ include/iconvpp.hpp | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) 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);