]> 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 e9bb7d5a7f625f79a88997b57fdbf280f6f9d8a8..c873cd1d052692f5e0ba75b02ea65879eb3bfead 100644 (file)
@@ -8,43 +8,48 @@
 
 
 #include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
+#include <unistd.h>
 #include "_file.h"
 
 
 
 /*****************************************************************************/
-/*                                          Code                                    */
+/*                                   Code                                    */
 /*****************************************************************************/
 
 
 
-int fgetc (FILE* f)
+int __fastcall__ fgetc (register FILE* f)
 {
     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 EOF;
+        return EOF;
     }
 
-    /* Read the byte */
+    /* If we have a pushed back character, return it */
+    if (f->f_flags & _FPUSHBACK) {
+        f->f_flags &= ~_FPUSHBACK;
+        return f->f_pushback;
+    }
+
+    /* Read one byte */
     switch (read (f->f_fd, &c, 1)) {
 
         case -1:
-           /* Error */
-           f->f_flags |= _FERROR;
-           return EOF;
+            /* Error */
+            f->f_flags |= _FERROR;
+            return EOF;
 
         case 0:
-           /* EOF */
-           f->f_flags |= _FEOF;
-           return EOF;
+            /* EOF */
+            f->f_flags |= _FEOF;
+            return EOF;
 
         default:
-           /* Char read */
-           return c;
+            /* Char read */
+            return c;
 
     }
 }