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