diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e5e7c93f..5ba6b13df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -520,12 +520,8 @@ target_include_directories(Aegisub PRIVATE ${OPENGL_INCLUDE_DIR}) target_link_libraries(Aegisub ${OPENGL_LIBRARIES}) find_package(Iconv REQUIRED) -target_compile_definitions(libaegisub PRIVATE "HAVE_ICONV") target_include_directories(libaegisub PRIVATE ${Iconv_INCLUDE_DIRS}) target_link_libraries(libaegisub ${Iconv_LIBRARIES}) -if(NOT Iconv_IS_BUILT_IN) - target_compile_definitions(libaegisub PRIVATE "AGI_ICONV_CONST") -endif() find_package(ICU REQUIRED uc dt in) target_include_directories(libaegisub PRIVATE ${ICU_INCLUDE_DIRS}) diff --git a/configure.ac b/configure.ac index 772bc2e5f..9c1512a01 100644 --- a/configure.ac +++ b/configure.ac @@ -272,20 +272,6 @@ AC_SUBST(ICONV_CFLAGS) AS_IF([test x$agi_cv_with_iconv = xno], [AC_MSG_FAILURE([Please install a working iconv library.])]) -AC_AGI_COMPILE([iconv (const)], [iconv_const], [$ICONV_CFLAGS], [$ICONV_LIBS],[ -#include -int main(void) { - iconv_t cd = iconv_open("UTF-16", "UTF-8"); - const char *in = "in"; - char *out = new char(); - size_t res, inbytesleft, outbytesleft; - res = iconv(cd, &in, &inbytesleft, &out, &outbytesleft); - return 0; -} ]) - -AS_IF([test x$agi_cv_with_iconv_const = xyes], - [AC_DEFINE(AGI_ICONV_CONST, 1, [Enable if iconv expects the in argument to be const])]) - ############### # Audio Players ############### diff --git a/libaegisub/common/charset_conv.cpp b/libaegisub/common/charset_conv.cpp index 7e70d64a3..aa66bf7f5 100644 --- a/libaegisub/common/charset_conv.cpp +++ b/libaegisub/common/charset_conv.cpp @@ -33,12 +33,6 @@ #define ICONV_POSIX #endif -#ifdef AGI_ICONV_CONST -#define ICONV_CONST_CAST(a) a -#else -#define ICONV_CONST_CAST(a) const_cast(a) -#endif - static const iconv_t iconv_invalid = (iconv_t)-1; static const size_t iconv_failed = (size_t)-1; @@ -286,7 +280,13 @@ Iconv::~Iconv() { } size_t Iconv::operator()(const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft) { - return iconv(cd, ICONV_CONST_CAST(inbuf), inbytesleft, outbuf, outbytesleft); + struct InbufConstCast{ + const char** p; + InbufConstCast(const char** p) : p(p) {} + operator const char** () const { return p; } + operator char** () const { return const_cast(p); } + } inbuf_const_cast(inbuf); + return iconv(cd, inbuf_const_cast, inbytesleft, outbuf, outbytesleft); } IconvWrapper::IconvWrapper(const char* sourceEncoding, const char* destEncoding, bool enableSubst)