1 /* 2 * pANS stdio -- setvbuf 3 */ 4 #include "iolib.h" 5 #include <stdlib.h> 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 } 35 int _IO_setvbuf(FILE *f){ 36 if(f==stderr || (f==stdout && isatty(1))) 37 setvbuf(f, (char *)0, _IOLBF, BUFSIZ); 38 else setvbuf(f, (char *)0, _IOFBF, BUFSIZ); 39 } 40