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