From: Karel Zak Date: Thu, 6 May 2021 08:13:27 +0000 (+0200) Subject: scriptplay: fix time_t=long assumptions X-Git-Tag: v2.37-rc2~29 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7b20bb1acc5ef42c17b198c68e033cdb5d33a634;p=thirdparty%2Futil-linux.git scriptplay: fix time_t=long assumptions Fixes: https://github.com/karelzak/util-linux/issues/1069 References: http://github.com/karelzak/util-linux/commit/ce3355cc54d97711bc240783324f7ab51fd6e371 Signed-off-by: Karel Zak --- diff --git a/term-utils/script-playutils.c b/term-utils/script-playutils.c index c589438193..cd598d2c6a 100644 --- a/term-utils/script-playutils.c +++ b/term-utils/script-playutils.c @@ -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) { diff --git a/term-utils/scriptreplay.c b/term-utils/scriptreplay.c index 7b571e2e4f..fb68499c85 100644 --- a/term-utils/scriptreplay.c +++ b/term-utils/scriptreplay.c @@ -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)