configure: Check if iconv uses const char**

This commit is contained in:
Jookia 2022-09-09 10:33:08 +10:00 committed by 宋文武
parent 3f396b3f43
commit eca6d64195
2 changed files with 15 additions and 1 deletions

View File

@ -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 <iconv.h>
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, , )

View File

@ -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 <errno.h>
#include <stdio.h>
#include <string.h>
@ -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);