]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libstdio/_IO_getc.c
libsec: use tsmemcmp() when comparing hashes, use mpfield() for ecc, use mptober...
[plan9front.git] / sys / src / libstdio / _IO_getc.c
1 /*
2  * pANS stdio -- _IO_getc
3  */
4 #include "iolib.h"
5 int _IO_getc(FILE *f){
6         int cnt;
7         switch(f->state){
8         default:        /* CLOSED, WR, ERR, EOF */
9                 return EOF;
10         case OPEN:
11                 _IO_setvbuf(f);
12         case RDWR:
13         case RD:
14                 if(f->flags&STRING) return EOF;
15                 cnt=read(f->fd, f->buf, f->buf==f->unbuf?1:f->bufl);
16                 switch(cnt){
17                 case -1: f->state=ERR; return EOF;
18                 case 0: f->state=END; return EOF;
19                 default:
20                         f->state=RD;
21                         f->rp=f->buf;
22                         f->wp=f->buf+cnt;
23                         return (*f->rp++)&_IO_CHMASK;
24                 }
25         }
26 }