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