fseeko.c 414 B

123456789101112131415161718192021222324
  1. /*
  2. * pANS stdio -- fseeko
  3. */
  4. #include "iolib.h"
  5. int fseeko(FILE *f, off_t offs, int type){
  6. switch(f->state){
  7. case ERR:
  8. case CLOSED:
  9. return -1;
  10. case WR:
  11. fflush(f);
  12. break;
  13. case RD:
  14. if(type==1 && f->buf!=f->unbuf)
  15. offs-=f->wp-f->rp;
  16. break;
  17. }
  18. if(f->flags&STRING || lseek(f->fd, offs, type)==-1)
  19. return -1;
  20. if(f->state==RD) f->rp=f->wp=f->buf;
  21. if(f->state!=OPEN)
  22. f->state=RDWR;
  23. return 0;
  24. }