uniform-io-1.0.1.0: src/System/IO/Uniform/Std.hs
module System.IO.Uniform.Std (
StdIO(StdIO)
) where
import System.IO.Uniform
import System.IO.Uniform.External
import Foreign
import Foreign.C.Error
import qualified Data.ByteString as BS
-- | UniformIO that reads from stdin and writes to stdout.
instance UniformIO StdIO where
uRead _ n = do
allocaArray n (
\b -> do
count <- c_recvStd b (fromIntegral n)
if count < 0
then throwErrno "could not read"
else BS.packCStringLen (b, fromIntegral count)
)
uPut _ t = do
BS.useAsCStringLen t (
\(str, n) -> do
count <- c_sendStd str $ fromIntegral n
if count < 0
then throwErrno "could not write"
else return ()
)
uClose _ = return ()
startTls _ a = return a
isSecure _ = True