]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
scriptplay: fix time_t=long assumptions
authorKarel Zak <kzak@redhat.com>
Thu, 6 May 2021 08:13:27 +0000 (10:13 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 6 May 2021 08:34:15 +0000 (10:34 +0200)
Fixes: https://github.com/karelzak/util-linux/issues/1069
References: http://github.com/karelzak/util-linux/commit/ce3355cc54d97711bc240783324f7ab51fd6e371
Signed-off-by: Karel Zak <kzak@redhat.com>
term-utils/script-playutils.c
term-utils/scriptreplay.c

index c589438193ccb04a8b8d41df3586122374ea2904..cd598d2c6abe0a2b7b1f593ad69d30667a53b851 100644 (file)
@@ -300,19 +300,20 @@ static int read_multistream_step(struct replay_step *step, FILE *f, char type)
 {
        int rc = 0;
        char nl;
-
+       int64_t sec = 0, usec = 0;
 
        switch (type) {
        case 'O': /* output */
        case 'I': /* input */
-               rc = fscanf(f, "%ld.%06ld %zu%c\n",
-                               &step->delay.tv_sec,
-                               &step->delay.tv_usec,
-                               &step->size, &nl);
+               rc = fscanf(f, "%"SCNd64".%06"SCNd64" %zu%c\n",
+                               &sec, &usec, &step->size, &nl);
                if (rc != 4 || nl != '\n')
                        rc = -EINVAL;
                else
                        rc = 0;
+
+               step->delay.tv_sec = (time_t) sec;
+               step->delay.tv_usec = (suseconds_t) usec;
                break;
 
        case 'S': /* signal */
@@ -320,13 +321,14 @@ static int read_multistream_step(struct replay_step *step, FILE *f, char type)
        {
                char buf[BUFSIZ];
 
-               rc = fscanf(f, "%ld.%06ld ",
-                               &step->delay.tv_sec,
-                               &step->delay.tv_usec);
-
+               rc = fscanf(f, "%"SCNd64".%06"SCNd64" ",
+                               &sec, &usec);
                if (rc != 2)
                        break;
 
+               step->delay.tv_sec = (time_t) sec;
+               step->delay.tv_usec = (suseconds_t) usec;
+
                rc = fscanf(f, "%128s", buf);           /* name */
                if (rc != 1)
                        break;
@@ -449,10 +451,10 @@ int replay_get_next_step(struct replay_setup *stp, char *streams, struct replay_
                } else
                        DBG(TIMING, ul_debug(" not found log for '%c' stream", step->type));
 
-               DBG(TIMING, ul_debug(" ignore step '%c' [delay=%ld.%06ld]",
-                                       step->type,
-                                       step->delay.tv_sec,
-                                       step->delay.tv_usec));
+               DBG(TIMING, ul_debug(" ignore step '%c' [delay=%"PRId64".%06"PRId64"]",
+                               step->type,
+                               (int64_t) step->delay.tv_sec,
+                               (int64_t) step->delay.tv_usec));
 
                timerinc(&ignored_delay, &step->delay);
        } while (rc == 0);
@@ -461,11 +463,12 @@ done:
        if (timerisset(&ignored_delay))
                timerinc(&step->delay, &ignored_delay);
 
-       DBG(TIMING, ul_debug("reading next step done [rc=%d delay=%ld.%06ld (ignored=%ld.%06ld) size=%zu]",
-                               rc,
-                               step->delay.tv_sec, step->delay.tv_usec,
-                               ignored_delay.tv_sec, ignored_delay.tv_usec,
-                               step->size));
+       DBG(TIMING, ul_debug("reading next step done [rc=%d delay=%"PRId64".%06"PRId64
+                            "(ignored=%"PRId64".%06"PRId64") size=%zu]",
+                       rc,
+                       (int64_t) step->delay.tv_sec, (int64_t) step->delay.tv_usec,
+                       (int64_t) ignored_delay.tv_sec, (int64_t) ignored_delay.tv_usec,
+                       step->size));
 
        /* normalize delay */
        if (stp->delay_div) {
index 7b571e2e4f81456ef29e214bc95e6909718183c1..fb68499c8540e9c240bebed456f031357ab2447f 100644 (file)
@@ -94,9 +94,8 @@ delay_for(struct timeval *delay)
        ts.tv_sec = (time_t) delay->tv_sec;
        ts.tv_nsec = delay->tv_usec * 1000;
 
-       DBG(TIMING, ul_debug("going to sleep for %ld.%06ld",
-                               delay->tv_sec,
-                               delay->tv_usec));
+       DBG(TIMING, ul_debug("going to sleep for %"PRId64".%06"PRId64,
+                       (int64_t) delay->tv_sec, (int64_t) delay->tv_usec));
 
        while (-1 == nanosleep(&ts, &remainder)) {
                if (EINTR == errno)