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_fixcpp/sys/src/cmd/tee.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
 * tee-- pipe fitting
3
 */
4
 
5
#include <u.h>
6
#include <libc.h>
7
 
8
int	uflag;
9
int	aflag;
10
int	*openf;
11
 
12
char in[8192];
13
 
14
int	intignore(void*, char*);
15
 
16
void
17
main(int argc, char **argv)
18
{
19
	int i;
20
	int r, n;
21
 
22
	ARGBEGIN {
23
	case 'a':
24
		aflag++;
25
		break;
26
 
27
	case 'i':
28
		atnotify(intignore, 1);
29
		break;
30
 
31
	case 'u':
32
		uflag++;
33
		/* uflag is ignored and undocumented; it's a relic from Unix */
34
		break;
35
 
36
	default:
37
		fprint(2, "usage: tee [-ai] [file ...]\n");
38
		exits("usage");
39
	} ARGEND
40
 
41
	openf = malloc((1+argc)*sizeof(int));
42
	if(openf == nil)
43
		sysfatal("out of memory: %r");
44
 
45
	n = 0;
46
	while(*argv) {
47
		if(aflag) {
48
			openf[n] = open(argv[0], OWRITE);
49
			if(openf[n] < 0)
50
				openf[n] = create(argv[0], OWRITE, 0666);
51
			seek(openf[n], 0L, 2);
52
		} else
53
			openf[n] = create(argv[0], OWRITE, 0666);
54
		if(openf[n] < 0) {
55
			fprint(2, "tee: cannot open %s: %r\n", argv[0]);
56
		} else
57
			n++;
58
		argv++;
59
	}
60
	openf[n++] = 1;
61
 
62
	for(;;) {
63
		r = read(0, in, sizeof in);
64
		if(r <= 0)
65
			exits(nil);
66
		for(i=0; i<n; i++)
67
			write(openf[i], in, r);
68
	}
69
}
70
 
71
int
72
intignore(void *a, char *msg)
73
{
74
	USED(a);
75
	if(strcmp(msg, "interrupt") == 0)
76
		return 1;
77
	return 0;
78
}