13e12c5d1SDavid du Colombier /* 23e12c5d1SDavid du Colombier * pANS stdio -- fseek 33e12c5d1SDavid du Colombier */ 43e12c5d1SDavid du Colombier #include "iolib.h" fseek(FILE * f,long offs,int type)5*d9dc5dd1SDavid du Colombierint fseek(FILE *f, long offs, int type){ 63e12c5d1SDavid du Colombier switch(f->state){ 73e12c5d1SDavid du Colombier case ERR: 83e12c5d1SDavid du Colombier case CLOSED: 93e12c5d1SDavid du Colombier return -1; 103e12c5d1SDavid du Colombier case WR: 113e12c5d1SDavid du Colombier fflush(f); 123e12c5d1SDavid du Colombier break; 133e12c5d1SDavid du Colombier case RD: 143e12c5d1SDavid du Colombier if(type==1 && f->buf!=f->unbuf) 153e12c5d1SDavid du Colombier offs-=f->wp-f->rp; 163e12c5d1SDavid du Colombier break; 173e12c5d1SDavid du Colombier } 183e12c5d1SDavid du Colombier if(f->flags&STRING || lseek(f->fd, offs, type)==-1) 193e12c5d1SDavid du Colombier return -1; 203e12c5d1SDavid du Colombier if(f->state==RD) f->rp=f->wp=f->buf; 213e12c5d1SDavid du Colombier if(f->state!=OPEN) 223e12c5d1SDavid du Colombier f->state=RDWR; 233e12c5d1SDavid du Colombier return 0; 243e12c5d1SDavid du Colombier } 25