/* * ftell.c - obtain the value of the file-position indicator of a stream */ /* $Id$ */ #include #include #include #if ACKCONF_WANT_STDIO && ACKCONF_WANT_EMULATED_FILE long ftell(FILE* stream) { long result; int adjust = 0; if (io_testflag(stream, _IOREADING)) adjust = -stream->_count; else if (io_testflag(stream, _IOWRITING) && stream->_buf && !io_testflag(stream, _IONBF)) adjust = stream->_ptr - stream->_buf; else adjust = 0; result = lseek(fileno(stream), 0, SEEK_CUR); if (result == -1) return result; result += (long)adjust; return result; } #endif