]> git.sur5r.net Git - cc65/commitdiff
Add support for ungetc, fix non standard compliant behaviour
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 13 May 2004 21:54:01 +0000 (21:54 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 13 May 2004 21:54:01 +0000 (21:54 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3037 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/ftell.c

index 5af340929aec672e19e0f07eba0a5fb9cfad9429..4e4746e03fc1495b6ff315f388ff82a3848a8225 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * ftell.c
  *
- * Christian Groessler, 07-Aug-2000
+ * Christian Groessler, 2000-08-07
+ * Ullrich von Bassewitz, 2004-05-13
  */
 
 
@@ -19,7 +20,7 @@
 
 
 
-long __fastcall__ ftell (FILE* f)
+long __fastcall__ ftell (register FILE* f)
 {
     long pos;
 
@@ -29,7 +30,17 @@ long __fastcall__ ftell (FILE* f)
         return -1L;
     }
 
-    pos = lseek(f->f_fd, 0L, SEEK_CUR);
-    return pos;    /* -1 for error, comes from lseek() */
+    /* Call the low level function */
+    pos = lseek (f->f_fd, 0L, SEEK_CUR);
+
+    /* If we didn't have an error, correct the return value in case we have
+     * a pushed back character.
+     */
+    if (pos > 0 && (f->f_flags & _FPUSHBACK)) {
+        --pos;
+    }
+
+    /* -1 for error, comes from lseek() */
+    return pos;
 }