diff options
author | Sami Kerola | 2014-12-31 00:03:32 +0100 |
---|---|---|
committer | Sami Kerola | 2015-06-08 22:53:36 +0200 |
commit | 04639805e12e343c007746e23cb42c1fa7efbb2a (patch) | |
tree | 6cf4723a2f12c01dd44a96e3ae179dd6d57766d5 /term-utils/script.c | |
parent | script: use correct input type, move comment, and so on (diff) | |
download | kernel-qcow2-util-linux-04639805e12e343c007746e23cb42c1fa7efbb2a.tar.gz kernel-qcow2-util-linux-04639805e12e343c007746e23cb42c1fa7efbb2a.tar.xz kernel-qcow2-util-linux-04639805e12e343c007746e23cb42c1fa7efbb2a.zip |
script: use gettime_monotonic() to get timing file timestamps
This moves the previous time to script control structure, and does
timeval calculation with timersub() that is more appropriate than
making a timeval to a double.
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'term-utils/script.c')
-rw-r--r-- | term-utils/script.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/term-utils/script.c b/term-utils/script.c index a085c53db..52c15f2e0 100644 --- a/term-utils/script.c +++ b/term-utils/script.c @@ -71,6 +71,7 @@ #include "c.h" #include "ttyutils.h" #include "all-io.h" +#include "monotonic.h" #if defined(HAVE_LIBUTIL) && defined(HAVE_PTY_H) # include <pty.h> @@ -90,6 +91,7 @@ struct script_control { char *fname; /* output file path */ FILE *typescriptfp; /* output file pointer */ FILE *timingfp; /* timing file pointer */ + struct timeval oldtime; /* previous write or command start time */ int master; /* pseudoterminal master file descriptor */ int slave; /* pseudoterminal slave file descriptor */ int poll_timeout; /* poll() timeout, used in end of execution */ @@ -205,19 +207,17 @@ static void finish(struct script_control *ctl, int wait) } static void write_output(struct script_control *ctl, char *obuf, - ssize_t bytes, double *oldtime) + ssize_t bytes) { - if (ctl->tflg && ctl->timingfp) { - struct timeval tv; - double newtime; + struct timeval now, delta; - gettimeofday(&tv, NULL); - newtime = tv.tv_sec + (double)tv.tv_usec / 1000000; - fprintf(ctl->timingfp, "%f %zd\n", newtime - *oldtime, bytes); + gettime_monotonic(&now); + timersub(&now, &ctl->oldtime, &delta); + fprintf(ctl->timingfp, "%ld.%06ld %zd\n", delta.tv_sec, delta.tv_usec, bytes); if (ctl->fflg) fflush(ctl->timingfp); - *oldtime = newtime; + ctl->oldtime = now; } if (fwrite_all(obuf, 1, bytes, ctl->typescriptfp)) { warn(_("cannot write script file")); @@ -231,7 +231,7 @@ static void write_output(struct script_control *ctl, char *obuf, } } -static void handle_io(struct script_control *ctl, int fd, double *oldtime, int i) +static void handle_io(struct script_control *ctl, int fd, int i) { char buf[BUFSIZ]; ssize_t bytes; @@ -255,7 +255,7 @@ static void handle_io(struct script_control *ctl, int fd, double *oldtime, int i write_all(ctl->master, &c, sizeof(char)); } } else - write_output(ctl, buf, bytes, oldtime); + write_output(ctl, buf, bytes); } static void handle_signal(struct script_control *ctl, int fd) @@ -285,7 +285,6 @@ static void do_io(struct script_control *ctl) { struct pollfd pfd[POLLFDS]; int ret, i; - double oldtime = time(NULL); time_t tvec = script_time((time_t *)NULL); char buf[128]; @@ -301,6 +300,7 @@ static void do_io(struct script_control *ctl) strftime(buf, sizeof buf, "%c\n", localtime(&tvec)); fprintf(ctl->typescriptfp, _("Script started on %s"), buf); + gettime_monotonic(&ctl->oldtime); while (!ctl->die) { /* wait for input or signal */ @@ -317,7 +317,7 @@ static void do_io(struct script_control *ctl) if (pfd[i].revents == 0) continue; if (i < 2) { - handle_io(ctl, pfd[i].fd, &oldtime, i); + handle_io(ctl, pfd[i].fd, i); continue; } if (i == 2) { |