1*3e12c5d1SDavid du Colombier /* 2*3e12c5d1SDavid du Colombier * pANS stdio -- _IO_getc 3*3e12c5d1SDavid du Colombier */ 4*3e12c5d1SDavid du Colombier #include "iolib.h" _IO_getc(FILE * f)5*3e12c5d1SDavid du Colombierint _IO_getc(FILE *f){ 6*3e12c5d1SDavid du Colombier int cnt; 7*3e12c5d1SDavid du Colombier switch(f->state){ 8*3e12c5d1SDavid du Colombier default: /* CLOSED, WR, ERR, EOF */ 9*3e12c5d1SDavid du Colombier return EOF; 10*3e12c5d1SDavid du Colombier case OPEN: 11*3e12c5d1SDavid du Colombier _IO_setvbuf(f); 12*3e12c5d1SDavid du Colombier case RDWR: 13*3e12c5d1SDavid du Colombier case RD: 14*3e12c5d1SDavid du Colombier if(f->flags&STRING) return EOF; 15*3e12c5d1SDavid du Colombier cnt=read(f->fd, f->buf, f->buf==f->unbuf?1:f->bufl); 16*3e12c5d1SDavid du Colombier switch(cnt){ 17*3e12c5d1SDavid du Colombier case -1: f->state=ERR; return EOF; 18*3e12c5d1SDavid du Colombier case 0: f->state=END; return EOF; 19*3e12c5d1SDavid du Colombier default: 20*3e12c5d1SDavid du Colombier f->state=RD; 21*3e12c5d1SDavid du Colombier f->rp=f->buf; 22*3e12c5d1SDavid du Colombier f->wp=f->buf+cnt; 23*3e12c5d1SDavid du Colombier return (*f->rp++)&_IO_CHMASK; 24*3e12c5d1SDavid du Colombier } 25*3e12c5d1SDavid du Colombier } 26*3e12c5d1SDavid du Colombier } 27