1#include "stdio_impl.h" 2#include <limits.h> 3#include <errno.h> 4 5off_t __ftello_unlocked(FILE *f) 6{ 7 off_t pos = f->seek(f, 0, 8 (f->flags & F_APP) && f->wpos > f->wbase 9 ? SEEK_END : SEEK_CUR); 10 if (pos < 0) return pos; 11 12 /* Adjust for data in buffer. */ 13 return pos - (f->rend - f->rpos) + (f->wpos - f->wbase); 14} 15 16off_t __ftello(FILE *f) 17{ 18 off_t pos; 19 FLOCK(f); 20 pos = __ftello_unlocked(f); 21 FUNLOCK(f); 22 return pos; 23} 24 25long ftell(FILE *f) 26{ 27 off_t pos = __ftello(f); 28 if (pos > LONG_MAX) { 29 errno = EOVERFLOW; 30 return -1; 31 } 32 return pos; 33} 34 35weak_alias(__ftello, ftello); 36 37LFS64(ftello); 38