-{-# OPTIONS_GHC -fno-implicit-prelude -funbox-strict-fields #-}
-{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP
+ , NoImplicitPrelude
+ , BangPatterns
+ , NondecreasingIndentation
+ , MagicHash
+ #-}
+{-# OPTIONS_GHC -funbox-strict-fields #-}
+
-----------------------------------------------------------------------------
-- |
-- Module : GHC.IO.Encoding.UTF16
import GHC.Base
import GHC.Real
import GHC.Num
-import GHC.IO
+-- import GHC.IO
import GHC.IO.Exception
import GHC.IO.Buffer
import GHC.IO.Encoding.Types
import System.Posix.Internals
import Foreign.C
import GHC.Show
+import GHC.Ptr
puts :: String -> IO ()
puts s = do withCStringLen (s++"\n") $ \(p,len) ->
- c_write 1 p (fromIntegral len)
+ c_write 1 (castPtr p) (fromIntegral len)
return ()
#endif
-- The UTF-16 codec: either UTF16BE or UTF16LE with a BOM
utf16 :: TextEncoding
-utf16 = TextEncoding { mkTextDecoder = utf16_DF,
+utf16 = TextEncoding { textEncodingName = "UTF-16",
+ mkTextDecoder = utf16_DF,
mkTextEncoder = utf16_EF }
utf16_DF :: IO (TextDecoder (Maybe DecodeBuffer))
-- UTF16LE and UTF16BE
utf16be :: TextEncoding
-utf16be = TextEncoding { mkTextDecoder = utf16be_DF,
+utf16be = TextEncoding { textEncodingName = "UTF-16BE",
+ mkTextDecoder = utf16be_DF,
mkTextEncoder = utf16be_EF }
utf16be_DF :: IO (TextDecoder ())
})
utf16le :: TextEncoding
-utf16le = TextEncoding { mkTextDecoder = utf16le_DF,
+utf16le = TextEncoding { textEncodingName = "UTF16-LE",
+ mkTextDecoder = utf16le_DF,
mkTextEncoder = utf16le_EF }
utf16le_DF :: IO (TextDecoder ())
c1 <- readWord8Buf iraw (ir+1)
let x1 = fromIntegral c0 `shiftL` 8 + fromIntegral c1
if validate1 x1
- then do writeCharBuf oraw ow (unsafeChr (fromIntegral x1))
- loop (ir+2) (ow+1)
+ then do ow' <- writeCharBuf oraw ow (unsafeChr (fromIntegral x1))
+ loop (ir+2) ow'
else if iw - ir < 4 then done ir ow else do
c2 <- readWord8Buf iraw (ir+2)
c3 <- readWord8Buf iraw (ir+3)
let x2 = fromIntegral c2 `shiftL` 8 + fromIntegral c3
if not (validate2 x1 x2) then invalid else do
- writeCharBuf oraw ow (chr2 x1 x2)
- loop (ir+4) (ow+1)
+ ow' <- writeCharBuf oraw ow (chr2 x1 x2)
+ loop (ir+4) ow'
where
invalid = if ir > ir0 then done ir ow else ioe_decodingError
c1 <- readWord8Buf iraw (ir+1)
let x1 = fromIntegral c1 `shiftL` 8 + fromIntegral c0
if validate1 x1
- then do writeCharBuf oraw ow (unsafeChr (fromIntegral x1))
- loop (ir+2) (ow+1)
+ then do ow' <- writeCharBuf oraw ow (unsafeChr (fromIntegral x1))
+ loop (ir+2) ow'
else if iw - ir < 4 then done ir ow else do
c2 <- readWord8Buf iraw (ir+2)
c3 <- readWord8Buf iraw (ir+3)
let x2 = fromIntegral c3 `shiftL` 8 + fromIntegral c2
if not (validate2 x1 x2) then invalid else do
- writeCharBuf oraw ow (chr2 x1 x2)
- loop (ir+4) (ow+1)
+ ow' <- writeCharBuf oraw ow (chr2 x1 x2)
+ loop (ir+4) ow'
where
invalid = if ir > ir0 then done ir ow else ioe_decodingError