summaryrefslogtreecommitdiff
path: root/testsuite/tests/lib/IOExts/hGetBuf003.stdout
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/lib/IOExts/hGetBuf003.stdout')
-rw-r--r--testsuite/tests/lib/IOExts/hGetBuf003.stdout52
1 files changed, 52 insertions, 0 deletions
diff --git a/testsuite/tests/lib/IOExts/hGetBuf003.stdout b/testsuite/tests/lib/IOExts/hGetBuf003.stdout
new file mode 100644
index 0000000000..ffeb291563
--- /dev/null
+++ b/testsuite/tests/lib/IOExts/hGetBuf003.stdout
@@ -0,0 +1,52 @@
+import System.IO
+import Foreign
+import Foreign.C
+import Control.Monad
+
+main = do test True; test False
+
+test blocking = do
+ h <- openBinaryFile "hGetBuf003.hs" ReadMode
+
+ let sz = 42
+ loop = do
+ -- mix ordinary char buffering with hGetBuf
+ eof <- hIsEOF h
+ when (not eof) $ hGetChar h >>= putChar
+ b <- allocaBytes sz $ \ptr -> do
+ r <- (if blocking then hGetBuf else hGetBufNonBlocking) h ptr sz
+ if (r == 0)
+ then return True
+ else do s <- peekCStringLen (ptr,r)
+ putStr s
+ return False
+ if b then return () else loop -- tail call
+
+ loop
+
+import System.IO
+import Foreign
+import Foreign.C
+import Control.Monad
+
+main = do test True; test False
+
+test blocking = do
+ h <- openBinaryFile "hGetBuf003.hs" ReadMode
+
+ let sz = 42
+ loop = do
+ -- mix ordinary char buffering with hGetBuf
+ eof <- hIsEOF h
+ when (not eof) $ hGetChar h >>= putChar
+ b <- allocaBytes sz $ \ptr -> do
+ r <- (if blocking then hGetBuf else hGetBufNonBlocking) h ptr sz
+ if (r == 0)
+ then return True
+ else do s <- peekCStringLen (ptr,r)
+ putStr s
+ return False
+ if b then return () else loop -- tail call
+
+ loop
+