1 #include "stdio_impl.h"
3 int __fseeko_unlocked(FILE *f
, off_t off
, int whence
)
5 /* Adjust relative offset for unread data in buffer, if any. */
6 if (whence
== SEEK_CUR
&& f
->rend
) off
-= f
->rend
- f
->rpos
;
8 /* Flush write buffer, and report error on failure. */
9 if (f
->wpos
!= f
->wbase
) {
11 if (!f
->wpos
) return -1;
14 /* Leave writing mode */
15 f
->wpos
= f
->wbase
= f
->wend
= 0;
17 /* Perform the underlying seek. */
18 if (f
->seek(f
, off
, whence
) < 0) return -1;
20 /* If seek succeeded, file is seekable and we discard read buffer. */
21 f
->rpos
= f
->rend
= 0;
27 int __fseeko(FILE *f
, off_t off
, int whence
)
31 result
= __fseeko_unlocked(f
, off
, whence
);
36 int fseek(FILE *f
, long off
, int whence
)
38 return __fseeko(f
, off
, whence
);
41 weak_alias(__fseeko
, fseeko
);
43 weak_alias(fseeko
, fseeko64
);