#if !defined(mingw32_HOST_OS)
-import Foreign
+import Foreign hiding (unsafePerformIO)
import Foreign.C
import Data.Maybe
import GHC.Base
import GHC.Num
import GHC.Show
import GHC.Real
+import System.IO.Unsafe (unsafePerformIO)
import System.Posix.Internals
c_DEBUG_DUMP :: Bool
{-# NOINLINE localeEncoding #-}
localeEncoding :: TextEncoding
localeEncoding = unsafePerformIO $ do
-#if HAVE_LANGINFO_H
- cstr <- c_localeEncoding -- use nl_langinfo(CODESET) to get the encoding
- -- if we have it
+ -- Use locale_charset() or nl_langinfo(CODESET) to get the encoding
+ -- if we have either of them.
+ cstr <- c_localeEncoding
r <- peekCString cstr
mkTextEncoding r
-#else
- mkTextEncoding "" -- GNU iconv accepts "" to mean the -- locale encoding.
-#endif
-- We hope iconv_t is a storable type. It should be, since it has at least the
-- value -1, which is a possible return value from iconv_open.
mkTextEncoding :: String -> IO TextEncoding
mkTextEncoding charset = do
return (TextEncoding {
+ textEncodingName = charset,
mkTextDecoder = newIConv charset haskellChar iconvDecode,
mkTextEncoder = newIConv haskellChar charset iconvEncode})