| #include <u.h> |
| #include <libc.h> |
| #include <bio.h> |
| |
| #define openlog auxclog_openlog /* libc symbol on OS X */ |
| |
| char *argv0; |
| |
| int |
| openlog(char *name) |
| { |
| int fd; |
| |
| fd = open(name, OWRITE); |
| if(fd < 0) |
| fd = create(name, OWRITE, DMAPPEND|0666); |
| if(fd < 0){ |
| fprint(2, "%s: can't open %s: %r\n", argv0, name); |
| return -1; |
| } |
| seek(fd, 0, 2); |
| return fd; |
| } |
| |
| void |
| main(int argc, char **argv) |
| { |
| Biobuf in; |
| int fd; |
| char *p, *t; |
| char buf[8192]; |
| |
| argv0 = argv[0]; |
| if(argc != 3){ |
| fprint(2, "usage: %s console logfile \n", argv0); |
| exits("usage"); |
| } |
| |
| if(strcmp(argv[1], "-") == 0) |
| fd = 0; |
| else |
| fd = open(argv[1], OREAD); |
| if(fd < 0){ |
| fprint(2, "%s: can't open %s: %r\n", argv0, argv[1]); |
| exits("open"); |
| } |
| Binit(&in, fd, OREAD); |
| |
| fd = openlog(argv[2]); |
| |
| for(;;){ |
| if(p = Brdline(&in, '\n')){ |
| p[Blinelen(&in)-1] = 0; |
| t = ctime(time(0)); |
| t[19] = 0; |
| if(fprint(fd, "%s: %s\n", t, p) < 0){ |
| close(fd); |
| fd = openlog(argv[2]); |
| fprint(fd, "%s: %s\n", t, p); |
| } |
| } else if(Blinelen(&in) == 0) /* true eof */ |
| break; |
| else { |
| Bread(&in, buf, sizeof buf); |
| } |
| } |
| exits(0); |
| } |