1: #if defined(LIBC_SCCS) && !defined(lint)
   2: static char sccsid[] = "@(#)fseek.c	5.3 (Berkeley) 3/9/86";
   3: #endif LIBC_SCCS and not lint
   4: 
   5: /*
   6:  * Seek for standard library.  Coordinates with buffering.
   7:  */
   8: 
   9: #include    <stdio.h>
  10: 
  11: long lseek();
  12: 
  13: fseek(iop, offset, ptrname)
  14:     register FILE *iop;
  15:     long offset;
  16: {
  17:     register resync, c;
  18:     long p = -1;            /* can't happen? */
  19: 
  20:     iop->_flag &= ~_IOEOF;
  21:     if (iop->_flag&_IOREAD) {
  22:         if (ptrname<2 && iop->_base &&
  23:             !(iop->_flag&_IONBF)) {
  24:             c = iop->_cnt;
  25:             p = offset;
  26:             if (ptrname==0) {
  27:                 long curpos = lseek(fileno(iop), 0L, 1);
  28:                 if (curpos == -1)
  29:                     return (-1);
  30:                 p += c - curpos;
  31:             } else
  32:                 offset -= c;
  33:             if(!(iop->_flag&_IORW) && c>0&&p<=c
  34:                 && p>=iop->_base-iop->_ptr){
  35:                 iop->_ptr += (int)p;
  36:                 iop->_cnt -= (int)p;
  37:                 return(0);
  38:             }
  39:             resync = offset&01;
  40:         } else
  41:             resync = 0;
  42:         if (iop->_flag & _IORW) {
  43:             iop->_ptr = iop->_base;
  44:             iop->_flag &= ~_IOREAD;
  45:             resync = 0;
  46:         }
  47:         p = lseek(fileno(iop), offset-resync, ptrname);
  48:         iop->_cnt = 0;
  49:         if (resync && p != -1)
  50:             if (getc(iop) == EOF)
  51:                 p = -1;
  52:     }
  53:     else if (iop->_flag & (_IOWRT|_IORW)) {
  54:         p = fflush(iop);
  55:         if (iop->_flag & _IORW) {
  56:             iop->_cnt = 0;
  57:             iop->_flag &= ~_IOWRT;
  58:             iop->_ptr = iop->_base;
  59:         }
  60:         return(lseek(fileno(iop), offset, ptrname) == -1 || p == EOF ?
  61:             -1 : 0);
  62:     }
  63:     return(p==-1?-1:0);
  64: }

Defined functions

fseek defined in line 13; used 251 times

Defined variables

sccsid defined in line 2; never used
Last modified: 1986-03-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 358
Valid CSS Valid XHTML 1.0 Strict