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