Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
5 char *argv0;
7 int
8 openlog(char *name)
9 {
10 int fd;
12 fd = open(name, OWRITE);
13 if(fd < 0)
14 fd = create(name, OWRITE, DMAPPEND|0666);
15 if(fd < 0){
16 fprint(2, "%s: can't open %s: %r\n", argv0, name);
17 return -1;
18 }
19 seek(fd, 0, 2);
20 return fd;
21 }
23 void
24 main(int argc, char **argv)
25 {
26 Biobuf in;
27 int fd;
28 char *p, *t;
29 char buf[8192];
31 argv0 = argv[0];
32 if(argc != 3){
33 fprint(2, "usage: %s console logfile \n", argv0);
34 exits("usage");
35 }
37 if(strcmp(argv[1], "-") == 0)
38 fd = 1;
39 else
40 fd = open(argv[1], OREAD);
41 if(fd < 0){
42 fprint(2, "%s: can't open %s: %r\n", argv0, argv[1]);
43 exits("open");
44 }
45 Binit(&in, fd, OREAD);
47 fd = openlog(argv[2]);
49 for(;;){
50 if(p = Brdline(&in, '\n')){
51 p[Blinelen(&in)-1] = 0;
52 t = ctime(time(0));
53 t[19] = 0;
54 if(fprint(fd, "%s: %s\n", t, p) < 0){
55 close(fd);
56 fd = openlog(argv[2]);
57 fprint(fd, "%s: %s\n", t, p);
58 }
59 } else if(Blinelen(&in) == 0) // true eof
60 break;
61 else {
62 Bread(&in, buf, sizeof buf);
63 }
64 }
65 exits(0);
66 }