Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
  2. #include <libc/stubs.h>
  3. #include <stdio.h>
  4. #include <unistd.h>
  5. #include <libc/file.h>
  6. #include <fcntl.h>
  7. #include <libc/dosio.h>
  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. }
  41.