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 fd = open(argv[1], OREAD);
38 if(fd < 0){
39 fprint(2, "%s: can't open %s: %r\n", argv0, argv[1]);
40 exits("open");
41 }
42 Binit(&in, fd, OREAD);
44 fd = openlog(argv[2]);
46 for(;;){
47 if(p = Brdline(&in, '\n')){
48 p[Blinelen(&in)-1] = 0;
49 t = ctime(time(0));
50 t[19] = 0;
51 if(fprint(fd, "%s: %s\n", t, p) < 0){
52 close(fd);
53 fd = openlog(argv[2]);
54 fprint(fd, "%s: %s\n", t, p);
55 }
56 } else if(Blinelen(&in) == 0) // true eof
57 break;
58 else {
59 Bread(&in, buf, sizeof buf);
60 }
61 }
62 exits(0);
63 }