]> git.sur5r.net Git - cc65/blobdiff - libsrc/common/fgetc.c
The spans do now contain the size of a span, no longer the end offset.
[cc65] / libsrc / common / fgetc.c
index 97e6dcb0bd772e83ba7d662214da30e4f10a48ca..7e6a4db9cac2a16e63663e7170deb6726eb076fe 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;
+           return EOF;
 
         case 0:
            /* EOF */
            f->f_flags |= _FEOF;
-           return -1;
+           return EOF;
 
         default:
            /* Char read */
-           return ((int) c) & 0xFF;
+           return c;
 
     }
 }