source:
EcnlProtoTool/trunk/musl-1.1.18/src/stdio/fseek.c
Last change on this file was 444, checked in by , 4 years ago | |
---|---|
|
|
File size: 883 bytes |
Line | |
---|---|
1 | #include "stdio_impl.h" |
2 | |
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) 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 (f->seek(f, 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 | |
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 | |
36 | int fseek(FILE *f, long off, int whence) |
37 | { |
38 | return __fseeko(f, off, whence); |
39 | } |
40 | |
41 | weak_alias(__fseeko, fseeko); |
42 | |
43 | LFS64(fseeko); |
Note:
See TracBrowser
for help on using the repository browser.