From 78f4a60bf785300b562995c36d4dc8653968ef1a Mon Sep 17 00:00:00 2001 From: Andrew Wood Date: Thu, 12 Dec 2024 22:36:07 +0000 Subject: [PATCH] Change the formatter functions to take their 6 arguments as one struct pointer, making it less messy. --- po/cs.po | 24 ++++++------- po/de.po | 24 ++++++------- po/es.po | 24 ++++++------- po/fr.po | 24 ++++++------- po/pl.po | 24 ++++++------- po/pt.po | 24 ++++++------- po/ru.po | 24 ++++++------- po/tr.po | 24 ++++++------- src/include/pv-internal.h | 43 ++++++++++++++-------- src/pv/display.c | 68 +++++++++++++++++++++++------------ src/pv/format/averagerate.c | 13 ++++--- src/pv/format/bufferpercent.c | 15 ++++---- src/pv/format/bytes.c | 15 ++++---- src/pv/format/eta.c | 15 ++++---- src/pv/format/fineta.c | 13 ++++--- src/pv/format/lastwritten.c | 36 +++++++++---------- src/pv/format/name.c | 13 ++++--- src/pv/format/previousline.c | 26 +++++++------- src/pv/format/progressbar.c | 37 +++++++++---------- src/pv/format/rate.c | 15 ++++---- src/pv/format/timer.c | 29 ++++++++------- 21 files changed, 276 insertions(+), 254 deletions(-) diff --git a/po/cs.po b/po/cs.po index 4f2a926..c21e96a 100644 --- a/po/cs.po +++ b/po/cs.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: pv@ivarch.com\n" -"POT-Creation-Date: 2024-12-10 22:03+0000\n" +"POT-Creation-Date: 2024-12-12 22:09+0000\n" "PO-Revision-Date: 2024-10-13 20:43+0000\n" "Last-Translator: mmatous \n" "Language-Team: Czech \n" @@ -411,7 +411,7 @@ msgstr "yzafpnum kMGTPEZY" msgid "yzafpnum KMGTPEZY" msgstr "yzafpnum KMGTPEZY" -#: src/pv/display.c:891 src/pv/transfer.c:1056 +#: src/pv/display.c:914 src/pv/transfer.c:1056 msgid "buffer allocation failed" msgstr "selhala alokace vyrovnávací paměti" @@ -443,34 +443,34 @@ msgstr "(žádný)" msgid "(stdin)" msgstr "(stdin)" -#: src/pv/format/averagerate.c:31 src/pv/format/progressbar.c:59 -#: src/pv/format/rate.c:33 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:59 +#: src/pv/format/rate.c:32 src/pv/loop.c:549 msgid "b/s" msgstr "b/s" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 msgid "/s" msgstr "/s" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 src/pv/loop.c:549 msgid "B/s" msgstr "B/s" -#: src/pv/format/bytes.c:32 +#: src/pv/format/bytes.c:31 msgid "b" msgstr "b" -#: src/pv/format/bytes.c:35 src/pv/transfer.c:594 +#: src/pv/format/bytes.c:34 src/pv/transfer.c:594 msgid "B" msgstr "B" -#: src/pv/format/eta.c:53 src/pv/format/eta.c:57 +#: src/pv/format/eta.c:52 src/pv/format/eta.c:56 msgid "ETA" msgstr "ETA" -#: src/pv/format/fineta.c:81 +#: src/pv/format/fineta.c:80 msgid "FIN" msgstr "FIN" diff --git a/po/de.po b/po/de.po index 0fcce42..03300c3 100644 --- a/po/de.po +++ b/po/de.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: pv@ivarch.com\n" -"POT-Creation-Date: 2024-12-10 22:03+0000\n" +"POT-Creation-Date: 2024-12-12 22:09+0000\n" "PO-Revision-Date: 2024-10-13 20:43+0000\n" "Last-Translator: fnetX \n" "Language-Team: German \n" @@ -434,7 +434,7 @@ msgstr "yzafpnµm kMGTPEZY" msgid "yzafpnum KMGTPEZY" msgstr "yzafpnµm KMGTPEZY" -#: src/pv/display.c:891 src/pv/transfer.c:1056 +#: src/pv/display.c:914 src/pv/transfer.c:1056 msgid "buffer allocation failed" msgstr "Speicherzuweisung für den Puffer fehlgeschlagen" @@ -466,34 +466,34 @@ msgstr "(keine)" msgid "(stdin)" msgstr "(stdin)" -#: src/pv/format/averagerate.c:31 src/pv/format/progressbar.c:59 -#: src/pv/format/rate.c:33 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:59 +#: src/pv/format/rate.c:32 src/pv/loop.c:549 msgid "b/s" msgstr "b/s" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 msgid "/s" msgstr "/s" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 src/pv/loop.c:549 msgid "B/s" msgstr "B/s" -#: src/pv/format/bytes.c:32 +#: src/pv/format/bytes.c:31 msgid "b" msgstr "b" -#: src/pv/format/bytes.c:35 src/pv/transfer.c:594 +#: src/pv/format/bytes.c:34 src/pv/transfer.c:594 msgid "B" msgstr "B" -#: src/pv/format/eta.c:53 src/pv/format/eta.c:57 +#: src/pv/format/eta.c:52 src/pv/format/eta.c:56 msgid "ETA" msgstr "ETA" -#: src/pv/format/fineta.c:81 +#: src/pv/format/fineta.c:80 msgid "FIN" msgstr "Endzeit" diff --git a/po/es.po b/po/es.po index 8076327..c94584f 100644 --- a/po/es.po +++ b/po/es.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: pv@ivarch.com\n" -"POT-Creation-Date: 2024-12-10 22:03+0000\n" +"POT-Creation-Date: 2024-12-12 22:09+0000\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -403,7 +403,7 @@ msgstr "" msgid "yzafpnum KMGTPEZY" msgstr "" -#: src/pv/display.c:891 src/pv/transfer.c:1056 +#: src/pv/display.c:914 src/pv/transfer.c:1056 msgid "buffer allocation failed" msgstr "" @@ -435,34 +435,34 @@ msgstr "" msgid "(stdin)" msgstr "" -#: src/pv/format/averagerate.c:31 src/pv/format/progressbar.c:59 -#: src/pv/format/rate.c:33 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:59 +#: src/pv/format/rate.c:32 src/pv/loop.c:549 msgid "b/s" msgstr "" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 msgid "/s" msgstr "" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 src/pv/loop.c:549 msgid "B/s" msgstr "" -#: src/pv/format/bytes.c:32 +#: src/pv/format/bytes.c:31 msgid "b" msgstr "" -#: src/pv/format/bytes.c:35 src/pv/transfer.c:594 +#: src/pv/format/bytes.c:34 src/pv/transfer.c:594 msgid "B" msgstr "" -#: src/pv/format/eta.c:53 src/pv/format/eta.c:57 +#: src/pv/format/eta.c:52 src/pv/format/eta.c:56 msgid "ETA" msgstr "" -#: src/pv/format/fineta.c:81 +#: src/pv/format/fineta.c:80 msgid "FIN" msgstr "" diff --git a/po/fr.po b/po/fr.po index 469fbdc..36e0340 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: pv@ivarch.com\n" -"POT-Creation-Date: 2024-12-10 22:03+0000\n" +"POT-Creation-Date: 2024-12-12 22:09+0000\n" "PO-Revision-Date: 2024-10-12 11:13+0000\n" "Last-Translator: a-j-wood \n" "Language-Team: French \n" @@ -438,7 +438,7 @@ msgstr "" msgid "yzafpnum KMGTPEZY" msgstr "" -#: src/pv/display.c:891 src/pv/transfer.c:1056 +#: src/pv/display.c:914 src/pv/transfer.c:1056 msgid "buffer allocation failed" msgstr "échec de l'allocation de mémoire tampon" @@ -470,34 +470,34 @@ msgstr "(aucun)" msgid "(stdin)" msgstr "" -#: src/pv/format/averagerate.c:31 src/pv/format/progressbar.c:59 -#: src/pv/format/rate.c:33 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:59 +#: src/pv/format/rate.c:32 src/pv/loop.c:549 msgid "b/s" msgstr "" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 msgid "/s" msgstr "/s" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 src/pv/loop.c:549 msgid "B/s" msgstr "O/s" -#: src/pv/format/bytes.c:32 +#: src/pv/format/bytes.c:31 msgid "b" msgstr "" -#: src/pv/format/bytes.c:35 src/pv/transfer.c:594 +#: src/pv/format/bytes.c:34 src/pv/transfer.c:594 msgid "B" msgstr "O" -#: src/pv/format/eta.c:53 src/pv/format/eta.c:57 +#: src/pv/format/eta.c:52 src/pv/format/eta.c:56 msgid "ETA" msgstr "ETA" -#: src/pv/format/fineta.c:81 +#: src/pv/format/fineta.c:80 msgid "FIN" msgstr "" diff --git a/po/pl.po b/po/pl.po index e09ae36..c49eaa8 100644 --- a/po/pl.po +++ b/po/pl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: pv@ivarch.com\n" -"POT-Creation-Date: 2024-12-10 22:03+0000\n" +"POT-Creation-Date: 2024-12-12 22:09+0000\n" "PO-Revision-Date: 2024-10-20 14:07+0000\n" "Last-Translator: coralpink \n" "Language-Team: Polish \n" @@ -429,7 +429,7 @@ msgstr "yzafpnum kMGTPEZY" msgid "yzafpnum KMGTPEZY" msgstr "yzafpnum KMGTPEZY" -#: src/pv/display.c:891 src/pv/transfer.c:1056 +#: src/pv/display.c:914 src/pv/transfer.c:1056 msgid "buffer allocation failed" msgstr "nie udało się zaalokować bufora" @@ -462,34 +462,34 @@ msgstr "(brak)" msgid "(stdin)" msgstr "(stdin)" -#: src/pv/format/averagerate.c:31 src/pv/format/progressbar.c:59 -#: src/pv/format/rate.c:33 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:59 +#: src/pv/format/rate.c:32 src/pv/loop.c:549 msgid "b/s" msgstr "b/s" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 msgid "/s" msgstr "/s" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 src/pv/loop.c:549 msgid "B/s" msgstr "B/s" -#: src/pv/format/bytes.c:32 +#: src/pv/format/bytes.c:31 msgid "b" msgstr "b" -#: src/pv/format/bytes.c:35 src/pv/transfer.c:594 +#: src/pv/format/bytes.c:34 src/pv/transfer.c:594 msgid "B" msgstr "B" -#: src/pv/format/eta.c:53 src/pv/format/eta.c:57 +#: src/pv/format/eta.c:52 src/pv/format/eta.c:56 msgid "ETA" msgstr "ETA" -#: src/pv/format/fineta.c:81 +#: src/pv/format/fineta.c:80 msgid "FIN" msgstr "FIN" diff --git a/po/pt.po b/po/pt.po index f1b3d9c..2ad2139 100644 --- a/po/pt.po +++ b/po/pt.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: pv@ivarch.com\n" -"POT-Creation-Date: 2024-12-10 22:03+0000\n" +"POT-Creation-Date: 2024-12-12 22:09+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -417,7 +417,7 @@ msgstr "" msgid "yzafpnum KMGTPEZY" msgstr "" -#: src/pv/display.c:891 src/pv/transfer.c:1056 +#: src/pv/display.c:914 src/pv/transfer.c:1056 msgid "buffer allocation failed" msgstr "erro alocando o buffer" @@ -449,34 +449,34 @@ msgstr "" msgid "(stdin)" msgstr "" -#: src/pv/format/averagerate.c:31 src/pv/format/progressbar.c:59 -#: src/pv/format/rate.c:33 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:59 +#: src/pv/format/rate.c:32 src/pv/loop.c:549 msgid "b/s" msgstr "" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 msgid "/s" msgstr "" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 src/pv/loop.c:549 msgid "B/s" msgstr "B/s" -#: src/pv/format/bytes.c:32 +#: src/pv/format/bytes.c:31 msgid "b" msgstr "" -#: src/pv/format/bytes.c:35 src/pv/transfer.c:594 +#: src/pv/format/bytes.c:34 src/pv/transfer.c:594 msgid "B" msgstr "" -#: src/pv/format/eta.c:53 src/pv/format/eta.c:57 +#: src/pv/format/eta.c:52 src/pv/format/eta.c:56 msgid "ETA" msgstr "ETA" -#: src/pv/format/fineta.c:81 +#: src/pv/format/fineta.c:80 msgid "FIN" msgstr "" diff --git a/po/ru.po b/po/ru.po index 9035708..a7220af 100644 --- a/po/ru.po +++ b/po/ru.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: pv@ivarch.com\n" -"POT-Creation-Date: 2024-12-10 22:03+0000\n" +"POT-Creation-Date: 2024-12-12 22:09+0000\n" "PO-Revision-Date: 2024-10-22 18:07+0000\n" "Last-Translator: 0ko <0ko@users.noreply.translate.codeberg.org>\n" "Language-Team: Russian \n" @@ -412,7 +412,7 @@ msgstr "" msgid "yzafpnum KMGTPEZY" msgstr "" -#: src/pv/display.c:891 src/pv/transfer.c:1056 +#: src/pv/display.c:914 src/pv/transfer.c:1056 msgid "buffer allocation failed" msgstr "не удалось выделить память для буфера" @@ -444,34 +444,34 @@ msgstr "(нет)" msgid "(stdin)" msgstr "(стд. ввод)" -#: src/pv/format/averagerate.c:31 src/pv/format/progressbar.c:59 -#: src/pv/format/rate.c:33 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:59 +#: src/pv/format/rate.c:32 src/pv/loop.c:549 msgid "b/s" msgstr "бит/с" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 msgid "/s" msgstr "/с" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 src/pv/loop.c:549 msgid "B/s" msgstr "байт/с" -#: src/pv/format/bytes.c:32 +#: src/pv/format/bytes.c:31 msgid "b" msgstr "бит" -#: src/pv/format/bytes.c:35 src/pv/transfer.c:594 +#: src/pv/format/bytes.c:34 src/pv/transfer.c:594 msgid "B" msgstr "байт" -#: src/pv/format/eta.c:53 src/pv/format/eta.c:57 +#: src/pv/format/eta.c:52 src/pv/format/eta.c:56 msgid "ETA" msgstr "ОЖИД" -#: src/pv/format/fineta.c:81 +#: src/pv/format/fineta.c:80 msgid "FIN" msgstr "ЗАВЕРШ" diff --git a/po/tr.po b/po/tr.po index 6f1c43d..d5d2dc8 100644 --- a/po/tr.po +++ b/po/tr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: pv 1.8.14\n" "Report-Msgid-Bugs-To: pv@ivarch.com\n" -"POT-Creation-Date: 2024-12-10 22:03+0000\n" +"POT-Creation-Date: 2024-12-12 22:09+0000\n" "PO-Revision-Date: 2024-10-12 23:51+0000\n" "Last-Translator: a-j-wood \n" "Language-Team: Turkish \n" @@ -413,7 +413,7 @@ msgstr "yzafpnum kMGTPEZY" msgid "yzafpnum KMGTPEZY" msgstr "yzafpnum KMGTPEZY" -#: src/pv/display.c:891 src/pv/transfer.c:1056 +#: src/pv/display.c:914 src/pv/transfer.c:1056 msgid "buffer allocation failed" msgstr "arabellek tahsisi başarısız oldu" @@ -445,34 +445,34 @@ msgstr "(yok)" msgid "(stdin)" msgstr "(stdin)" -#: src/pv/format/averagerate.c:31 src/pv/format/progressbar.c:59 -#: src/pv/format/rate.c:33 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:59 +#: src/pv/format/rate.c:32 src/pv/loop.c:549 msgid "b/s" msgstr "b/s" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 msgid "/s" msgstr "/s" -#: src/pv/format/averagerate.c:35 src/pv/format/progressbar.c:63 -#: src/pv/format/rate.c:37 src/pv/loop.c:549 +#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:63 +#: src/pv/format/rate.c:36 src/pv/loop.c:549 msgid "B/s" msgstr "B/s" -#: src/pv/format/bytes.c:32 +#: src/pv/format/bytes.c:31 msgid "b" msgstr "b" -#: src/pv/format/bytes.c:35 src/pv/transfer.c:594 +#: src/pv/format/bytes.c:34 src/pv/transfer.c:594 msgid "B" msgstr "B" -#: src/pv/format/eta.c:53 src/pv/format/eta.c:57 +#: src/pv/format/eta.c:52 src/pv/format/eta.c:56 msgid "ETA" msgstr "ETA" -#: src/pv/format/fineta.c:81 +#: src/pv/format/fineta.c:80 msgid "FIN" msgstr "FIN" diff --git a/src/include/pv-internal.h b/src/include/pv-internal.h index 5df924d..64bcee0 100644 --- a/src/include/pv-internal.h +++ b/src/include/pv-internal.h @@ -355,9 +355,22 @@ struct pvstate_s { typedef struct pvdisplay_s *pvdisplay_t; typedef struct pvdisplay_segment_s *pvdisplay_segment_t; +/* + * Structure containing the parameters used by formatters. + */ +struct pvformatter_args_s { + /*@dependent@*/ pvstate_t state; /* overall state */ + /*@dependent@*/ pvdisplay_t display; /* the display being updated */ + /*@dependent@*/ pvdisplay_segment_t segment; /* the segment of the display */ + /*@dependent@*/ char *buffer; /* buffer to write formatted segments into */ + size_t buffer_size; /* size of the buffer */ + size_t offset; /* current write position in the buffer */ +}; +typedef struct pvformatter_args_s *pvformatter_args_t; + /* Pointer to a formatter function. */ -typedef size_t (*pvdisplay_formatter_t)(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); +typedef size_t (*pvdisplay_formatter_t)(pvformatter_args_t); /* @@ -399,7 +412,7 @@ long pv_seconds_remaining(const off_t, const off_t, const long double); void pv_si_prefix(long double *, char *, const long double, pvtransfercount_t); void pv_describe_amount(char *, size_t, char *, long double, char *, char *, pvtransfercount_t); -size_t pv_formatter_segmentcontent(char *, pvdisplay_segment_t, char *, size_t, size_t); +size_t pv_formatter_segmentcontent(char *, pvformatter_args_t); /* * Formatting functions. @@ -422,19 +435,19 @@ size_t pv_formatter_segmentcontent(char *, pvdisplay_segment_t, char *, size_t, * If called with a buffer size of 0, only the side effects occur (such as * setting flags like display->showing_timer). */ -size_t pv_formatter_progress(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); -size_t pv_formatter_progress_bar_only(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); -size_t pv_formatter_progress_amount_only(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); -size_t pv_formatter_timer(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); -size_t pv_formatter_eta(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); -size_t pv_formatter_fineta(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); -size_t pv_formatter_rate(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); -size_t pv_formatter_average_rate(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); -size_t pv_formatter_bytes(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); -size_t pv_formatter_buffer_percent(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); -size_t pv_formatter_last_written(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); -size_t pv_formatter_previous_line(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); -size_t pv_formatter_name(pvstate_t, pvdisplay_t, pvdisplay_segment_t, char *, size_t, size_t); +size_t pv_formatter_progress(pvformatter_args_t); +size_t pv_formatter_progress_bar_only(pvformatter_args_t); +size_t pv_formatter_progress_amount_only(pvformatter_args_t); +size_t pv_formatter_timer(pvformatter_args_t); +size_t pv_formatter_eta(pvformatter_args_t); +size_t pv_formatter_fineta(pvformatter_args_t); +size_t pv_formatter_rate(pvformatter_args_t); +size_t pv_formatter_average_rate(pvformatter_args_t); +size_t pv_formatter_bytes(pvformatter_args_t); +size_t pv_formatter_buffer_percent(pvformatter_args_t); +size_t pv_formatter_last_written(pvformatter_args_t); +size_t pv_formatter_previous_line(pvformatter_args_t); +size_t pv_formatter_name(pvformatter_args_t); bool pv_format(pvstate_t, /*@null@*/ const char *, pvdisplay_t, bool, bool); void pv_display(pvstate_t, bool); diff --git a/src/pv/display.c b/src/pv/display.c index d8ca793..294b6ef 100644 --- a/src/pv/display.c +++ b/src/pv/display.c @@ -429,26 +429,25 @@ void pv_describe_amount(char *buffer, size_t bufsize, char *format, * updating the segment's offset and bytes values and returning the bytes * value, or treating the byte count as zero if there's insufficient space. */ -size_t pv_formatter_segmentcontent(char *content, pvdisplay_segment_t segment, char *buffer, size_t buffer_size, - size_t offset) +size_t pv_formatter_segmentcontent(char *content, pvformatter_args_t formatter_info) { size_t bytes; bytes = strlen(content); /* flawfinder: ignore */ /* flawfinder - caller is required to null-terminate the string. */ - if (offset >= buffer_size) + if (formatter_info->offset >= formatter_info->buffer_size) bytes = 0; - if ((offset + bytes) >= buffer_size) + if ((formatter_info->offset + bytes) >= formatter_info->buffer_size) bytes = 0; - segment->offset = offset; - segment->bytes = bytes; + formatter_info->segment->offset = formatter_info->offset; + formatter_info->segment->bytes = bytes; if (0 == bytes) return 0; - memmove(buffer + offset, content, bytes); + memmove(formatter_info->buffer + formatter_info->offset, content, bytes); return bytes; } @@ -781,6 +780,7 @@ static void pv__format_init(pvstate_t state, /*@null@ */ const char *format_supp } else { char dummy_buffer[4]; /* flawfinder: ignore - unused. */ + struct pvformatter_args_s formatter_info; display->format[segment].offset = 0; display->format[segment].bytes = 0; @@ -796,10 +796,26 @@ static void pv__format_init(pvstate_t state, /*@null@ */ const char *format_supp * the previous line, or numeric mode knowing which * additional display options are enabled. */ + memset(&formatter_info, 0, sizeof(formatter_info)); dummy_buffer[0] = '\0'; - (void) format_component_array[component_type].function(state, display, - &(display->format[segment]), - dummy_buffer, 0, 0); + + formatter_info.state = state; + formatter_info.display = display; + formatter_info.segment = &(display->format[segment]); + formatter_info.buffer = dummy_buffer; + formatter_info.buffer_size = 0; + formatter_info.offset = 0; + + /*@-compmempass@ */ + (void) format_component_array[component_type].function(&formatter_info); + /*@+compmempass@ */ + /* + * splint - the buffer we point formatter_info to is + * on the stack so doesn't match the "dependent" + * annotation, but there's no other appropriate + * annotation that doesn't make splint think there's + * a leak here. + */ } display->format_segment_count++; @@ -829,13 +845,14 @@ bool pv_format(pvstate_t state, /*@null@ */ const char *format_supplied, pvdispl { struct pvdisplay_component_s *format_component_array; char display_segments[1024]; /* flawfinder: ignore - always bounded */ - size_t display_segment_offset; size_t segment_idx, dynamic_segment_count; const char *display_format; size_t static_portion_width, dynamic_segment_width; size_t display_buffer_offset, display_buffer_remaining; size_t new_display_string_bytes, new_display_string_width; + struct pvformatter_args_s formatter_info; + memset(&formatter_info, 0, sizeof(formatter_info)); display_segments[0] = '\0'; /* Quick safety check - state and display must exist. */ @@ -844,6 +861,12 @@ bool pv_format(pvstate_t state, /*@null@ */ const char *format_supplied, pvdispl if (NULL == display) return false; + formatter_info.state = state; + formatter_info.display = display; + formatter_info.buffer = display_segments; + formatter_info.buffer_size = sizeof(display_segments); + formatter_info.offset = 0; + format_component_array = pv__format_components(); /* Populate the display's "final" flag, for formatters. */ @@ -911,8 +934,6 @@ bool pv_format(pvstate_t state, /*@null@ */ const char *format_supplied, pvdispl * output, in two passes. */ - display_segment_offset = 0; - /* First pass - all components with a fixed width. */ static_portion_width = 0; @@ -942,16 +963,17 @@ bool pv_format(pvstate_t state, /*@null@ */ const char *format_supplied, pvdispl segment->width = segment->chosen_size; - bytes_added = - component->function(state, display, segment, display_segments, sizeof(display_segments), - display_segment_offset); + formatter_info.segment = segment; + /*@-compmempass@ */ + bytes_added = component->function(&formatter_info); + /*@+compmempass@ *//* see previous ->function() note. */ segment->width = 0; if (bytes_added > 0) { - segment->width = pv_strwidth(&(display_segments[display_segment_offset]), bytes_added); + segment->width = pv_strwidth(&(display_segments[formatter_info.offset]), bytes_added); } - display_segment_offset += bytes_added; + formatter_info.offset += bytes_added; static_portion_width += segment->width; } @@ -990,11 +1012,13 @@ bool pv_format(pvstate_t state, /*@null@ */ const char *format_supplied, pvdispl continue; segment->width = dynamic_segment_width; - bytes_added = - component->function(state, display, segment, display_segments, sizeof(display_segments), - display_segment_offset); - display_segment_offset += bytes_added; + formatter_info.segment = segment; + /*@-compmempass@ */ + bytes_added = component->function(&formatter_info); + /*@+compmempass@ *//* see earlier ->function() note. */ + + formatter_info.offset += bytes_added; } /* diff --git a/src/pv/format/averagerate.c b/src/pv/format/averagerate.c index a8b5afc..8cfe4e6 100644 --- a/src/pv/format/averagerate.c +++ b/src/pv/format/averagerate.c @@ -14,27 +14,26 @@ /* * Average transfer rate. */ -size_t pv_formatter_average_rate(pvstate_t state, pvdisplay_t display, pvdisplay_segment_t segment, char *buffer, - size_t buffer_size, size_t offset) +size_t pv_formatter_average_rate(pvformatter_args_t args) { char content[128]; /* flawfinder: ignore - always bounded */ content[0] = '\0'; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; /*@-mustfreefresh@ */ - if (state->control.bits && !state->control.linemode) { + if (args->state->control.bits && !args->state->control.linemode) { /* bits per second */ pv_describe_amount(content, sizeof(content), - "(%s)", 8 * state->calc.average_rate, "", _("b/s"), display->count_type); + "(%s)", 8 * args->state->calc.average_rate, "", _("b/s"), args->display->count_type); } else { /* bytes or lines per second */ pv_describe_amount(content, - sizeof(content), "(%s)", state->calc.average_rate, _("/s"), _("B/s"), display->count_type); + sizeof(content), "(%s)", args->state->calc.average_rate, _("/s"), _("B/s"), args->display->count_type); } /*@+mustfreefresh@ *//* splint: see above. */ - return pv_formatter_segmentcontent(content, segment, buffer, buffer_size, offset); + return pv_formatter_segmentcontent(content, args); } diff --git a/src/pv/format/bufferpercent.c b/src/pv/format/bufferpercent.c index 6d2eb32..b1a6c84 100644 --- a/src/pv/format/bufferpercent.c +++ b/src/pv/format/bufferpercent.c @@ -14,27 +14,26 @@ /* * Percentage transfer buffer utilisation. */ -size_t pv_formatter_buffer_percent(pvstate_t state, /*@unused@ */ __attribute__((unused)) pvdisplay_t display, - pvdisplay_segment_t segment, char *buffer, size_t buffer_size, size_t offset) +size_t pv_formatter_buffer_percent(pvformatter_args_t args) { char content[16]; /* flawfinder: ignore - always bounded */ content[0] = '\0'; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; - if (state->transfer.buffer_size > 0) { + if (args->state->transfer.buffer_size > 0) { int pct_used = pv_percentage((off_t) - (state->transfer.read_position - state->transfer.write_position), + (args->state->transfer.read_position - args->state->transfer.write_position), (off_t) - (state->transfer.buffer_size)); + (args->state->transfer.buffer_size)); (void) pv_snprintf(content, sizeof(content), "{%3d%%}", pct_used); } #ifdef HAVE_SPLICE - if (state->transfer.splice_used) + if (args->state->transfer.splice_used) (void) pv_snprintf(content, sizeof(content), "{%s}", "----"); #endif - return pv_formatter_segmentcontent(content, segment, buffer, buffer_size, offset); + return pv_formatter_segmentcontent(content, args); } diff --git a/src/pv/format/bytes.c b/src/pv/format/bytes.c index 12d86dd..395c5ca 100644 --- a/src/pv/format/bytes.c +++ b/src/pv/format/bytes.c @@ -14,27 +14,26 @@ /* * Number of bytes or lines transferred. */ -size_t pv_formatter_bytes(pvstate_t state, pvdisplay_t display, pvdisplay_segment_t segment, char *buffer, - size_t buffer_size, size_t offset) +size_t pv_formatter_bytes(pvformatter_args_t args) { char content[128]; /* flawfinder: ignore - always bounded */ - display->showing_bytes = true; + args->display->showing_bytes = true; content[0] = '\0'; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; /*@-mustfreefresh@ */ - if (state->control.bits && !state->control.linemode) { + if (args->state->control.bits && !args->state->control.linemode) { pv_describe_amount(content, sizeof(content), "%s", - (long double) (state->transfer.transferred * 8), "", _("b"), display->count_type); + (long double) (args->state->transfer.transferred * 8), "", _("b"), args->display->count_type); } else { pv_describe_amount(content, sizeof(content), "%s", - (long double) (state->transfer.transferred), "", _("B"), display->count_type); + (long double) (args->state->transfer.transferred), "", _("B"), args->display->count_type); } /*@+mustfreefresh@ *//* splint - false positive from gettext(). */ - return pv_formatter_segmentcontent(content, segment, buffer, buffer_size, offset); + return pv_formatter_segmentcontent(content, args); } diff --git a/src/pv/format/eta.c b/src/pv/format/eta.c index 9916690..96062ab 100644 --- a/src/pv/format/eta.c +++ b/src/pv/format/eta.c @@ -14,8 +14,7 @@ /* * Estimated time until completion. */ -size_t pv_formatter_eta(pvstate_t state, pvdisplay_t display, pvdisplay_segment_t segment, char *buffer, - size_t buffer_size, size_t offset) +size_t pv_formatter_eta(pvformatter_args_t args) { char content[128]; /* flawfinder: ignore - always bounded */ long eta; @@ -25,15 +24,15 @@ size_t pv_formatter_eta(pvstate_t state, pvdisplay_t display, pvdisplay_segment_ /* * Don't try to calculate this if the size is not known. */ - if (state->control.size < 1) + if (args->state->control.size < 1) return 0; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; eta = - pv_seconds_remaining((state->transfer.transferred - display->initial_offset), - state->control.size - display->initial_offset, state->calc.current_avg_rate); + pv_seconds_remaining((args->state->transfer.transferred - args->display->initial_offset), + args->state->control.size - args->display->initial_offset, args->state->calc.current_avg_rate); /* * Bounds check, so we don't overrun the suffix buffer. This means @@ -62,12 +61,12 @@ size_t pv_formatter_eta(pvstate_t state, pvdisplay_t display, pvdisplay_segment_ * If this is the final update, show a blank space where the ETA * used to be. */ - if (display->final_update) { + if (args->display->final_update) { size_t erase_idx; for (erase_idx = 0; erase_idx < sizeof(content) && content[erase_idx] != '\0'; erase_idx++) { content[erase_idx] = ' '; } } - return pv_formatter_segmentcontent(content, segment, buffer, buffer_size, offset); + return pv_formatter_segmentcontent(content, args); } diff --git a/src/pv/format/fineta.c b/src/pv/format/fineta.c index 2842490..9d5f3ca 100644 --- a/src/pv/format/fineta.c +++ b/src/pv/format/fineta.c @@ -18,8 +18,7 @@ /* * Estimated local time of completion. */ -size_t pv_formatter_fineta(pvstate_t state, pvdisplay_t display, pvdisplay_segment_t segment, char *buffer, - size_t buffer_size, size_t offset) +size_t pv_formatter_fineta(pvformatter_args_t args) { char content[128]; /* flawfinder: ignore - always bounded */ time_t now, then; @@ -33,10 +32,10 @@ size_t pv_formatter_fineta(pvstate_t state, pvdisplay_t display, pvdisplay_segme /* * Don't try to calculate this if the size is not known. */ - if (state->control.size < 1) + if (args->state->control.size < 1) return 0; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; now = time(NULL); @@ -48,8 +47,8 @@ size_t pv_formatter_fineta(pvstate_t state, pvdisplay_t display, pvdisplay_segme * lookup. */ - eta = pv_seconds_remaining(state->transfer.transferred - display->initial_offset, - state->control.size - display->initial_offset, state->calc.current_avg_rate); + eta = pv_seconds_remaining(args->state->transfer.transferred - args->display->initial_offset, + args->state->control.size - args->display->initial_offset, args->state->calc.current_avg_rate); /* Bounds check - see pv_formatter_eta(). */ eta = pv_bound_long(eta, 0, (long) 360000000L); @@ -92,5 +91,5 @@ size_t pv_formatter_fineta(pvstate_t state, pvdisplay_t display, pvdisplay_segme } } - return pv_formatter_segmentcontent(content, segment, buffer, buffer_size, offset); + return pv_formatter_segmentcontent(content, args); } diff --git a/src/pv/format/lastwritten.c b/src/pv/format/lastwritten.c index cf39b93..953cd09 100644 --- a/src/pv/format/lastwritten.c +++ b/src/pv/format/lastwritten.c @@ -14,42 +14,40 @@ /* * Display the last few bytes written. * - * As a side effect, this sets display->lastwritten_bytes to the segment's - * chosen_size, if it was previously smaller than that. + * As a side effect, this sets args->display->lastwritten_bytes to + * the segment's chosen_size, if it was previously smaller than that. */ -size_t pv_formatter_last_written( /*@unused@ */ - __attribute__((unused)) pvstate_t state, pvdisplay_t display, - pvdisplay_segment_t segment, char *buffer, size_t buffer_size, - size_t offset) +size_t pv_formatter_last_written(pvformatter_args_t args) { - size_t bytes_to_show, read_offset, remaining; + size_t bytes_to_show, read_offset, write_offset, remaining; - display->showing_last_written = true; + args->display->showing_last_written = true; - bytes_to_show = segment->chosen_size; + bytes_to_show = args->segment->chosen_size; if (0 == bytes_to_show) - bytes_to_show = segment->width; + bytes_to_show = args->segment->width; if (0 == bytes_to_show) return 0; if (bytes_to_show > PV_SIZEOF_LASTWRITTEN_BUFFER) bytes_to_show = PV_SIZEOF_LASTWRITTEN_BUFFER; - if (bytes_to_show > display->lastwritten_bytes) - display->lastwritten_bytes = bytes_to_show; + if (bytes_to_show > args->display->lastwritten_bytes) + args->display->lastwritten_bytes = bytes_to_show; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; - if (offset + bytes_to_show >= buffer_size) + if (args->offset + bytes_to_show >= args->buffer_size) return 0; - segment->offset = offset; - segment->bytes = bytes_to_show; + args->segment->offset = args->offset; + args->segment->bytes = bytes_to_show; - read_offset = display->lastwritten_bytes - bytes_to_show; + read_offset = args->display->lastwritten_bytes - bytes_to_show; + write_offset = args->offset; for (remaining = bytes_to_show; remaining > 0; remaining--) { - char display_char = display->lastwritten_buffer[read_offset++]; - buffer[offset++] = pv_isprint(display_char) ? display_char : '.'; + char display_char = args->display->lastwritten_buffer[read_offset++]; + args->buffer[write_offset++] = pv_isprint(display_char) ? display_char : '.'; } return bytes_to_show; diff --git a/src/pv/format/name.c b/src/pv/format/name.c index 9583063..ed636a2 100644 --- a/src/pv/format/name.c +++ b/src/pv/format/name.c @@ -16,17 +16,16 @@ /* * Display the transfer's name. */ -size_t pv_formatter_name(pvstate_t state, /*@unused@ */ __attribute__((unused)) pvdisplay_t display, - pvdisplay_segment_t segment, char *buffer, size_t buffer_size, size_t offset) +size_t pv_formatter_name(pvformatter_args_t args) { char string_format[32]; /* flawfinder: ignore - always bounded */ char content[512]; /* flawfinder: ignore - always bounded */ size_t field_width; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; - field_width = segment->chosen_size; + field_width = args->segment->chosen_size; if (field_width < 1) field_width = 9; if (field_width > 500) @@ -36,9 +35,9 @@ size_t pv_formatter_name(pvstate_t state, /*@unused@ */ __attribute__((unused)) (void) pv_snprintf(string_format, sizeof(string_format), "%%%d.500s:", field_width); content[0] = '\0'; - if (state->control.name) { - (void) pv_snprintf(content, sizeof(content), string_format, state->control.name); + if (args->state->control.name) { + (void) pv_snprintf(content, sizeof(content), string_format, args->state->control.name); } - return pv_formatter_segmentcontent(content, segment, buffer, buffer_size, offset); + return pv_formatter_segmentcontent(content, args); } diff --git a/src/pv/format/previousline.c b/src/pv/format/previousline.c index 39d9b18..527d492 100644 --- a/src/pv/format/previousline.c +++ b/src/pv/format/previousline.c @@ -14,37 +14,35 @@ /* * Display the previously written line. */ -size_t pv_formatter_previous_line( /*@unused@ */ - __attribute__((unused)) pvstate_t state, pvdisplay_t display, - pvdisplay_segment_t segment, char *buffer, size_t buffer_size, - size_t offset) +size_t pv_formatter_previous_line(pvformatter_args_t args) { - size_t bytes_to_show, read_offset, remaining; + size_t bytes_to_show, read_offset, write_offset, remaining; - display->showing_previous_line = true; + args->display->showing_previous_line = true; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; - bytes_to_show = segment->chosen_size; + bytes_to_show = args->segment->chosen_size; if (0 == bytes_to_show) - bytes_to_show = segment->width; + bytes_to_show = args->segment->width; if (0 == bytes_to_show) return 0; if (bytes_to_show > PV_SIZEOF_PREVLINE_BUFFER) bytes_to_show = PV_SIZEOF_PREVLINE_BUFFER; - if (offset + bytes_to_show >= buffer_size) + if (args->offset + bytes_to_show >= args->buffer_size) return 0; - segment->offset = offset; - segment->bytes = bytes_to_show; + args->segment->offset = args->offset; + args->segment->bytes = bytes_to_show; read_offset = 0; + write_offset = args->offset; for (remaining = bytes_to_show; remaining > 0; remaining--) { - char display_char = display->previous_line[read_offset++]; - buffer[offset++] = pv_isprint(display_char) ? display_char : ' '; + char display_char = args->display->previous_line[read_offset++]; + args->buffer[write_offset++] = pv_isprint(display_char) ? display_char : ' '; } return bytes_to_show; diff --git a/src/pv/format/progressbar.c b/src/pv/format/progressbar.c index d8dc4ce..6dc73e4 100644 --- a/src/pv/format/progressbar.c +++ b/src/pv/format/progressbar.c @@ -233,82 +233,79 @@ static size_t pv_formatter_progress_unknownsize(pvstate_t state, /*@unused@ */ /* * Progress bar. */ -size_t pv_formatter_progress(pvstate_t state, pvdisplay_t display, pvdisplay_segment_t segment, char *buffer, - size_t buffer_size, size_t offset) +size_t pv_formatter_progress(pvformatter_args_t args) { char content[1024]; /* flawfinder: ignore - always bounded */ size_t bytes; content[0] = '\0'; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; - if (state->control.size > 0 || state->control.rate_gauge) { + if (args->state->control.size > 0 || args->state->control.rate_gauge) { /* Known size or rate gauge - bar with percentage. */ bytes = - pv_formatter_progress_knownsize(state, display, content, sizeof(content), segment->width, true, true, + pv_formatter_progress_knownsize(args->state, args->display, content, sizeof(content), args->segment->width, true, true, true); } else { /* Unknown size - back-and-forth moving indicator. */ - bytes = pv_formatter_progress_unknownsize(state, display, content, sizeof(content), segment->width, true); + bytes = pv_formatter_progress_unknownsize(args->state, args->display, content, sizeof(content), args->segment->width, true); } content[bytes] = '\0'; - return pv_formatter_segmentcontent(content, segment, buffer, buffer_size, offset); + return pv_formatter_segmentcontent(content, args); } /* * Progress bar, without sides and without a number afterwards. */ -size_t pv_formatter_progress_bar_only(pvstate_t state, pvdisplay_t display, pvdisplay_segment_t segment, - char *buffer, size_t buffer_size, size_t offset) +size_t pv_formatter_progress_bar_only(pvformatter_args_t args) { char content[1024]; /* flawfinder: ignore - always bounded */ size_t bytes; content[0] = '\0'; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; - if (state->control.size > 0 || state->control.rate_gauge) { + if (args->state->control.size > 0 || args->state->control.rate_gauge) { /* Known size or rate gauge - bar with percentage. */ bytes = - pv_formatter_progress_knownsize(state, display, content, sizeof(content), segment->width, false, true, + pv_formatter_progress_knownsize(args->state, args->display, content, sizeof(content), args->segment->width, false, true, false); } else { /* Unknown size - back-and-forth moving indicator. */ bytes = - pv_formatter_progress_unknownsize(state, display, content, sizeof(content), segment->width, false); + pv_formatter_progress_unknownsize(args->state, args->display, content, sizeof(content), args->segment->width, false); } content[bytes] = '\0'; - return pv_formatter_segmentcontent(content, segment, buffer, buffer_size, offset); + return pv_formatter_segmentcontent(content, args); } /* * The number after the progress bar. */ -size_t pv_formatter_progress_amount_only(pvstate_t state, pvdisplay_t display, pvdisplay_segment_t segment, - char *buffer, size_t buffer_size, size_t offset) +size_t pv_formatter_progress_amount_only(pvformatter_args_t args) { char content[256]; /* flawfinder: ignore - always bounded */ size_t bytes; content[0] = '\0'; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; - if (state->control.size > 0 || state->control.rate_gauge) { + if (args->state->control.size > 0 || args->state->control.rate_gauge) { /* Known size or rate gauge - percentage or rate. */ bytes = - pv_formatter_progress_knownsize(state, display, content, sizeof(content), segment->width, false, + pv_formatter_progress_knownsize(args->state, args->display, content, sizeof(content), args->segment->width, false, false, true); } else { /* Unknown size - no number. */ @@ -317,5 +314,5 @@ size_t pv_formatter_progress_amount_only(pvstate_t state, pvdisplay_t display, p content[bytes] = '\0'; - return pv_formatter_segmentcontent(content, segment, buffer, buffer_size, offset); + return pv_formatter_segmentcontent(content, args); } diff --git a/src/pv/format/rate.c b/src/pv/format/rate.c index 3740660..7253851 100644 --- a/src/pv/format/rate.c +++ b/src/pv/format/rate.c @@ -14,29 +14,28 @@ /* * Transfer rate. */ -size_t pv_formatter_rate(pvstate_t state, pvdisplay_t display, pvdisplay_segment_t segment, char *buffer, - size_t buffer_size, size_t offset) +size_t pv_formatter_rate(pvformatter_args_t args) { char content[128]; /* flawfinder: ignore - always bounded */ - display->showing_rate = true; + args->display->showing_rate = true; content[0] = '\0'; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; /*@-mustfreefresh@ */ - if (state->control.bits && !state->control.linemode) { + if (args->state->control.bits && !args->state->control.linemode) { /* bits per second */ pv_describe_amount(content, sizeof(content), "[%s]", - 8 * state->calc.transfer_rate, "", _("b/s"), display->count_type); + 8 * args->state->calc.transfer_rate, "", _("b/s"), args->display->count_type); } else { /* bytes or lines per second */ pv_describe_amount(content, sizeof(content), - "[%s]", state->calc.transfer_rate, _("/s"), _("B/s"), display->count_type); + "[%s]", args->state->calc.transfer_rate, _("/s"), _("B/s"), args->display->count_type); } /*@+mustfreefresh@ *//* splint: see above. */ - return pv_formatter_segmentcontent(content, segment, buffer, buffer_size, offset); + return pv_formatter_segmentcontent(content, args); } diff --git a/src/pv/format/timer.c b/src/pv/format/timer.c index 7de60e2..eda6c04 100644 --- a/src/pv/format/timer.c +++ b/src/pv/format/timer.c @@ -14,16 +14,15 @@ /* * Elapsed time. */ -size_t pv_formatter_timer(pvstate_t state, pvdisplay_t display, pvdisplay_segment_t segment, char *buffer, - size_t buffer_size, size_t offset) +size_t pv_formatter_timer(pvformatter_args_t args) { char content[128]; /* flawfinder: ignore - always bounded */ - display->showing_timer = true; + args->display->showing_timer = true; content[0] = '\0'; - if (0 == buffer_size) + if (0 == args->buffer_size) return 0; /* @@ -31,29 +30,29 @@ size_t pv_formatter_timer(pvstate_t state, pvdisplay_t display, pvdisplay_segmen * mean that the timer will stop at a 100,000 hours, but since * that's 11 years, it shouldn't be a problem. */ - if (state->transfer.elapsed_seconds > (long double) 360000000.0L) - state->transfer.elapsed_seconds = (long double) 360000000.0L; + if (args->state->transfer.elapsed_seconds > (long double) 360000000.0L) + args->state->transfer.elapsed_seconds = (long double) 360000000.0L; /* * If the elapsed time is more than a day, include a day count as * well as hours, minutes, and seconds. */ - if (state->transfer.elapsed_seconds > (long double) 86400.0L) { + if (args->state->transfer.elapsed_seconds > (long double) 86400.0L) { (void) pv_snprintf(content, sizeof(content), "%ld:%02ld:%02ld:%02ld", - ((long) (state->transfer.elapsed_seconds)) / 86400, - (((long) (state->transfer.elapsed_seconds)) / 3600) % - 24, (((long) (state->transfer.elapsed_seconds)) / 60) % 60, - ((long) (state->transfer.elapsed_seconds)) % 60); + ((long) (args->state->transfer.elapsed_seconds)) / 86400, + (((long) (args->state->transfer.elapsed_seconds)) / 3600) % + 24, (((long) (args->state->transfer.elapsed_seconds)) / 60) % 60, + ((long) (args->state->transfer.elapsed_seconds)) % 60); } else { (void) pv_snprintf(content, sizeof(content), "%ld:%02ld:%02ld", - ((long) (state->transfer.elapsed_seconds)) / 3600, - (((long) (state->transfer.elapsed_seconds)) / 60) % 60, - ((long) (state->transfer.elapsed_seconds)) % 60); + ((long) (args->state->transfer.elapsed_seconds)) / 3600, + (((long) (args->state->transfer.elapsed_seconds)) / 60) % 60, + ((long) (args->state->transfer.elapsed_seconds)) % 60); } - return pv_formatter_segmentcontent(content, segment, buffer, buffer_size, offset); + return pv_formatter_segmentcontent(content, args); }