]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libstdio/ungetc.c
devip: add "reflect" ctl message, fix memory leaks in icmpv6, fix source address...
[plan9front.git] / sys / src / libstdio / ungetc.c
1 /*
2  * pANS stdio -- ungetc
3  */
4 #include "iolib.h"
5 int 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->rp=f->wp=f->buf+(f->bufl==0?1:f->bufl);
19                 f->state=RD;
20         case RD:
21                 if(f->rp==f->buf) return EOF;
22                 if(f->flags&STRING)
23                         f->rp--;
24                 else
25                         *--f->rp=c;
26                 return (char)c;
27         }
28 }