|
|
1.1 root 1: /* Copyright (c) 1979 Regents of the University of California */
2: #include <stdio.h>
3:
4: /*
5: * Seek for standard library. Coordinates with buffering.
6: */
7:
8: long fseek(iop, offset, ptrname)
9: register FILE *iop;
10: long offset;
11: {
12: register n, resync;
13:
14: if (iop->_flag&_IODIRT) {
15: fflush(iop);
16: return(lseek(fileno(iop), offset, ptrname));
17: }
18: if (iop->_flag&(_IOREAD|_IOWRT)) {
19: resync = 0;
20: if (ptrname==1) { /* relative */
21: n = iop->_cnt;
22: if (n<0)
23: n = 0;
24: } else {
25: n = offset&01;
26: resync = n;
27: }
28: n = lseek(fileno(iop), offset - n, ptrname);
29: iop->_cnt = 0;
30: iop->_ptr = iop->_base ;
31: iop->_delta = 0;
32: if (resync)
33: getc(iop);
34: return(n);
35: }
36: _error("fseek\n");
37: }
38:
39: /* The current character is always iop->_cnt characters behind the current
40: position in the file, except when a file is open and in use for pure writing
41: in which case it is _IODIRT(y), and will be correctly positioned by fflush */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.