1 /*
2 * pANS stdio -- setvbuf
3 */
4 #include "iolib.h"
5 #include <stdlib.h>
setvbuf(FILE * f,char * buf,int mode,size_t size)6 int setvbuf(FILE *f, char *buf, int mode, size_t size){
7 if(f->state!=OPEN){
8 f->state=ERR;
9 return -1;
10 }
11 f->state=RDWR;
12 switch(mode){
13 case _IOLBF:
14 f->flags|=LINEBUF;
15 case _IOFBF:
16 if(buf==0){
17 buf=malloc(size);
18 if(buf==0){
19 f->state=ERR;
20 return -1;
21 }
22 f->flags|=BALLOC;
23 }
24 f->bufl=size;
25 break;
26 case _IONBF:
27 buf=f->unbuf;
28 f->bufl=0;
29 break;
30 }
31 f->rp=f->wp=f->lp=f->buf=buf;
32 f->state=RDWR;
33 return 0;
34 }
_IO_setvbuf(FILE * f)35 int _IO_setvbuf(FILE *f){
36 if(f==stderr || (f==stdout && isatty(1)))
37 return setvbuf(f, (char *)0, _IOLBF, BUFSIZ);
38 return setvbuf(f, (char *)0, _IOFBF, BUFSIZ);
39 }
40