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