From 3e666656dc9ac50dd3bf36d35d70c403dd860c9f Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Wed, 16 Mar 2022 20:06:49 -0400 Subject: main: Use difftime() instead of comparing time_t C99 ยง 7.23.1 defines time_t as an "arithmetic [type] capable of representing times" with "implementation-defined" "range and precision of times representable". It doesn't require that time1 > time0 for time1 later than time0. See also: http://computer-programming-forum.com/47-c-language/8d7dec65bd1ddafe.htm --- diff --git a/configure.ac b/configure.ac index 3ff9f79..7c94fbd 100644 --- a/configure.ac +++ b/configure.ac @@ -38,8 +38,9 @@ test -d "${srcdir}/.git" || CFLAGS="${save_CFLAGS}" funcs_missing=false AC_CHECK_FUNCS( [\ - calloc fprintf fputs free isspace localtime mktime printf \ - realloc setvbuf sleep strerror strlen strftime strptime time + calloc difftime fprintf fputs free isspace localtime mktime \ + printf realloc setvbuf sleep strerror strlen strftime strptime \ + time ], [], [funcs_missing=true]) diff --git a/src/main.c b/src/main.c index 10630e8..4abf977 100644 --- a/src/main.c +++ b/src/main.c @@ -172,7 +172,7 @@ main(int argc, char * const argv[]) char *buf; time_t arg; time_t now; - time_t dif; + double dif; optind = 1; opterr = 0; @@ -218,14 +218,14 @@ main(int argc, char * const argv[]) free(buf); time(&now); - dif = arg - now; + dif = difftime(arg, now); if (dif >= 1000 * 24 * 60 * 60) { fputs("Date too far in the future\n", stderr); return EXIT_FAILURE; } setvbuf(stdout, NULL, _IONBF, 0); - while (arg > now) { + while (dif > 0) { printf("\r%03d:%02d:%02d:%02d", (int) dif / 60 / 60 / 24, (int) dif / 60 / 60 % 24, @@ -233,7 +233,7 @@ main(int argc, char * const argv[]) (int) dif % 60); sleep(1); time(&now); - dif = arg - now; + dif = difftime(arg, now); } printf("\r000:00:00:00\n"); -- cgit v0.9.1