| Index: fusl/src/stdio/ftell.c
|
| diff --git a/fusl/src/stdio/ftell.c b/fusl/src/stdio/ftell.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bb62897a4c7cc710295fd62aae8bb727b116a4d5
|
| --- /dev/null
|
| +++ b/fusl/src/stdio/ftell.c
|
| @@ -0,0 +1,37 @@
|
| +#include "stdio_impl.h"
|
| +#include <limits.h>
|
| +#include <errno.h>
|
| +
|
| +off_t __ftello_unlocked(FILE *f)
|
| +{
|
| + off_t pos = f->seek(f, 0,
|
| + (f->flags & F_APP) && f->wpos > f->wbase
|
| + ? SEEK_END : SEEK_CUR);
|
| + if (pos < 0) return pos;
|
| +
|
| + /* Adjust for data in buffer. */
|
| + return pos - (f->rend - f->rpos) + (f->wpos - f->wbase);
|
| +}
|
| +
|
| +off_t __ftello(FILE *f)
|
| +{
|
| + off_t pos;
|
| + FLOCK(f);
|
| + pos = __ftello_unlocked(f);
|
| + FUNLOCK(f);
|
| + return pos;
|
| +}
|
| +
|
| +long ftell(FILE *f)
|
| +{
|
| + off_t pos = __ftello(f);
|
| + if (pos > LONG_MAX) {
|
| + errno = EOVERFLOW;
|
| + return -1;
|
| + }
|
| + return pos;
|
| +}
|
| +
|
| +weak_alias(__ftello, ftello);
|
| +
|
| +LFS64(ftello);
|
|
|