13e12c5d1SDavid du Colombier /*
23e12c5d1SDavid du Colombier * pANS stdio -- setvbuf
33e12c5d1SDavid du Colombier */
43e12c5d1SDavid du Colombier #include "iolib.h"
53e12c5d1SDavid du Colombier #include <stdlib.h>
setvbuf(FILE * f,char * buf,int mode,size_t size)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 }
_IO_setvbuf(FILE * f)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