Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4973 | right-hear | 1 | /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ |
2 | #include |
||
3 | #include |
||
4 | #include |
||
5 | #include |
||
6 | #include |
||
7 | #include |
||
8 | |||
9 | int |
||
10 | fseek(FILE *f, long offset, int ptrname) |
||
11 | { |
||
12 | long p = -1; /* can't happen? */ |
||
13 | if(f && f->std_ops && STM_OP(f,seek)) |
||
14 | return STM_OP(f,seek)(f,offset,ptrname); |
||
15 | f->_flag &= ~_IOEOF; |
||
16 | if (f->_flag & _IOREAD) |
||
17 | { |
||
18 | if ((ptrname == SEEK_CUR) && f->_base && !(f->_flag & _IONBF)) |
||
19 | { |
||
20 | offset += ftell(f); |
||
21 | ptrname = SEEK_SET; |
||
22 | } |
||
23 | |||
24 | if (f->_flag & _IORW) |
||
25 | { |
||
26 | f->_ptr = f->_base; |
||
27 | f->_flag &= ~_IOREAD; |
||
28 | } |
||
29 | p = lseek(fileno(f), offset, ptrname); |
||
30 | f->_cnt = 0; |
||
31 | f->_ptr = f->_base; |
||
32 | } |
||
33 | else if (f->_flag & (_IOWRT|_IORW)) |
||
34 | { |
||
35 | p = fflush(f); |
||
36 | return lseek(fileno(f), offset, ptrname) == -1 || p == EOF ? |
||
37 | -1 : 0; |
||
38 | } |
||
39 | return p==-1 ? -1 : 0; |
||
40 | } |