summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/codecs/qiconvcodec.cpp6
-rw-r--r--src/corelib/codecs/qiconvcodec_p.h1
2 files changed, 6 insertions, 1 deletions
diff --git a/src/corelib/codecs/qiconvcodec.cpp b/src/corelib/codecs/qiconvcodec.cpp
index 59c77ba..3b15d11 100644
--- a/src/corelib/codecs/qiconvcodec.cpp
+++ b/src/corelib/codecs/qiconvcodec.cpp
@@ -286,12 +286,16 @@ QString QIconvCodec::convertToUnicode(const char* chars, int len, ConverterState
}
} while (inBytesLeft != 0);
- QString s = utf16Codec->toUnicode(ba.constData(), ba.size() - outBytesLeft);
+ QString s;
if (convState) {
+ s = utf16Codec->toUnicode(ba.constData(), ba.size() - outBytesLeft, &state->internalState);
+
convState->invalidChars = invalidCount;
convState->remainingChars = remainingCount;
} else {
+ s = utf16Codec->toUnicode(ba.constData(), ba.size() - outBytesLeft);
+
// reset state
iconv(state->cd, 0, &inBytesLeft, 0, &outBytesLeft);
}
diff --git a/src/corelib/codecs/qiconvcodec_p.h b/src/corelib/codecs/qiconvcodec_p.h
index fb2d89e..d305210 100644
--- a/src/corelib/codecs/qiconvcodec_p.h
+++ b/src/corelib/codecs/qiconvcodec_p.h
@@ -87,6 +87,7 @@ public:
public:
IconvState(iconv_t x);
~IconvState();
+ ConverterState internalState;
char *buffer;
int bufferLen;
iconv_t cd;