• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "stdio_impl.h"
2 
__fseeko_unlocked(FILE * f,off_t off,int whence)3 int __fseeko_unlocked(FILE *f, off_t off, int whence)
4 {
5 	/* Adjust relative offset for unread data in buffer, if any. */
6 	if (whence == SEEK_CUR && f->rend) off -= f->rend - f->rpos;
7 
8 	/* Flush write buffer, and report error on failure. */
9 	if (f->wpos != f->wbase) {
10 		f->write(f, 0, 0);
11 		if (!f->wpos) return -1;
12 	}
13 
14 	/* Leave writing mode */
15 	f->wpos = f->wbase = f->wend = 0;
16 
17 	/* Perform the underlying seek. */
18 	if (lseek(f->fd, off, whence) < 0) return -1;
19 
20 	/* If seek succeeded, file is seekable and we discard read buffer. */
21 	f->rpos = f->rend = 0;
22 	f->flags &= ~F_EOF;
23 
24 	return 0;
25 }
26 
__fseeko(FILE * f,off_t off,int whence)27 int __fseeko(FILE *f, off_t off, int whence)
28 {
29 	int result;
30 	FLOCK(f);
31 	result = __fseeko_unlocked(f, off, whence);
32 	FUNLOCK(f);
33 	return result;
34 }
35 
fseek(FILE * f,long off,int whence)36 int fseek(FILE *f, long off, int whence)
37 {
38 	return __fseeko(f, off, whence);
39 }
40 
41 weak_alias(__fseeko, fseeko);
42