From 4672db851932db81ce5fbfca924399697b4d511e Mon Sep 17 00:00:00 2001 From: Rafael Roquetto Date: Thu, 2 Feb 2012 14:53:37 +0100 Subject: Add support for QNX iconv implementation. QNX implements the POSIX version of iconv (with non-const function signatures). However, it is still necessary to link with libiconv, unlike most cases. Also, its iconv_open does not know how to handle an empty string. cherry-picked from qt5/qtbase 38cba9a37fc5fe76b1549463422ab539a1b4cf24 Change-Id: Ia77633f1ddfdc8f5a8414125f8363749a6449cc8 Reviewed-by: Oswald Buddenhagen --- config.tests/unix/iconv/iconv.pro | 2 +- configure | 4 ++-- src/corelib/codecs/codecs.pri | 1 + src/corelib/codecs/qiconvcodec.cpp | 5 +++++ 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/config.tests/unix/iconv/iconv.pro b/config.tests/unix/iconv/iconv.pro index d642da2..ec573ce 100644 --- a/config.tests/unix/iconv/iconv.pro +++ b/config.tests/unix/iconv/iconv.pro @@ -1,3 +1,3 @@ SOURCES = iconv.cpp CONFIG -= qt dylib app_bundle -mac|win32-g++*:LIBS += -liconv +mac|win32-g++*|blackberry-*-qcc:LIBS += -liconv diff --git a/configure b/configure index 84b6202..6403a2f 100755 --- a/configure +++ b/configure @@ -5600,8 +5600,8 @@ fi # auto-detect iconv(3) support if [ "$CFG_ICONV" != "no" ]; then - if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then - CFG_ICONV=no + if [ "$PLATFORM_QWS" = "yes" ] || [ "$PLATFORM_QPA" = "yes" -a "$CFG_ICONV" = "auto" ]; then + CFG_ICONV=no elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" "$OPT_VERBOSE" "$relpath" "$outpath" "config.tests/unix/iconv" "POSIX iconv" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then CFG_ICONV=yes elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" "$OPT_VERBOSE" "$relpath" "$outpath" "config.tests/unix/sun-libiconv" "SUN libiconv" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then diff --git a/src/corelib/codecs/codecs.pri b/src/corelib/codecs/codecs.pri index 46d7dd4..6bc2fa6 100644 --- a/src/corelib/codecs/codecs.pri +++ b/src/corelib/codecs/codecs.pri @@ -25,6 +25,7 @@ unix { contains(QT_CONFIG,iconv) { HEADERS += codecs/qiconvcodec_p.h SOURCES += codecs/qiconvcodec.cpp + blackberry-*-qcc:LIBS_PRIVATE *= -liconv } else:contains(QT_CONFIG,gnu-libiconv) { HEADERS += codecs/qiconvcodec_p.h SOURCES += codecs/qiconvcodec.cpp diff --git a/src/corelib/codecs/qiconvcodec.cpp b/src/corelib/codecs/qiconvcodec.cpp index 428e7d4..59c77ba 100644 --- a/src/corelib/codecs/qiconvcodec.cpp +++ b/src/corelib/codecs/qiconvcodec.cpp @@ -462,8 +462,13 @@ iconv_t QIconvCodec::createIconv_t(const char *to, const char *from) iconv_t cd = (iconv_t) -1; #if defined(__GLIBC__) || defined(GNU_LIBICONV) +#if defined(Q_OS_QNX) + // on QNX the default locale is UTF-8, and an empty string will cause iconv_open to fail + static const char empty_codeset[] = "UTF-8"; +#else // both GLIBC and libgnuiconv will use the locale's encoding if from or to is an empty string static const char empty_codeset[] = ""; +#endif const char *codeset = empty_codeset; cd = iconv_open(to ? to : codeset, from ? from : codeset); #else -- cgit v0.12