Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_unix/sys/src/libstdio/setvbuf.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/*
2
 * pANS stdio -- setvbuf
3
 */
4
#include "iolib.h"
5
int setvbuf(FILE *f, char *buf, int mode, long size){
6
	if(f->state!=OPEN){
7
		f->state=ERR;
8
		return -1;
9
	}
10
	f->state=RDWR;
11
	switch(mode){
12
	case _IOLBF:
13
		f->flags|=LINEBUF;
14
	case _IOFBF:
15
		if(buf==0){
16
			buf=malloc(size);
17
			if(buf==0){
18
				f->state=ERR;
19
				return -1;
20
			}
21
			f->flags|=BALLOC;
22
		}
23
		f->bufl=size;
24
		break;
25
	case _IONBF:
26
		buf=f->unbuf;
27
		f->bufl=0;
28
		break;
29
	}
30
	f->rp=f->wp=f->lp=f->buf=buf;
31
	f->state=RDWR;
32
	return 0;
33
}
34
int _IO_setvbuf(FILE *f){
35
	static int isatty(int);
36
	if(f==stderr || (f==stdout && isatty(1)))
37
		return setvbuf(f, (char *)0, _IOLBF, BUFSIZ);
38
	else return setvbuf(f, (char *)0, _IOFBF, BUFSIZ);
39
}
40
static int
41
isatty(int fd)
42
{
43
	char buf[64];
44
 
45
	if(fd2path(fd, buf, sizeof buf) != 0)
46
		return 0;
47
 
48
	/* might be /mnt/term/dev/cons */
49
	return strlen(buf) >= 9 && strcmp(buf+strlen(buf)-9, "/dev/cons") == 0;
50
}