Clamp the calculated ETA to within the size of a long integer to avoid over/underflows, and round off the floating point value rather than just truncating the decimal portion.
This commit is contained in:
@@ -48,9 +48,11 @@ AC_CHECK_DECLS([SA_SIGINFO], [], [], [[#include <signal.h>]])
|
||||
|
||||
AC_SEARCH_LIBS([sqrtl],[m])
|
||||
AC_SEARCH_LIBS([fmod],[m])
|
||||
AC_SEARCH_LIBS([lroundl],[m])
|
||||
AC_CHECK_HEADERS([math.h])
|
||||
AC_CHECK_FUNCS([sqrtl])
|
||||
AC_CHECK_FUNCS([fmod])
|
||||
AC_CHECK_FUNCS([lroundl])
|
||||
|
||||
dnl Libraries that may contain key functions.
|
||||
AC_SEARCH_LIBS([clock_gettime],[rt])
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
* *cleanup:* fix warning in pv_remote_check() stub on OpenBSD
|
||||
* *cleanup:* use dynamic line buffers for **--watchfd** process lookups
|
||||
* *cleanup:* replace the blanket 100,000-hour clamp on displayed times with a million days for timer and ETA, and 7,000 years for estimated finish time, on 64-bit systems
|
||||
* *cleanup:* use rounding when calculating ETA, and avoid integer overflows, particularly on 32-bit systems
|
||||
* *cleanup:* standardise the error reporting mechanism
|
||||
* *cleanup:* improve code comments
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Report-Msgid-Bugs-To: https://codeberg.org/ivarch/pv/issues\n"
|
||||
"POT-Creation-Date: 2026-04-19 16:49+0100\n"
|
||||
"POT-Creation-Date: 2026-04-19 17:22+0100\n"
|
||||
"PO-Revision-Date: 2024-10-13 20:43+0000\n"
|
||||
"Last-Translator: mmatous <mmatous@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Czech <https://translate.codeberg.org/projects/pv/pv/cs/>\n"
|
||||
@@ -455,15 +455,15 @@ msgstr "selhal pokus o uzamčení"
|
||||
msgid "failed to open terminal"
|
||||
msgstr "selhalo otevření terminálu"
|
||||
|
||||
#: src/pv/display.c:292
|
||||
#: src/pv/display.c:311
|
||||
msgid "yzafpnum kMGTPEZY"
|
||||
msgstr "yzafpnum kMGTPEZY"
|
||||
|
||||
#: src/pv/display.c:310
|
||||
#: src/pv/display.c:329
|
||||
msgid "yzafpnum KMGTPEZY"
|
||||
msgstr "yzafpnum KMGTPEZY"
|
||||
|
||||
#: src/pv/display.c:1063 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
#: src/pv/display.c:1082 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "selhala alokace vyrovnávací paměti"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Report-Msgid-Bugs-To: https://codeberg.org/ivarch/pv/issues\n"
|
||||
"POT-Creation-Date: 2026-04-19 16:49+0100\n"
|
||||
"POT-Creation-Date: 2026-04-19 17:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-14 20:39+0000\n"
|
||||
"Last-Translator: Benny <benny@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: German <https://translate.codeberg.org/projects/pv/pv/de/>\n"
|
||||
@@ -478,15 +478,15 @@ msgstr "Sperrversuch fehlgeschlagen"
|
||||
msgid "failed to open terminal"
|
||||
msgstr "konnte Terminal nicht öffnen"
|
||||
|
||||
#: src/pv/display.c:292
|
||||
#: src/pv/display.c:311
|
||||
msgid "yzafpnum kMGTPEZY"
|
||||
msgstr "yzafpnµm kMGTPEZY"
|
||||
|
||||
#: src/pv/display.c:310
|
||||
#: src/pv/display.c:329
|
||||
msgid "yzafpnum KMGTPEZY"
|
||||
msgstr "yzafpnµm KMGTPEZY"
|
||||
|
||||
#: src/pv/display.c:1063 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
#: src/pv/display.c:1082 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "Speicherzuweisung für den Puffer fehlgeschlagen"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: pv 1.9.34\n"
|
||||
"Report-Msgid-Bugs-To: https://codeberg.org/ivarch/pv/issues\n"
|
||||
"POT-Creation-Date: 2026-04-19 16:49+0100\n"
|
||||
"POT-Creation-Date: 2026-04-19 17:22+0100\n"
|
||||
"PO-Revision-Date: 2026-03-24 23:25+0000\n"
|
||||
"Last-Translator: Ricky-Tigg <ricky-tigg@noreply.codeberg.org>\n"
|
||||
"Language-Team: Finnish <https://translate.codeberg.org/projects/pv/pv/fi/>\n"
|
||||
@@ -460,15 +460,15 @@ msgstr "lukitusyritys epäonnistui"
|
||||
msgid "failed to open terminal"
|
||||
msgstr "päätelaitteen avaaminen epäonnistui"
|
||||
|
||||
#: src/pv/display.c:292
|
||||
#: src/pv/display.c:311
|
||||
msgid "yzafpnum kMGTPEZY"
|
||||
msgstr ""
|
||||
|
||||
#: src/pv/display.c:310
|
||||
#: src/pv/display.c:329
|
||||
msgid "yzafpnum KMGTPEZY"
|
||||
msgstr ""
|
||||
|
||||
#: src/pv/display.c:1063 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
#: src/pv/display.c:1082 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "puskurin allokointi epäonnistui"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Report-Msgid-Bugs-To: https://codeberg.org/ivarch/pv/issues\n"
|
||||
"POT-Creation-Date: 2026-04-19 16:49+0100\n"
|
||||
"POT-Creation-Date: 2026-04-19 17:22+0100\n"
|
||||
"PO-Revision-Date: 2025-05-31 08:58+0000\n"
|
||||
"Last-Translator: milimarg <milimarg@noreply.codeberg.org>\n"
|
||||
"Language-Team: French <https://translate.codeberg.org/projects/pv/pv/fr/>\n"
|
||||
@@ -482,15 +482,15 @@ msgstr "échec de la tentative de verrouillage"
|
||||
msgid "failed to open terminal"
|
||||
msgstr "échec de l'ouverture du terminal"
|
||||
|
||||
#: src/pv/display.c:292
|
||||
#: src/pv/display.c:311
|
||||
msgid "yzafpnum kMGTPEZY"
|
||||
msgstr "yzafpnum kMGTPEZY"
|
||||
|
||||
#: src/pv/display.c:310
|
||||
#: src/pv/display.c:329
|
||||
msgid "yzafpnum KMGTPEZY"
|
||||
msgstr "yzafpnum KMGTPEZY"
|
||||
|
||||
#: src/pv/display.c:1063 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
#: src/pv/display.c:1082 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "échec de l'allocation de mémoire tampon"
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: https://codeberg.org/ivarch/pv/issues\n"
|
||||
"POT-Creation-Date: 2026-04-19 16:49+0100\n"
|
||||
"POT-Creation-Date: 2026-04-19 17:22+0100\n"
|
||||
"PO-Revision-Date: 2026-04-06 15:34+0000\n"
|
||||
"Last-Translator: Coral Pink <coral.pink@disr.it>\n"
|
||||
"Language-Team: Polish <https://translate.codeberg.org/projects/pv/pv/pl/>\n"
|
||||
@@ -475,15 +475,15 @@ msgstr "blokada zasobów nie powiodła się"
|
||||
msgid "failed to open terminal"
|
||||
msgstr "nie udało się otworzyć terminala"
|
||||
|
||||
#: src/pv/display.c:292
|
||||
#: src/pv/display.c:311
|
||||
msgid "yzafpnum kMGTPEZY"
|
||||
msgstr "yzafpnum kMGTPEZY"
|
||||
|
||||
#: src/pv/display.c:310
|
||||
#: src/pv/display.c:329
|
||||
msgid "yzafpnum KMGTPEZY"
|
||||
msgstr "yzafpnum KMGTPEZY"
|
||||
|
||||
#: src/pv/display.c:1063 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
#: src/pv/display.c:1082 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "nie udało się zaalokować bufora"
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: https://codeberg.org/ivarch/pv/issues\n"
|
||||
"POT-Creation-Date: 2026-04-19 16:49+0100\n"
|
||||
"POT-Creation-Date: 2026-04-19 17:22+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -461,15 +461,15 @@ msgstr "tentativa de bloqueio falhou"
|
||||
msgid "failed to open terminal"
|
||||
msgstr "erro abrindo o terminal"
|
||||
|
||||
#: src/pv/display.c:292
|
||||
#: src/pv/display.c:311
|
||||
msgid "yzafpnum kMGTPEZY"
|
||||
msgstr ""
|
||||
|
||||
#: src/pv/display.c:310
|
||||
#: src/pv/display.c:329
|
||||
msgid "yzafpnum KMGTPEZY"
|
||||
msgstr ""
|
||||
|
||||
#: src/pv/display.c:1063 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
#: src/pv/display.c:1082 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "erro alocando o buffer"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Report-Msgid-Bugs-To: https://codeberg.org/ivarch/pv/issues\n"
|
||||
"POT-Creation-Date: 2026-04-19 16:49+0100\n"
|
||||
"POT-Creation-Date: 2026-04-19 17:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-15 19:08+0000\n"
|
||||
"Last-Translator: 0ko <0ko@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Russian <https://translate.codeberg.org/projects/pv/pv/ru/>\n"
|
||||
@@ -456,15 +456,15 @@ msgstr "попытка блокировки не удалась"
|
||||
msgid "failed to open terminal"
|
||||
msgstr "не удалось открыть терминал"
|
||||
|
||||
#: src/pv/display.c:292
|
||||
#: src/pv/display.c:311
|
||||
msgid "yzafpnum kMGTPEZY"
|
||||
msgstr ""
|
||||
|
||||
#: src/pv/display.c:310
|
||||
#: src/pv/display.c:329
|
||||
msgid "yzafpnum KMGTPEZY"
|
||||
msgstr ""
|
||||
|
||||
#: src/pv/display.c:1063 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
#: src/pv/display.c:1082 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "не удалось выделить память для буфера"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: pv 1.8.14\n"
|
||||
"Report-Msgid-Bugs-To: https://codeberg.org/ivarch/pv/issues\n"
|
||||
"POT-Creation-Date: 2026-04-19 16:49+0100\n"
|
||||
"POT-Creation-Date: 2026-04-19 17:22+0100\n"
|
||||
"PO-Revision-Date: 2025-10-05 20:09+0000\n"
|
||||
"Last-Translator: Oğuz Ersen <ersen@noreply.codeberg.org>\n"
|
||||
"Language-Team: Turkish <https://translate.codeberg.org/projects/pv/pv/tr/>\n"
|
||||
@@ -457,15 +457,15 @@ msgstr "kilit denemesi başarısız oldu"
|
||||
msgid "failed to open terminal"
|
||||
msgstr "terminal açılamadı"
|
||||
|
||||
#: src/pv/display.c:292
|
||||
#: src/pv/display.c:311
|
||||
msgid "yzafpnum kMGTPEZY"
|
||||
msgstr "yzafpnum kMGTPEZY"
|
||||
|
||||
#: src/pv/display.c:310
|
||||
#: src/pv/display.c:329
|
||||
msgid "yzafpnum KMGTPEZY"
|
||||
msgstr "yzafpnum KMGTPEZY"
|
||||
|
||||
#: src/pv/display.c:1063 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
#: src/pv/display.c:1082 src/pv/state.c:879 src/pv/transfer.c:1148
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "arabellek tahsisi başarısız oldu"
|
||||
|
||||
|
||||
+20
-1
@@ -17,6 +17,7 @@
|
||||
#include <errno.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <limits.h>
|
||||
|
||||
#ifdef HAVE_TERMIOS_H
|
||||
#include <termios.h>
|
||||
@@ -28,6 +29,10 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HAVE_MATH_H
|
||||
#include <math.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If ncurses is unavailable, and USE_POPEN_TPUTS is defined, then
|
||||
* popen("tputs") if used to find out whether colours are supported.
|
||||
@@ -247,9 +252,23 @@ long pv_seconds_remaining(const off_t so_far, const off_t total, const long doub
|
||||
|
||||
amount_left = (long double) (total - so_far) / rate;
|
||||
|
||||
/* TODO: check whether rounding would be better here. */
|
||||
/* Clamp the amount to a value that fits inside a long integer. */
|
||||
#ifdef LONG_MAX
|
||||
if (amount_left > (long double) LONG_MAX)
|
||||
amount_left = (long double) LONG_MAX;
|
||||
#endif
|
||||
#ifdef LONG_MIN
|
||||
if (amount_left < (long double) LONG_MIN)
|
||||
amount_left = (long double) LONG_MIN;
|
||||
#endif
|
||||
|
||||
#if HAVE_LROUNDL
|
||||
/*@-unrecog@ */
|
||||
return lroundl(amount_left);
|
||||
/*@+unrecog@ *//* splint doesn't know of lroundl(). */
|
||||
#else
|
||||
return (long) amount_left;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user