]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
script: use gettime_monotonic() to get timing file timestamps
authorSami Kerola <kerolasa@iki.fi>
Tue, 30 Dec 2014 23:03:32 +0000 (23:03 +0000)
committerSami Kerola <kerolasa@iki.fi>
Mon, 8 Jun 2015 20:53:36 +0000 (21:53 +0100)
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>
term-utils/Makemodule.am
term-utils/script.c

index 1b735b9bc02e23d95e380eb27d68356ee145079c..75cc9223c71d52ec91e1930d8db9e7ae662f10cd 100644 (file)
@@ -1,9 +1,9 @@
 if BUILD_SCRIPT
 usrbin_exec_PROGRAMS += script
 dist_man_MANS += term-utils/script.1
-script_SOURCES = term-utils/script.c
+script_SOURCES = term-utils/script.c lib/monotonic.c
 script_CFLAGS = $(AM_CFLAGS) -Wno-format-y2k
-script_LDADD = $(LDADD)
+script_LDADD = $(LDADD) libcommon.la $(CLOCKGETTIME_LIBS)
 if HAVE_UTIL
 script_LDADD += -lutil
 endif
index a085c53db6e15430c4c7af99ad9721f6a6d4351e..52c15f2e00d95cdf9d83a9b8747c9a8c9c51cbb1 100644 (file)
@@ -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) {