fseek.c 412 B

1234567891011121314151617181920212223
  1. /*
  2. * pANS stdio -- fseek
  3. */
  4. #include "iolib.h"
  5. int fseek(FILE *f, long int 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 || seek(f->fd, offs, type)==-1) return -1;
  19. if(f->state==RD) f->rp=f->wp=f->buf;
  20. if(f->state!=OPEN)
  21. f->state=RDWR;
  22. return 0;
  23. }