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