From 85ed71ab833a40f5acfeb4610a0aa3c3c3e1a35b Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Wed, 24 Nov 2010 16:42:21 +0000 Subject: [PATCH 1/1] Don't throw an error if the output buffer had no room This is consistent with the other codecs, and will be relied on by some upcoming changes in the IO library. --- GHC/IO/Encoding/Iconv.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/GHC/IO/Encoding/Iconv.hs b/GHC/IO/Encoding/Iconv.hs index 1c19b00..faf58e9 100644 --- a/GHC/IO/Encoding/Iconv.hs +++ b/GHC/IO/Encoding/Iconv.hs @@ -194,11 +194,10 @@ iconvRecode iconv_t else do errno <- getErrno case errno of - e | e == eINVAL - || (e == e2BIG || e == eILSEQ) && new_inleft' /= (iw-ir) -> do + e | e == eINVAL || e == e2BIG + || e == eILSEQ && new_inleft' /= (iw-ir) -> do iconv_trace ("iconv ignoring error: " ++ show (errnoToIOError "iconv" e Nothing Nothing)) - -- Output overflow is relatively harmless, unless - -- we made no progress at all. + -- Output overflow is harmless -- -- Similarly, we ignore EILSEQ unless we converted no -- characters. Sometimes iconv reports EILSEQ for a @@ -211,8 +210,9 @@ iconvRecode iconv_t -- the buffer have been drained. return (new_input, new_output) - _other -> - throwErrno "iconvRecoder" + e -> do + iconv_trace ("iconv returned error: " ++ show (errnoToIOError "iconv" e Nothing Nothing)) + throwErrno "iconvRecoder" -- illegal sequence, or some other error #endif /* !mingw32_HOST_OS */ -- 1.7.10.4