summaryrefslogtreecommitdiffstats
path: root/src/corelib/codecs
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/codecs')
-rw-r--r--src/corelib/codecs/qiconvcodec.cpp13
-rw-r--r--src/corelib/codecs/qiconvcodec_p.h3
2 files changed, 12 insertions, 4 deletions
diff --git a/src/corelib/codecs/qiconvcodec.cpp b/src/corelib/codecs/qiconvcodec.cpp
index c7c1d365b6..e56f8885e7 100644
--- a/src/corelib/codecs/qiconvcodec.cpp
+++ b/src/corelib/codecs/qiconvcodec.cpp
@@ -93,6 +93,10 @@ QT_BEGIN_NAMESPACE
QIconvCodec::QIconvCodec()
: utf16Codec(0)
{
+}
+
+void QIconvCodec::init() const
+{
utf16Codec = QTextCodec::codecForMib(1015);
Q_ASSERT_X(utf16Codec != 0,
"QIconvCodec::convertToUnicode",
@@ -203,7 +207,7 @@ QString QIconvCodec::convertToUnicode(const char* chars, int len, ConverterState
if (!*pstate) {
// first time, create the state
- iconv_t cd = QIconvCodec::createIconv_t(UTF16, 0);
+ iconv_t cd = createIconv_t(UTF16, 0);
if (cd == reinterpret_cast<iconv_t>(-1)) {
static int reported = 0;
if (!reported++) {
@@ -348,7 +352,7 @@ QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt
QThreadStorage<QIconvCodec::IconvState *> *ts = fromUnicodeState();
IconvState *&state = ts ? ts->localData() : temporaryState;
if (!state) {
- iconv_t cd = QIconvCodec::createIconv_t(0, UTF16);
+ iconv_t cd = createIconv_t(0, UTF16);
if (cd != reinterpret_cast<iconv_t>(-1)) {
if (!setByteOrder(cd)) {
perror("QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed for BOM");
@@ -460,10 +464,13 @@ int QIconvCodec::mibEnum() const
return 0;
}
-iconv_t QIconvCodec::createIconv_t(const char *to, const char *from)
+iconv_t QIconvCodec::createIconv_t(const char *to, const char *from) const
{
Q_ASSERT((to == 0 && from != 0) || (to != 0 && from == 0));
+ if (!utf16Codec)
+ init();
+
iconv_t cd = (iconv_t) -1;
#if defined(__GLIBC__) || defined(GNU_LIBICONV) || defined(Q_OS_QNX)
#if defined(Q_OS_QNX)
diff --git a/src/corelib/codecs/qiconvcodec_p.h b/src/corelib/codecs/qiconvcodec_p.h
index efe3b4b5f7..4b8bc68603 100644
--- a/src/corelib/codecs/qiconvcodec_p.h
+++ b/src/corelib/codecs/qiconvcodec_p.h
@@ -80,7 +80,8 @@ public:
QByteArray name() const;
int mibEnum() const;
- static iconv_t createIconv_t(const char *to, const char *from);
+ void init() const;
+ iconv_t createIconv_t(const char *to, const char *from) const;
class IconvState
{