diff options
Diffstat (limited to 'testsuite/tests/lib/IO/hGetPosn001.hs')
-rw-r--r-- | testsuite/tests/lib/IO/hGetPosn001.hs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/testsuite/tests/lib/IO/hGetPosn001.hs b/testsuite/tests/lib/IO/hGetPosn001.hs new file mode 100644 index 0000000000..5a0d7d4827 --- /dev/null +++ b/testsuite/tests/lib/IO/hGetPosn001.hs @@ -0,0 +1,28 @@ +-- !!! Test file positioning + +module Main(main) where + +import Control.Monad +import System.Directory (removeFile, doesFileExist) +import System.IO +import System.IO.Error + +main = do + hIn <- openFile "hGetPosn001.in" ReadMode + f <- doesFileExist "hGetPosn001.out" + when f (removeFile "hGetPosn001.out") + hOut <- openFile "hGetPosn001.out" ReadWriteMode + bof <- hGetPosn hIn + putStrLn (show bof) -- you can show HandlePosns + copy hIn hOut + hSetPosn bof + copy hIn hOut + hSeek hOut AbsoluteSeek 0 + stuff <- hGetContents hOut + putStr stuff + +copy :: Handle -> Handle -> IO () +copy hIn hOut = + try (hGetChar hIn) >>= + either (\ err -> if isEOFError err then return () else error "copy") + ( \ x -> hPutChar hOut x >> copy hIn hOut) |