]> git.sur5r.net Git - cc65/blobdiff - libsrc/common/ftell.c
The spans do now contain the size of a span, no longer the end offset.
[cc65] / libsrc / common / ftell.c
index d345a74f4558d7e10eb50d4db18c14dcce869f55..9882cfc057a18cb87a2f7f8dc850701c24d979dd 100644 (file)
@@ -1,27 +1,46 @@
 /*
  * ftell.c
  *
- * Christian Groessler, 07-Aug-2000
+ * Christian Groessler, 2000-08-07
+ * Ullrich von Bassewitz, 2004-05-13
  */
 
 
+
 #include <stdio.h>
 #include <errno.h>
-#include <fcntl.h>
+#include <unistd.h>
 #include "_file.h"
 
 
-long ftell(FILE* f)
+
+/*****************************************************************************/
+/*                                          Code                                    */
+/*****************************************************************************/
+
+
+
+long __fastcall__ ftell (register FILE* f)
 {
     long pos;
 
     /* Is the file open? */
     if ((f->f_flags & _FOPEN) == 0) {
-        _errno = EINVAL;                /* File not open */
+        _seterrno (EINVAL);                /* File not open */
         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;
 }