summaryrefslogtreecommitdiff
path: root/ghc/lib/std/cbits/readFile.c
diff options
context:
space:
mode:
Diffstat (limited to 'ghc/lib/std/cbits/readFile.c')
-rw-r--r--ghc/lib/std/cbits/readFile.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/ghc/lib/std/cbits/readFile.c b/ghc/lib/std/cbits/readFile.c
index 5c9256cd5a..8393d071c3 100644
--- a/ghc/lib/std/cbits/readFile.c
+++ b/ghc/lib/std/cbits/readFile.c
@@ -1,7 +1,7 @@
/*
* (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
*
- * $Id: readFile.c,v 1.14 2000/04/04 11:01:33 simonmar Exp $
+ * $Id: readFile.c,v 1.15 2000/04/12 17:33:16 simonmar Exp $
*
* hGetContents Runtime Support
*/
@@ -114,6 +114,7 @@ readBlock(StgForeignPtr ptr)
* buffer of connected handle.
* FILEOBJ_BLOCKED_READ didn't read anything; would block
* n, where n > 0 read n bytes into buffer.
+ * 0 EOF has been reached
*/
StgInt
@@ -134,9 +135,7 @@ readChunk(StgForeignPtr ptr, StgAddr buf, StgInt off, StgInt len)
return -2;
if ( FILEOBJ_IS_EOF(fo) ) {
- ghc_errtype = ERR_EOF;
- ghc_errstr = "";
- return -1;
+ return 0;
}
/* if input stream is connect to an output stream, flush it first */
@@ -191,24 +190,20 @@ readChunk(StgForeignPtr ptr, StgAddr buf, StgInt off, StgInt len)
/* EOF */
if ( count == 0 ) {
FILEOBJ_SET_EOF(fo);
- if ( total_count == 0 ) {
- ghc_errtype = ERR_EOF;
- ghc_errstr = "";
- return -1;
- } else {
- return total_count;
- }
+ return total_count;
+ }
/* Blocking */
- } else if ( count == -1 && errno == EAGAIN) {
+ else if ( count == -1 && errno == EAGAIN) {
errno = 0;
if (total_count > 0)
return total_count; /* partial read */
else
return FILEOBJ_BLOCKED_READ;
+ }
/* Error */
- } else if ( count == -1 && errno != EINTR) {
+ else if ( count == -1 && errno != EINTR) {
cvtErrno();
stdErrno();
return -1;
@@ -268,9 +263,10 @@ readLine(StgForeignPtr ptr)
fo->flags = (fo->flags & ~FILEOBJ_RW_WRITE) | FILEOBJ_RW_READ;
if ( fo->bufRPtr < 0 || fo->bufRPtr >= fo->bufWPtr ) { /* Buffer is empty */
- fo->bufRPtr=0; fo->bufWPtr=0;
- rc = fill_up_line_buffer(fo);
- if (rc < 0) return rc;
+ fo->bufRPtr=0;
+ fo->bufWPtr=0;
+ rc = fill_up_line_buffer(fo);
+ if (rc < 0) return rc;
}
while (1) {