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