ref: 3c6c5a02710e4d7a3da6121e9bfb8d2bc0d786dd
dir: /src/libc/stdio/ftell.c/
#include <stdio.h> #include "../syscall.h" #undef ftell long ftell(FILE *fp) { long off; unsigned char *p; if (fp->flags & _IOERR) return EOF; if ((off = _lseek(fp->fd, 0, SEEK_CUR)) < 0) { fp->flags |= _IOERR; return EOF; } if (fp->flags & _IOREAD) return off - (fp->wp - fp->rp); if (fp->flags & _IOWRITE) { p = (fp->flags & _IOLBF) ? fp->lp : fp->wp; return off + (p - fp->buf); } return off; }