[project @ 1998-04-10 11:04:49 by simonm]
[ghc-hetmet.git] / ghc / lib / std / cbits / fileGetc.c
1 /* 
2  * (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
3  *
4  * $Id: fileGetc.c,v 1.1 1998/04/10 10:54:22 simonm Exp $
5  *
6  * hGetChar Runtime Support
7  */
8
9 #include "Rts.h"
10 #include "stgio.h"
11 #include "error.h"
12
13 StgInt
14 fileGetc(StgAddr fp)
15 {
16     int c;
17
18     if (feof((FILE *)fp)) {
19         ghc_errtype = ERR_EOF;
20         ghc_errstr = "";
21         return EOF;
22     }
23
24     /* Try to read a character */
25     while ((c = getc((FILE *)fp)) == EOF && errno == EINTR)
26         clearerr((FILE *)fp);
27
28     if (feof((FILE *)fp)) {
29         ghc_errtype = ERR_EOF;
30         ghc_errstr = "";
31     } else if (c == EOF) {
32         cvtErrno();
33         stdErrno();
34     }
35     return c;
36 }