Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/*
2
 * pANS stdio -- fflush
3
 */
4
#include "iolib.h"
5
/*
6
 * pANS stdio -- data (put here, since loader won't load a separate file)
7
 */
8
FILE _IO_stream[]={
9
/*	fd	flags	state	buf	rp	wp	lp	bufl	unbuf */
10
	0,	0,	OPEN,	0,	0,	0,	0,	0,	0,
11
	1,	0,	OPEN,	0,	0,	0,	0,	0,	0,
12
	2,	0,	OPEN,	0,	0,	0,	0,	0,	0,
13
};
14
 
15
int _fflush(FILE *f){
16
	int error, cnt;
17
 
18
	if(f==NULL){
19
		error=0;
20
		for(f=_IO_stream;f!=&_IO_stream[FOPEN_MAX];f++)
21
			if(f->state==WR && _fflush(f)==EOF)
22
				error=EOF;
23
		return error;
24
	}
25
	if(f->flags&STRING) return EOF;
26
	switch(f->state){
27
	default:	/* OPEN RDWR EOF RD */
28
		return 0;
29
	case CLOSED:
30
	case ERR:
31
		return EOF;
32
	case WR:
33
		cnt=(f->flags&LINEBUF?f->lp:f->wp)-f->buf;
34
		if(cnt && write(f->fd, f->buf, cnt)!=cnt){
35
			f->state=ERR;
36
			return EOF;
37
		}
38
		f->rp=f->wp=f->buf;
39
		f->state=RDWR;
40
		return 0;
41
	}
42
}
43
 
44
int fflush(FILE *f)
45
{
46
	int r;
47
 
48
	qlock(&_stdiolk);
49
	r = _fflush(f);
50
	qunlock(&_stdiolk);
51
	return r;
52
}