From d7ad7e861fc8cd97255a7d0384fc0e00f852ece1 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Tue, 6 Jul 2010 19:23:16 +0000 Subject: [PATCH] Fix occasional truncation problems with Windows-1258 Originally committed to SVN as r4657. --- aegisub/libaegisub/common/charset_conv.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/aegisub/libaegisub/common/charset_conv.cpp b/aegisub/libaegisub/common/charset_conv.cpp index 3f5a8cec3..b8eeb7bb7 100644 --- a/aegisub/libaegisub/common/charset_conv.cpp +++ b/aegisub/libaegisub/common/charset_conv.cpp @@ -282,7 +282,10 @@ size_t IconvWrapper::Convert(const char* source, size_t sourceSize, char *dest, if (sourceSize == (size_t)-1) { sourceSize = SrcStrLen(source); } + + size_t res = (*conv)(cd, &source, &sourceSize, &dest, &destSize); + if (res == 0) res = (*conv)(cd, NULL, NULL, &dest, &destSize); if (res == iconv_failed) { switch (errno) { @@ -325,6 +328,7 @@ size_t IconvWrapper::RequiredBufferSize(const char* src, size_t srcLen) { char* dst = buff; size_t dstSize = sizeof(buff); res = (*conv)(cd, &src, &srcLen, &dst, &dstSize); + (*conv)(cd, NULL, NULL, &dst, &dstSize); charsWritten += dst - buff; } while (res == iconv_failed && errno == E2BIG);