]> git.sur5r.net Git - cc65/blobdiff - libsrc/common/fgetc.c
Removed (pretty inconsistently used) tab chars from source code base.
[cc65] / libsrc / common / fgetc.c
index 97e6dcb0bd772e83ba7d662214da30e4f10a48ca..c873cd1d052692f5e0ba75b02ea65879eb3bfead 100644 (file)
@@ -1,43 +1,55 @@
 /*
- * Ullrich von Bassewitz, 11.08.1998
+ * fgetc.c
+ *
+ * (C) Copyright 1998, 2002 Ullrich von Bassewitz (uz@cc65.org)
  *
- * int fgetc (FILE* f);
  */
 
 
 
 #include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
+#include <unistd.h>
 #include "_file.h"
 
 
 
-int fgetc (FILE* f)
+/*****************************************************************************/
+/*                                   Code                                    */
+/*****************************************************************************/
+
+
+
+int __fastcall__ fgetc (register FILE* f)
 {
-    char c;
+    unsigned char c;
 
     /* Check if the file is open or if there is an error condition */
     if ((f->f_flags & _FOPEN) == 0 || (f->f_flags & (_FERROR | _FEOF)) != 0) {
-       return -1;
+        return EOF;
+    }
+
+    /* If we have a pushed back character, return it */
+    if (f->f_flags & _FPUSHBACK) {
+        f->f_flags &= ~_FPUSHBACK;
+        return f->f_pushback;
     }
 
-    /* Read the byte */
+    /* Read one byte */
     switch (read (f->f_fd, &c, 1)) {
 
         case -1:
-           /* Error */
-           f->f_flags |= _FERROR;
-           return -1;
+            /* Error */
+            f->f_flags |= _FERROR;
+            return EOF;
 
         case 0:
-           /* EOF */
-           f->f_flags |= _FEOF;
-           return -1;
+            /* EOF */
+            f->f_flags |= _FEOF;
+            return EOF;
 
         default:
-           /* Char read */
-           return ((int) c) & 0xFF;
+            /* Char read */
+            return c;
 
     }
 }