Annotation of researchv10dc/libI77/notused/fseek.c, revision 1.1.1.1

1.1       root        1: /*     @(#)fseek.c     1.3     */
                      2: /*     3.0 SID #       1.2     */
                      3: /*LINTLIBRARY*/
                      4: /*
                      5:  * Seek for standard library.  Coordinates with buffering.
                      6:  */
                      7: #include <stdio.h>
                      8: 
                      9: extern long lseek();
                     10: extern int fflush();
                     11: 
                     12: int
                     13: fseek(iop, offset, ptrname)
                     14: register FILE *iop;
                     15: long   offset;
                     16: int    ptrname;
                     17: {
                     18:        register int c;
                     19:        long    p;
                     20: 
                     21:        iop->_flag &= ~_IOEOF;
                     22:        if(iop->_flag & _IOREAD) {
                     23:                if(ptrname < 2 && iop->_base && !(iop->_flag&_IONBF)) {
                     24:                        c = iop->_cnt;
                     25:                        p = offset;
                     26:                        if(ptrname == 0)
                     27:                                p += (long)c-lseek(fileno(iop), 0L, 1);
                     28:                        else
                     29:                                offset -= (long)c;
                     30:                        if(!(iop->_flag&_IORW) && c > 0 && p <= c &&
                     31:                                        p >= iop->_base - iop->_ptr) {
                     32:                                iop->_ptr += (int)p;
                     33:                                iop->_cnt -= (int)p;
                     34:                                return(0);
                     35:                        }
                     36:                }
                     37:                if(iop->_flag & _IORW) {
                     38:                        iop->_ptr = iop->_base;
                     39:                        iop->_flag &= ~_IOREAD;
                     40:                }
                     41:                p = lseek(fileno(iop), offset, ptrname);
                     42:                iop->_cnt = 0;
                     43:        } else if(iop->_flag & (_IOWRT | _IORW)) {
                     44:                (void) fflush(iop);
                     45:                iop->_cnt = 0;
                     46:                if(iop->_flag & _IORW) {
                     47:                        iop->_flag &= ~_IOWRT;
                     48:                        iop->_ptr = iop->_base;
                     49:                }
                     50:                p = lseek(fileno(iop), offset, ptrname);
                     51:        }
                     52:        return((p == -1)? -1: 0);
                     53: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.