xref: /plan9/sys/lib/dist/cmd/clog.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*9a747e4fSDavid du Colombier #include <u.h>
2*9a747e4fSDavid du Colombier #include <libc.h>
3*9a747e4fSDavid du Colombier #include <bio.h>
4*9a747e4fSDavid du Colombier 
5*9a747e4fSDavid du Colombier char *argv0;
6*9a747e4fSDavid du Colombier 
7*9a747e4fSDavid du Colombier int
openlog(char * name)8*9a747e4fSDavid du Colombier openlog(char *name)
9*9a747e4fSDavid du Colombier {
10*9a747e4fSDavid du Colombier 	int fd;
11*9a747e4fSDavid du Colombier 
12*9a747e4fSDavid du Colombier 	fd = open(name, OWRITE);
13*9a747e4fSDavid du Colombier 	if(fd < 0){
14*9a747e4fSDavid du Colombier 		fprint(2, "%s: can't open %s: %r\n", argv0, name);
15*9a747e4fSDavid du Colombier 		return -1;
16*9a747e4fSDavid du Colombier 	}
17*9a747e4fSDavid du Colombier 	seek(fd, 0, 2);
18*9a747e4fSDavid du Colombier 	return fd;
19*9a747e4fSDavid du Colombier }
20*9a747e4fSDavid du Colombier 
21*9a747e4fSDavid du Colombier void
main(int argc,char ** argv)22*9a747e4fSDavid du Colombier main(int argc, char **argv)
23*9a747e4fSDavid du Colombier {
24*9a747e4fSDavid du Colombier 	Biobuf in;
25*9a747e4fSDavid du Colombier 	int fd;
26*9a747e4fSDavid du Colombier 	char *p, *t;
27*9a747e4fSDavid du Colombier 	char buf[8192];
28*9a747e4fSDavid du Colombier 
29*9a747e4fSDavid du Colombier 	argv0 = argv[0];
30*9a747e4fSDavid du Colombier 	if(argc != 4){
31*9a747e4fSDavid du Colombier 		fprint(2, "usage: %s console logfile prefix\n", argv0);
32*9a747e4fSDavid du Colombier 		exits("usage");
33*9a747e4fSDavid du Colombier 	}
34*9a747e4fSDavid du Colombier 
35*9a747e4fSDavid du Colombier 	fd = open(argv[1], OREAD);
36*9a747e4fSDavid du Colombier 	if(fd < 0){
37*9a747e4fSDavid du Colombier 		fprint(2, "%s: can't open %s: %r\n", argv0, argv[1]);
38*9a747e4fSDavid du Colombier 		exits("open");
39*9a747e4fSDavid du Colombier 	}
40*9a747e4fSDavid du Colombier 	Binit(&in, fd, OREAD);
41*9a747e4fSDavid du Colombier 
42*9a747e4fSDavid du Colombier 	fd = openlog(argv[2]);
43*9a747e4fSDavid du Colombier 
44*9a747e4fSDavid du Colombier 	for(;;){
45*9a747e4fSDavid du Colombier 		if(p = Brdline(&in, '\n')){
46*9a747e4fSDavid du Colombier 			p[Blinelen(&in)-1] = 0;
47*9a747e4fSDavid du Colombier 			if(fprint(fd, "%s: %s\n", argv[3], p) < 0){
48*9a747e4fSDavid du Colombier 				close(fd);
49*9a747e4fSDavid du Colombier 				fd = openlog(argv[2]);
50*9a747e4fSDavid du Colombier 				fprint(fd, "%s: %s\n", t, p);
51*9a747e4fSDavid du Colombier 			}
52*9a747e4fSDavid du Colombier 		} else if(Blinelen(&in) == 0)	// true eof
53*9a747e4fSDavid du Colombier 			break;
54*9a747e4fSDavid du Colombier 		else {
55*9a747e4fSDavid du Colombier 			Bread(&in, buf, sizeof buf);
56*9a747e4fSDavid du Colombier 		}
57*9a747e4fSDavid du Colombier 	}
58*9a747e4fSDavid du Colombier 	exits(0);
59*9a747e4fSDavid du Colombier }
60