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*22df390cSDavid du Colombier f->rp=f->wp=f->buf+(f->bufl==0?1:f->bufl); 193e12c5d1SDavid du Colombier f->state=RD; 203e12c5d1SDavid du Colombier case RD: 213e12c5d1SDavid du Colombier if(f->rp==f->buf) return EOF; 223e12c5d1SDavid du Colombier if(f->flags&STRING) 233e12c5d1SDavid du Colombier f->rp--; 243e12c5d1SDavid du Colombier else 253e12c5d1SDavid du Colombier *--f->rp=c; 263e12c5d1SDavid du Colombier return (char)c; 273e12c5d1SDavid du Colombier } 283e12c5d1SDavid du Colombier } 29