xref: /plan9/sys/src/ape/lib/ap/stdio/fseeko.c (revision d9dc5dd1222af33cc62eadd05bf208e8fc0098de)
1 /*
2  * pANS stdio -- fseeko
3  */
4 #include "iolib.h"
fseeko(FILE * f,off_t offs,int type)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 }
25