13e12c5d1SDavid du Colombier /* 23e12c5d1SDavid du Colombier * pANS stdio -- setvbuf 33e12c5d1SDavid du Colombier */ 43e12c5d1SDavid du Colombier #include "iolib.h" 53e12c5d1SDavid du Colombier #include <stdlib.h> 63e12c5d1SDavid du Colombier int setvbuf(FILE *f, char *buf, int mode, size_t size){ 73e12c5d1SDavid du Colombier if(f->state!=OPEN){ 83e12c5d1SDavid du Colombier f->state=ERR; 93e12c5d1SDavid du Colombier return -1; 103e12c5d1SDavid du Colombier } 113e12c5d1SDavid du Colombier f->state=RDWR; 123e12c5d1SDavid du Colombier switch(mode){ 133e12c5d1SDavid du Colombier case _IOLBF: 143e12c5d1SDavid du Colombier f->flags|=LINEBUF; 153e12c5d1SDavid du Colombier case _IOFBF: 163e12c5d1SDavid du Colombier if(buf==0){ 173e12c5d1SDavid du Colombier buf=malloc(size); 183e12c5d1SDavid du Colombier if(buf==0){ 193e12c5d1SDavid du Colombier f->state=ERR; 203e12c5d1SDavid du Colombier return -1; 213e12c5d1SDavid du Colombier } 223e12c5d1SDavid du Colombier f->flags|=BALLOC; 233e12c5d1SDavid du Colombier } 243e12c5d1SDavid du Colombier f->bufl=size; 253e12c5d1SDavid du Colombier break; 263e12c5d1SDavid du Colombier case _IONBF: 273e12c5d1SDavid du Colombier buf=f->unbuf; 283e12c5d1SDavid du Colombier f->bufl=0; 293e12c5d1SDavid du Colombier break; 303e12c5d1SDavid du Colombier } 313e12c5d1SDavid du Colombier f->rp=f->wp=f->lp=f->buf=buf; 323e12c5d1SDavid du Colombier f->state=RDWR; 333e12c5d1SDavid du Colombier return 0; 343e12c5d1SDavid du Colombier } 353e12c5d1SDavid du Colombier int _IO_setvbuf(FILE *f){ 363e12c5d1SDavid du Colombier if(f==stderr || (f==stdout && isatty(1))) 37*4b348146SDavid du Colombier return setvbuf(f, (char *)0, _IOLBF, BUFSIZ); 38*4b348146SDavid du Colombier return setvbuf(f, (char *)0, _IOFBF, BUFSIZ); 393e12c5d1SDavid du Colombier } 40