# HG changeset patch # User Michael Spacefalcon # Date 1383434142 0 # Node ID e0d56e9be8a2f3dac6d8ba5f744ab8ae028a0cce # Parent 56b53c289785726614d92bbedc0eeeeb5c2cc703 rvtdump: time-stamped logging implemented diff -r 56b53c289785 -r e0d56e9be8a2 rvinterf/Makefile --- a/rvinterf/Makefile Sat Nov 02 22:24:14 2013 +0000 +++ b/rvinterf/Makefile Sat Nov 02 23:15:42 2013 +0000 @@ -3,7 +3,7 @@ PROGS= rvtdump INSTBIN=/usr/local/bin -RVTDUMP_OBJS= openport.o packetrx.o rvtdump.o trdump.o +RVTDUMP_OBJS= log.o openport.o packetrx.o rvtdump.o trdump.o all: ${PROGS} diff -r 56b53c289785 -r e0d56e9be8a2 rvinterf/log.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/log.c Sat Nov 02 23:15:42 2013 +0000 @@ -0,0 +1,33 @@ +/* + * This module implements the logging function + */ + +#include +#include +#include +#include +#include +#include +#include + +extern char pr_item[]; + +extern FILE *logF; +extern time_t logtime; + +static struct tm last_tm; + +log_item() +{ + struct tm *curtm; + + curtm = gmtime(&logtime); + if (curtm->tm_year != last_tm.tm_year || + curtm->tm_mon != last_tm.tm_mon || + curtm->tm_mday != last_tm.tm_mday) + fprintf(logF, "%d-%02d-%02d (gmtime):\n", curtm->tm_year + 1900, + curtm->tm_mon+1, curtm->tm_mday); + fprintf(logF, "[%02d:%02d:%02d] %s\n", curtm->tm_hour, curtm->tm_min, + curtm->tm_sec, pr_item); + bcopy(curtm, &last_tm, sizeof(struct tm)); +} diff -r 56b53c289785 -r e0d56e9be8a2 rvinterf/rvtdump.c --- a/rvinterf/rvtdump.c Sat Nov 02 22:24:14 2013 +0000 +++ b/rvinterf/rvtdump.c Sat Nov 02 23:15:42 2013 +0000 @@ -8,12 +8,17 @@ #include #include #include +#include extern int target_fd; extern char *baudrate_name; extern char pr_item[]; +char *logfname; +FILE *logF; +time_t logtime; + main(argc, argv) char **argv; { @@ -22,7 +27,7 @@ int c; fd_set fds; - while ((c = getopt(argc, argv, "b:d:")) != EOF) + while ((c = getopt(argc, argv, "b:d:l:")) != EOF) switch (c) { case 'b': baudrate_name = optarg; @@ -30,6 +35,9 @@ case 'd': target_fd = atoi(optarg); continue; + case 'l': + logfname = optarg; + continue; case '?': default: usage: fprintf(stderr, @@ -44,10 +52,20 @@ set_serial_nonblock(0); setlinebuf(stdout); + if (logfname) { + logF = fopen(logfname, "w"); + if (!logF) { + perror(logfname); + exit(1); + } + fprintf(logF, "*** Log of decoded RVT output ***\n"); + setlinebuf(logF); + } for (;;) { FD_ZERO(&fds); FD_SET(target_fd, &fds); c = select(target_fd+1, &fds, 0, 0, 0); + time(&logtime); if (c < 0) { if (errno == EINTR) continue; @@ -67,4 +85,6 @@ print_item() { printf("%s\n", pr_item); + if (logF) + log_item(); }