13e12c5d1SDavid du Colombier /*
23e12c5d1SDavid du Colombier * pANS stdio -- fflush
33e12c5d1SDavid du Colombier */
43e12c5d1SDavid du Colombier #include "iolib.h"
53e12c5d1SDavid du Colombier /*
63e12c5d1SDavid du Colombier * pANS stdio -- data (put here, since loader won't load a separate file)
73e12c5d1SDavid du Colombier */
83e12c5d1SDavid du Colombier FILE _IO_stream[]={
93e12c5d1SDavid du Colombier /* fd flags state buf rp wp lp bufl unbuf */
103e12c5d1SDavid du Colombier 0, 0, OPEN, 0, 0, 0, 0, 0, 0,
113e12c5d1SDavid du Colombier 1, 0, OPEN, 0, 0, 0, 0, 0, 0,
123e12c5d1SDavid du Colombier 2, 0, OPEN, 0, 0, 0, 0, 0, 0,
133e12c5d1SDavid du Colombier };
14*7dd7cddfSDavid du Colombier
_fflush(FILE * f)15*7dd7cddfSDavid du Colombier int _fflush(FILE *f){
163e12c5d1SDavid du Colombier int error, cnt;
17*7dd7cddfSDavid du Colombier
183e12c5d1SDavid du Colombier if(f==NULL){
193e12c5d1SDavid du Colombier error=0;
203e12c5d1SDavid du Colombier for(f=_IO_stream;f!=&_IO_stream[FOPEN_MAX];f++)
21*7dd7cddfSDavid du Colombier if(f->state==WR && _fflush(f)==EOF)
223e12c5d1SDavid du Colombier error=EOF;
233e12c5d1SDavid du Colombier return error;
243e12c5d1SDavid du Colombier }
253e12c5d1SDavid du Colombier if(f->flags&STRING) return EOF;
263e12c5d1SDavid du Colombier switch(f->state){
273e12c5d1SDavid du Colombier default: /* OPEN RDWR EOF RD */
283e12c5d1SDavid du Colombier return 0;
293e12c5d1SDavid du Colombier case CLOSED:
303e12c5d1SDavid du Colombier case ERR:
313e12c5d1SDavid du Colombier return EOF;
323e12c5d1SDavid du Colombier case WR:
333e12c5d1SDavid du Colombier cnt=(f->flags&LINEBUF?f->lp:f->wp)-f->buf;
343e12c5d1SDavid du Colombier if(cnt && write(f->fd, f->buf, cnt)!=cnt){
353e12c5d1SDavid du Colombier f->state=ERR;
363e12c5d1SDavid du Colombier return EOF;
373e12c5d1SDavid du Colombier }
383e12c5d1SDavid du Colombier f->rp=f->wp=f->buf;
393e12c5d1SDavid du Colombier f->state=RDWR;
403e12c5d1SDavid du Colombier return 0;
413e12c5d1SDavid du Colombier }
423e12c5d1SDavid du Colombier }
43*7dd7cddfSDavid du Colombier
fflush(FILE * f)44*7dd7cddfSDavid du Colombier int fflush(FILE *f)
45*7dd7cddfSDavid du Colombier {
46*7dd7cddfSDavid du Colombier int r;
47*7dd7cddfSDavid du Colombier
48*7dd7cddfSDavid du Colombier qlock(&_stdiolk);
49*7dd7cddfSDavid du Colombier r = _fflush(f);
50*7dd7cddfSDavid du Colombier qunlock(&_stdiolk);
51*7dd7cddfSDavid du Colombier return r;
52*7dd7cddfSDavid du Colombier }
53