summaryrefslogtreecommitdiffstats
path: root/libass/ass.c
diff options
context:
space:
mode:
authoreugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-05-29 18:35:21 +0000
committereugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-05-29 18:35:21 +0000
commit94ef7fd59c03212f515df1c7ed4637ad76198f81 (patch)
tree4100caa086876e979bb6b75de15871986893c664 /libass/ass.c
parent8e59a530c453f8d7c8d36611ae975fc3528afc30 (diff)
downloadlibass-94ef7fd59c03212f515df1c7ed4637ad76198f81.tar.bz2
libass-94ef7fd59c03212f515df1c7ed4637ad76198f81.tar.xz
Clear iconv conversion state also in libass.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26923 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libass/ass.c')
-rw-r--r--libass/ass.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/libass/ass.c b/libass/ass.c
index 4b803db..c532328 100644
--- a/libass/ass.c
+++ b/libass/ass.c
@@ -846,13 +846,19 @@ static char* sub_recode(char* data, size_t size, char* codepage)
char* ip;
char* op;
size_t rc;
+ int clear = 0;
outbuf = malloc(size);
ip = data;
op = outbuf;
- while (ileft) {
- rc = iconv(icdsc, &ip, &ileft, &op, &oleft);
+ while (1) {
+ if (ileft)
+ rc = iconv(icdsc, &ip, &ileft, &op, &oleft);
+ else {// clear the conversion state and leave
+ clear = 1;
+ rc = iconv(icdsc, NULL, NULL, &op, &oleft);
+ }
if (rc == (size_t)(-1)) {
if (errno == E2BIG) {
size_t offset = op - outbuf;
@@ -864,7 +870,9 @@ static char* sub_recode(char* data, size_t size, char* codepage)
mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_ErrorRecodingFile);
return NULL;
}
- }
+ } else
+ if (clear)
+ break;
}
outbuf[osize - oleft - 1] = 0;
}