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