#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); | |
} |