13e12c5d1SDavid du Colombier /* 23e12c5d1SDavid du Colombier * pANS stdio -- ungetc 33e12c5d1SDavid du Colombier */ 43e12c5d1SDavid du Colombier #include "iolib.h" ungetc(int c,FILE * f)53e12c5d1SDavid du Colombierint ungetc(int c, FILE *f){ 63e12c5d1SDavid du Colombier if(c==EOF) return EOF; 73e12c5d1SDavid du Colombier switch(f->state){ 83e12c5d1SDavid du Colombier default: /* WR */ 93e12c5d1SDavid du Colombier f->state=ERR; 103e12c5d1SDavid du Colombier return EOF; 113e12c5d1SDavid du Colombier case CLOSED: 123e12c5d1SDavid du Colombier case ERR: 133e12c5d1SDavid du Colombier return EOF; 143e12c5d1SDavid du Colombier case OPEN: 153e12c5d1SDavid du Colombier _IO_setvbuf(f); 163e12c5d1SDavid du Colombier case RDWR: 173e12c5d1SDavid du Colombier case END: 18*d9306527SDavid du Colombier f->wp=f->buf; 19*d9306527SDavid du Colombier if(f->bufl==0) 20*d9306527SDavid du Colombier f->wp += 1; 21*d9306527SDavid du Colombier else 22*d9306527SDavid du Colombier f->wp += f->bufl; 23*d9306527SDavid du Colombier f->rp = f->wp; 243e12c5d1SDavid du Colombier f->state=RD; 253e12c5d1SDavid du Colombier case RD: 263e12c5d1SDavid du Colombier if(f->rp==f->buf) return EOF; 273e12c5d1SDavid du Colombier if(f->flags&STRING) 283e12c5d1SDavid du Colombier f->rp--; 293e12c5d1SDavid du Colombier else 303e12c5d1SDavid du Colombier *--f->rp=c; 313e12c5d1SDavid du Colombier return (char)c; 323e12c5d1SDavid du Colombier } 333e12c5d1SDavid du Colombier } 34