Track the chosen size of format segments so that "%nA" can appear more than once, with different "n" values (#122).

This commit is contained in:
Andrew Wood
2024-12-07 19:39:44 +00:00
parent c4c7b9ec00
commit 53b5ea54c6
11 changed files with 102 additions and 77 deletions
+1
View File
@@ -1,5 +1,6 @@
### UNRELEASED
* *feature:* allow **--format** to include "%nA" more than once, with different "n" valeus (#122)
* *fix:* add _configure_ script fallback for **--remote** check when cross-compiling (#120)
* *fix:* allow **extra-display** to be changed by **--remote** (#123)
+9 -9
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-07 02:08+0000\n"
"POT-Creation-Date: 2024-12-07 19:37+0000\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"
@@ -403,37 +403,37 @@ msgstr "yzafpnum kMGTPEZY"
msgid "yzafpnum KMGTPEZY"
msgstr "yzafpnum KMGTPEZY"
#: src/pv/display.c:681 src/pv/transfer.c:1011
#: src/pv/display.c:686 src/pv/transfer.c:1011
msgid "buffer allocation failed"
msgstr "selhala alokace vyrovnávací paměti"
#: src/pv/display.c:810
#: src/pv/display.c:815
msgid "b"
msgstr "b"
#: src/pv/display.c:813 src/pv/transfer.c:602
#: src/pv/display.c:818 src/pv/transfer.c:602
msgid "B"
msgstr "B"
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/display.c:862 src/pv/display.c:877 src/pv/display.c:1099
#: src/pv/loop.c:549
msgid "b/s"
msgstr "b/s"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
msgid "/s"
msgstr "/s"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
#: src/pv/loop.c:549
msgid "B/s"
msgstr "B/s"
#: src/pv/display.c:904 src/pv/display.c:908
#: src/pv/display.c:909 src/pv/display.c:913
msgid "ETA"
msgstr "ETA"
#: src/pv/display.c:974
#: src/pv/display.c:979
msgid "FIN"
msgstr "FIN"
+9 -9
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-07 02:08+0000\n"
"POT-Creation-Date: 2024-12-07 19:37+0000\n"
"PO-Revision-Date: 2024-10-13 20:43+0000\n"
"Last-Translator: fnetX <otto@codeberg.org>\n"
"Language-Team: German <https://translate.codeberg.org/projects/pv/pv/de/>\n"
@@ -426,37 +426,37 @@ msgstr "yzafpnµm kMGTPEZY"
msgid "yzafpnum KMGTPEZY"
msgstr "yzafpnµm KMGTPEZY"
#: src/pv/display.c:681 src/pv/transfer.c:1011
#: src/pv/display.c:686 src/pv/transfer.c:1011
msgid "buffer allocation failed"
msgstr "Speicherzuweisung für den Puffer fehlgeschlagen"
#: src/pv/display.c:810
#: src/pv/display.c:815
msgid "b"
msgstr "b"
#: src/pv/display.c:813 src/pv/transfer.c:602
#: src/pv/display.c:818 src/pv/transfer.c:602
msgid "B"
msgstr "B"
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/display.c:862 src/pv/display.c:877 src/pv/display.c:1099
#: src/pv/loop.c:549
msgid "b/s"
msgstr "b/s"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
msgid "/s"
msgstr "/s"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
#: src/pv/loop.c:549
msgid "B/s"
msgstr "B/s"
#: src/pv/display.c:904 src/pv/display.c:908
#: src/pv/display.c:909 src/pv/display.c:913
msgid "ETA"
msgstr "ETA"
#: src/pv/display.c:974
#: src/pv/display.c:979
msgid "FIN"
msgstr "Endzeit"
+9 -9
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-07 02:08+0000\n"
"POT-Creation-Date: 2024-12-07 19:37+0000\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -395,37 +395,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY"
msgstr ""
#: src/pv/display.c:681 src/pv/transfer.c:1011
#: src/pv/display.c:686 src/pv/transfer.c:1011
msgid "buffer allocation failed"
msgstr ""
#: src/pv/display.c:810
#: src/pv/display.c:815
msgid "b"
msgstr ""
#: src/pv/display.c:813 src/pv/transfer.c:602
#: src/pv/display.c:818 src/pv/transfer.c:602
msgid "B"
msgstr ""
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/display.c:862 src/pv/display.c:877 src/pv/display.c:1099
#: src/pv/loop.c:549
msgid "b/s"
msgstr ""
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
msgid "/s"
msgstr ""
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
#: src/pv/loop.c:549
msgid "B/s"
msgstr ""
#: src/pv/display.c:904 src/pv/display.c:908
#: src/pv/display.c:909 src/pv/display.c:913
msgid "ETA"
msgstr ""
#: src/pv/display.c:974
#: src/pv/display.c:979
msgid "FIN"
msgstr ""
+9 -9
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-07 02:08+0000\n"
"POT-Creation-Date: 2024-12-07 19:37+0000\n"
"PO-Revision-Date: 2024-10-12 11:13+0000\n"
"Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n"
"Language-Team: French <https://translate.codeberg.org/projects/pv/pv/fr/>\n"
@@ -430,37 +430,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY"
msgstr ""
#: src/pv/display.c:681 src/pv/transfer.c:1011
#: src/pv/display.c:686 src/pv/transfer.c:1011
msgid "buffer allocation failed"
msgstr "échec de l'allocation de mémoire tampon"
#: src/pv/display.c:810
#: src/pv/display.c:815
msgid "b"
msgstr ""
#: src/pv/display.c:813 src/pv/transfer.c:602
#: src/pv/display.c:818 src/pv/transfer.c:602
msgid "B"
msgstr "O"
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/display.c:862 src/pv/display.c:877 src/pv/display.c:1099
#: src/pv/loop.c:549
msgid "b/s"
msgstr ""
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
msgid "/s"
msgstr "/s"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
#: src/pv/loop.c:549
msgid "B/s"
msgstr "O/s"
#: src/pv/display.c:904 src/pv/display.c:908
#: src/pv/display.c:909 src/pv/display.c:913
msgid "ETA"
msgstr "ETA"
#: src/pv/display.c:974
#: src/pv/display.c:979
msgid "FIN"
msgstr ""
+9 -9
View File
@@ -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-07 02:08+0000\n"
"POT-Creation-Date: 2024-12-07 19:37+0000\n"
"PO-Revision-Date: 2024-10-20 14:07+0000\n"
"Last-Translator: coralpink <coralpink@users.noreply.translate.codeberg.org>\n"
"Language-Team: Polish <https://translate.codeberg.org/projects/pv/pv/pl/>\n"
@@ -421,37 +421,37 @@ msgstr "yzafpnum kMGTPEZY"
msgid "yzafpnum KMGTPEZY"
msgstr "yzafpnum KMGTPEZY"
#: src/pv/display.c:681 src/pv/transfer.c:1011
#: src/pv/display.c:686 src/pv/transfer.c:1011
msgid "buffer allocation failed"
msgstr "nie udało się zaalokować bufora"
#: src/pv/display.c:810
#: src/pv/display.c:815
msgid "b"
msgstr "b"
#: src/pv/display.c:813 src/pv/transfer.c:602
#: src/pv/display.c:818 src/pv/transfer.c:602
msgid "B"
msgstr "B"
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/display.c:862 src/pv/display.c:877 src/pv/display.c:1099
#: src/pv/loop.c:549
msgid "b/s"
msgstr "b/s"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
msgid "/s"
msgstr "/s"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
#: src/pv/loop.c:549
msgid "B/s"
msgstr "B/s"
#: src/pv/display.c:904 src/pv/display.c:908
#: src/pv/display.c:909 src/pv/display.c:913
msgid "ETA"
msgstr "ETA"
#: src/pv/display.c:974
#: src/pv/display.c:979
msgid "FIN"
msgstr "FIN"
+9 -9
View File
@@ -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-07 02:08+0000\n"
"POT-Creation-Date: 2024-12-07 19:37+0000\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"
@@ -409,37 +409,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY"
msgstr ""
#: src/pv/display.c:681 src/pv/transfer.c:1011
#: src/pv/display.c:686 src/pv/transfer.c:1011
msgid "buffer allocation failed"
msgstr "erro alocando o buffer"
#: src/pv/display.c:810
#: src/pv/display.c:815
msgid "b"
msgstr ""
#: src/pv/display.c:813 src/pv/transfer.c:602
#: src/pv/display.c:818 src/pv/transfer.c:602
msgid "B"
msgstr ""
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/display.c:862 src/pv/display.c:877 src/pv/display.c:1099
#: src/pv/loop.c:549
msgid "b/s"
msgstr ""
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
msgid "/s"
msgstr ""
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
#: src/pv/loop.c:549
msgid "B/s"
msgstr "B/s"
#: src/pv/display.c:904 src/pv/display.c:908
#: src/pv/display.c:909 src/pv/display.c:913
msgid "ETA"
msgstr "ETA"
#: src/pv/display.c:974
#: src/pv/display.c:979
msgid "FIN"
msgstr ""
+9 -9
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-07 02:08+0000\n"
"POT-Creation-Date: 2024-12-07 19:37+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 <https://translate.codeberg.org/projects/pv/pv/ru/>\n"
@@ -404,37 +404,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY"
msgstr ""
#: src/pv/display.c:681 src/pv/transfer.c:1011
#: src/pv/display.c:686 src/pv/transfer.c:1011
msgid "buffer allocation failed"
msgstr "не удалось выделить память для буфера"
#: src/pv/display.c:810
#: src/pv/display.c:815
msgid "b"
msgstr "бит"
#: src/pv/display.c:813 src/pv/transfer.c:602
#: src/pv/display.c:818 src/pv/transfer.c:602
msgid "B"
msgstr "байт"
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/display.c:862 src/pv/display.c:877 src/pv/display.c:1099
#: src/pv/loop.c:549
msgid "b/s"
msgstr "бит/с"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
msgid "/s"
msgstr "/с"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
#: src/pv/loop.c:549
msgid "B/s"
msgstr "байт/с"
#: src/pv/display.c:904 src/pv/display.c:908
#: src/pv/display.c:909 src/pv/display.c:913
msgid "ETA"
msgstr "ОЖИД"
#: src/pv/display.c:974
#: src/pv/display.c:979
msgid "FIN"
msgstr "ЗАВЕРШ"
+9 -9
View File
@@ -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-07 02:08+0000\n"
"POT-Creation-Date: 2024-12-07 19:37+0000\n"
"PO-Revision-Date: 2024-10-12 23:51+0000\n"
"Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n"
"Language-Team: Turkish <https://translate.codeberg.org/projects/pv/pv/tr/>\n"
@@ -405,37 +405,37 @@ msgstr "yzafpnum kMGTPEZY"
msgid "yzafpnum KMGTPEZY"
msgstr "yzafpnum KMGTPEZY"
#: src/pv/display.c:681 src/pv/transfer.c:1011
#: src/pv/display.c:686 src/pv/transfer.c:1011
msgid "buffer allocation failed"
msgstr "arabellek tahsisi başarısız oldu"
#: src/pv/display.c:810
#: src/pv/display.c:815
msgid "b"
msgstr "b"
#: src/pv/display.c:813 src/pv/transfer.c:602
#: src/pv/display.c:818 src/pv/transfer.c:602
msgid "B"
msgstr "B"
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/display.c:862 src/pv/display.c:877 src/pv/display.c:1099
#: src/pv/loop.c:549
msgid "b/s"
msgstr "b/s"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
msgid "/s"
msgstr "/s"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/display.c:866 src/pv/display.c:881 src/pv/display.c:1103
#: src/pv/loop.c:549
msgid "B/s"
msgstr "B/s"
#: src/pv/display.c:904 src/pv/display.c:908
#: src/pv/display.c:909 src/pv/display.c:913
msgid "ETA"
msgstr "ETA"
#: src/pv/display.c:974
#: src/pv/display.c:979
msgid "FIN"
msgstr "FIN"
+2 -1
View File
@@ -192,6 +192,7 @@ struct pvstate_s {
struct { /* format string broken into display components */
size_t str_start; /* for strings: start offset */
size_t str_bytes; /* for strings: length in bytes */
size_t chosen_size; /* "n" from %<n>A, or 0 */
pv_display_component type; /* type of display component */
} format[PV_FORMAT_ARRAY_MAX];
@@ -207,7 +208,7 @@ struct pvstate_s {
size_t display_buffer_size; /* size allocated to display buffer */
size_t display_string_len; /* length of string in display buffer */
off_t initial_offset; /* offset when first opened (when watching fds) */
size_t lastoutput_bytes; /* number of last-output bytes to show */
size_t lastoutput_bytes; /* largest number of last-output bytes to show */
size_t format_segment_count; /* number of format string segments */
+27 -4
View File
@@ -477,7 +477,9 @@ static void pv__format_init(pvstate_t state, /*@null@ */ const char *format_supp
segment = 0;
for (strpos = 0; format_used[strpos] != '\0' && segment < PV_FORMAT_ARRAY_MAX; strpos++, segment++) {
pv_display_component seg_type;
size_t str_start, str_bytes;
size_t str_start, str_bytes, chosen_size;
chosen_size = 0;
if ('%' == format_used[strpos]) {
unsigned long number_prefix;
@@ -529,7 +531,9 @@ static void pv__format_init(pvstate_t state, /*@null@ */ const char *format_supp
number_prefix = PV_SIZEOF_LASTOUTPUT_BUFFER;
if (number_prefix < 1)
number_prefix = 1;
display->lastoutput_bytes = (size_t) number_prefix;
chosen_size = (size_t) number_prefix;
if (display->lastoutput_bytes < chosen_size)
display->lastoutput_bytes = chosen_size;
break;
case 'r':
seg_type = PV_COMPONENT_RATE;
@@ -590,6 +594,7 @@ static void pv__format_init(pvstate_t state, /*@null@ */ const char *format_supp
display->format[segment].type = seg_type;
display->format[segment].str_start = str_start;
display->format[segment].str_bytes = str_bytes;
display->format[segment].chosen_size = chosen_size;
display->format_segment_count++;
}
}
@@ -1043,7 +1048,10 @@ bool pv_format(pvstate_t state, /*@null@ */ const char *format_supplied, pvdispl
if (display->format[segment].type == PV_COMPONENT_STRING) {
static_portion_size += display->format[segment].str_bytes;
} else if (display->format[segment].type != PV_COMPONENT_PROGRESS) {
static_portion_size += display->component[display->format[segment].type].bytes;
size_t segment_width = display->format[segment].chosen_size;
if (0 == segment_width)
segment_width = display->component[display->format[segment].type].bytes;
static_portion_size += segment_width;
}
}
@@ -1203,7 +1211,9 @@ bool pv_format(pvstate_t state, /*@null@ */ const char *format_supplied, pvdispl
new_display_string_len = 0;
for (segment = 0; segment < display->format_segment_count; segment++) {
const char *segment_content;
size_t segment_bytes;
size_t segment_bytes, chosen_size;
chosen_size = display->format[segment].chosen_size;
if (display->format[segment].type == PV_COMPONENT_STRING) {
segment_content = &(format_used[display->format[segment].str_start]);
@@ -1211,6 +1221,19 @@ bool pv_format(pvstate_t state, /*@null@ */ const char *format_supplied, pvdispl
} else {
segment_content = display->component[display->format[segment].type].content;
segment_bytes = display->component[display->format[segment].type].bytes;
/*
* If the segment's chosen size is smaller than the
* component, show only the last part of it. For
* instance with "show N last output bytes" (%nA),
* if one "n" was 16 and the other 8, then for the 8
* one, we show the last 8 bytes of the 16-byte
* buffer (issue #122).
*/
if (0 != chosen_size && chosen_size < segment_bytes) {
segment_content += (segment_bytes - chosen_size);
segment_bytes = chosen_size;
}
}
/* Skip empty segments. */