24 Commits
Author SHA1 Message Date
Andrew Wood b089303505 Version update. 2024-04-21 14:20:26 +01:00
Andrew Wood 8992e98c8d Line number adjustments from "make update-po". 2024-04-21 14:18:48 +01:00
Andrew Wood 205245f269 Issue #6 had only one outstanding action which was a duplicate of #34, so it is now removed. 2024-04-21 14:00:31 +01:00
Andrew Wood b375041790 Correct issues #34, #86, #87 - progress output stopping when writing output data blocks - by adding a SIGALRM handler, since ignoring the signal prevents it from interrupting writes; and use setitimer() where available, instead of alarm(), to provide sufficient granularity to handle the case where the --interval is not a whole number of seconds. 2024-04-21 13:54:01 +01:00
Andrew Wood 3a41665302 Fix incorrect "%lf" string format. 2024-04-21 12:02:35 +01:00
Andrew Wood f6686b8188 Minor formatting changes by "indent". 2024-04-21 12:01:52 +01:00
Andrew Wood 31b43cf3c7 Formatting correction. 2024-04-21 11:32:26 +01:00
Andrew Wood e483b19c14 Formatting correction. 2024-04-21 11:31:54 +01:00
Andrew Wood 50b400a1f8 Formatting correction. 2024-04-21 11:31:26 +01:00
Andrew Wood d90dc35dd3 Formatting correction. 2024-04-21 11:30:46 +01:00
Andrew Wood b45970b3b6 Added the ENVIRONMENT section. 2024-04-21 11:27:51 +01:00
Andrew Wood a5700cc914 Reinstate the use of $TMPDIR and $TMP in cursor positioning rather than hard-coding "/tmp" (#88). 2024-04-20 21:46:23 +01:00
Andrew Wood d3c59cbff3 Minor comment formatting correction. 2024-04-20 21:31:17 +01:00
Andrew Wood 8bc1cc28d0 Check for zero-length $HOME and document the reason flawfinder's warning is being ignored. 2024-04-20 21:01:04 +01:00
Andrew Wood 1ad9c321bc Adjust copyright years. 2024-03-19 22:19:42 +00:00
Andrew Wood c9dede08d4 Adjust the decimal units flag variable name from "si" to "decimal_units" so it does not overlap with other words like "size" and "signal"; add man page entry and adjust the "-L" man page entry; and allow this flag to also change how input prefixes are processed. 2024-03-19 22:17:43 +00:00
Andrew Wood 3b721112e6 Acknowledge pull request #85. 2024-03-19 21:42:08 +00:00
Andrew Wood 0093fb8276 Merge pull request 'Support for decimal SI units' (#85) from kevinruddy/pv:si-patch into main
Reviewed-on: https://codeberg.org/a-j-wood/pv/pulls/85
2024-03-19 21:30:01 +00:00
kevinruddy fe8137521a Support for decimal SI units 2024-03-19 16:57:57 -04:00
Andrew Wood 2bc7a1bb10 Added #83. 2024-03-13 21:56:34 +00:00
Andrew Wood 120ba0ba9a Minor typo correction. 2024-03-13 21:48:57 +00:00
Andrew Wood 88d93737aa Merge pull request 'Update to po/fr.po' (#83) from tbertels/pv:tbertels-patch-1 into main
Reviewed-on: https://codeberg.org/a-j-wood/pv/pulls/83
2024-03-13 21:44:46 +00:00
tbertels 317d5a3aba Update to po/fr.po
Missing strings and corrections
2024-03-12 07:31:42 +00:00
Andrew Wood ddc5cb0224 Added TODO #81. 2024-01-08 23:42:31 +00:00
33 changed files with 752 additions and 499 deletions
+1 -1
View File
@@ -33,7 +33,7 @@ development tools. You can then run "`autoreconf -is`" to generate the
# Copyright, bug reporting, and acknowledgements # Copyright, bug reporting, and acknowledgements
Copyright (C) 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood. Copyright (C) 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood.
License GPLv3+: GNU GPL version 3 or later <https://www.gnu.org/licenses/gpl-3.0.html>. License GPLv3+: GNU GPL version 3 or later <https://www.gnu.org/licenses/gpl-3.0.html>.
+3 -2
View File
@@ -1,10 +1,10 @@
dnl Process this file with autoconf to produce a configure script. dnl Process this file with autoconf to produce a configure script.
dnl dnl
dnl Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood dnl Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
dnl dnl
dnl License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. dnl License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
AC_INIT([pv], [1.8.5], [pv@ivarch.com], [pv], [https://www.ivarch.com/programs/pv.shtml]) AC_INIT([pv], [1.8.9], [pv@ivarch.com], [pv], [https://www.ivarch.com/programs/pv.shtml])
AC_CONFIG_SRCDIR([src/include/config.h.in]) AC_CONFIG_SRCDIR([src/include/config.h.in])
AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([src/include/config.h]) AC_CONFIG_HEADERS([src/include/config.h])
@@ -29,6 +29,7 @@ AC_CHECK_FUNCS([vsnprintf strlcat strtoul memrchr])
AC_CHECK_FUNCS([fdatasync]) AC_CHECK_FUNCS([fdatasync])
AC_CHECK_FUNCS([fpathconf sysconf posix_memalign posix_fadvise]) AC_CHECK_FUNCS([fpathconf sysconf posix_memalign posix_fadvise])
AC_CHECK_FUNCS([nanosleep]) AC_CHECK_FUNCS([nanosleep])
AC_CHECK_FUNCS([setitimer])
AC_CHECK_HEADERS([getopt.h]) AC_CHECK_HEADERS([getopt.h])
AC_CHECK_HEADERS([limits.h]) AC_CHECK_HEADERS([limits.h])
AC_CHECK_HEADERS([wctype.h]) AC_CHECK_HEADERS([wctype.h])
+2
View File
@@ -89,5 +89,7 @@ is acknowledged and greatly appreciated:
* Anthony DeRobertis - suggested the "`--error-skip-block`" option ([#37](https://codeberg.org/a-j-wood/pv/issues/37)) * Anthony DeRobertis - suggested the "`--error-skip-block`" option ([#37](https://codeberg.org/a-j-wood/pv/issues/37))
* Benoit Pierre - provided patches for compilation without IPC support, without HAVE_STRUCT_STAT_ST_BLKSIZE, and on MacOS * Benoit Pierre - provided patches for compilation without IPC support, without HAVE_STRUCT_STAT_ST_BLKSIZE, and on MacOS
* [gustav-b](https://codeberg.org/gustav-b) - suggested percentage formatting correction ([#80](https://codeberg.org/a-j-wood/pv/issues/80)) * [gustav-b](https://codeberg.org/gustav-b) - suggested percentage formatting correction ([#80](https://codeberg.org/a-j-wood/pv/issues/80))
* [Thomas Bertels](https://codeberg.org/tbertels) - updated French translations ([#83](https://codeberg.org/a-j-wood/pv/pulls/83))
* [kevinruddy](https://codeberg.org/kevinruddy) - added decimal units option ([#85](https://codeberg.org/a-j-wood/pv/pulls/85))
--- ---
+8 -1
View File
@@ -1,3 +1,10 @@
### 1.8.9 - 21 April 2024
* feature: new "`--si`" option to display and interpret size suffixes in multiples of 1000 rather than 1024 (pull request [#85](https://codeberg.org/a-j-wood/pv/pulls/85)) supplied by [kevinruddy](https://codeberg.org/kevinruddy)
* fix: continue producing progress output when the output is blocking writes ([#34](https://codeberg.org/a-j-wood/pv/issues/34), [#86](https://codeberg.org/a-j-wood/pv/issues/86), [#87](https://codeberg.org/a-j-wood/pv/issues/87))
* fix: honour the _TMPDIR_ / _TMP_ environment variables again, rather than hard-coding "`/tmp`", when using a terminal lock file (originally removed in 1.8.0) ([#88](https://codeberg.org/a-j-wood/pv/issues/88))
* i18n: corrections and missing strings added to French translations (pull request [#83](https://codeberg.org/a-j-wood/pv/pulls/83)) supplied by [Thomas Bertels](https://codeberg.org/tbertels)
### 1.8.5 - 19 November 2023 ### 1.8.5 - 19 November 2023
* fix: corrected percentage formatting so it doesn't jump from 2 to 3 characters wide at 100% ([#80](https://codeberg.org/a-j-wood/pv/issues/80)) * fix: corrected percentage formatting so it doesn't jump from 2 to 3 characters wide at 100% ([#80](https://codeberg.org/a-j-wood/pv/issues/80))
@@ -61,7 +68,7 @@
* cleanup: word wrapping of "`--help`" output is now multi-byte locale aware * cleanup: word wrapping of "`--help`" output is now multi-byte locale aware
* cleanup: adjusted "`indent`" rules to line length of 120 and reformatted code * cleanup: adjusted "`indent`" rules to line length of 120 and reformatted code
### 1.7.18 - 28 July 2023 ### 1.7.18 - 28 July 2023
* fix: language file installation had been broken by the configuration script rewrite * fix: language file installation had been broken by the configuration script rewrite
+1 -2
View File
@@ -2,7 +2,6 @@ Things still to do. (#n) indicates the issue tracker number.
* ([#3](https://codeberg.org/a-j-wood/pv/issues/3)) Option ("`-x`"?) to use xterm title line for status (Joachim Haga) * ([#3](https://codeberg.org/a-j-wood/pv/issues/3)) Option ("`-x`"?) to use xterm title line for status (Joachim Haga)
* ([#4](https://codeberg.org/a-j-wood/pv/issues/4)) Option for process title (Martin Sarsale) as "`pv - name:FooProcess -xyz - transferred: 1.3GB - 500KB/s - running: 10:15:30s`" * ([#4](https://codeberg.org/a-j-wood/pv/issues/4)) Option for process title (Martin Sarsale) as "`pv - name:FooProcess -xyz - transferred: 1.3GB - 500KB/s - running: 10:15:30s`"
* ([#6](https://codeberg.org/a-j-wood/pv/issues/6)) Look at effect of *O_SYNC* or `fsync` on performance; update counters during buffer flush
* ([#9](https://codeberg.org/a-j-wood/pv/issues/9)) Option to switch rate to per minute if really slow * ([#9](https://codeberg.org/a-j-wood/pv/issues/9)) Option to switch rate to per minute if really slow
* ([#10](https://codeberg.org/a-j-wood/pv/issues/10)) Add watchfd tests * ([#10](https://codeberg.org/a-j-wood/pv/issues/10)) Add watchfd tests
* ([#11](https://codeberg.org/a-j-wood/pv/issues/11)) Option "`--progress-from FILE`", read last number and use it as bytes read (Jacek Wielemborek) * ([#11](https://codeberg.org/a-j-wood/pv/issues/11)) Option "`--progress-from FILE`", read last number and use it as bytes read (Jacek Wielemborek)
@@ -11,7 +10,6 @@ Things still to do. (#n) indicates the issue tracker number.
* ([#17](https://codeberg.org/a-j-wood/pv/issues/17)) Allow "`-r`" with "`-l`" and "`-n`" to output lines/sec (Roland Kletzing) * ([#17](https://codeberg.org/a-j-wood/pv/issues/17)) Allow "`-r`" with "`-l`" and "`-n`" to output lines/sec (Roland Kletzing)
* ([#22](https://codeberg.org/a-j-wood/pv/issues/22)) Options to skip input and seek on output (Jason A. Pfeil, Feb 2022) * ([#22](https://codeberg.org/a-j-wood/pv/issues/22)) Options to skip input and seek on output (Jason A. Pfeil, Feb 2022)
* ([#25](https://codeberg.org/a-j-wood/pv/issues/25)) Normalise progress to 100% on overrun (Andrej Gantvorg) * ([#25](https://codeberg.org/a-j-wood/pv/issues/25)) Normalise progress to 100% on overrun (Andrej Gantvorg)
* ([#34](https://codeberg.org/a-j-wood/pv/issues/34)) Continue timer even if input or output is blocking (Martin Probst - Jun 2017)
* ([#35](https://codeberg.org/a-j-wood/pv/issues/35)) Allow decimal values for "`-s`", "`-L`", "`-B`" (Thomas Watson - Aug 2020) * ([#35](https://codeberg.org/a-j-wood/pv/issues/35)) Allow decimal values for "`-s`", "`-L`", "`-B`" (Thomas Watson - Aug 2020)
* ([#38](https://codeberg.org/a-j-wood/pv/issues/38)) Reset ETA on *SIGUSR1* (Jacek Wielemborek - Jan 2019) * ([#38](https://codeberg.org/a-j-wood/pv/issues/38)) Reset ETA on *SIGUSR1* (Jacek Wielemborek - Jan 2019)
* ([#40](https://codeberg.org/a-j-wood/pv/issues/40)) Permit "`-c`" with "`-d PID:FD`", reject "`-N`" with "`-d PID`" (Norman Rasmussen - Nov 2020) * ([#40](https://codeberg.org/a-j-wood/pv/issues/40)) Permit "`-c`" with "`-d PID:FD`", reject "`-N`" with "`-d PID`" (Norman Rasmussen - Nov 2020)
@@ -26,5 +24,6 @@ Things still to do. (#n) indicates the issue tracker number.
* ([#56](https://codeberg.org/a-j-wood/pv/issues/56)) Support for backgrounding pv, and allowing it to be monitored separately ([jimbobmcgee](https://github.com/jimbobmcgee)) * ([#56](https://codeberg.org/a-j-wood/pv/issues/56)) Support for backgrounding pv, and allowing it to be monitored separately ([jimbobmcgee](https://github.com/jimbobmcgee))
* ([#67](https://codeberg.org/a-j-wood/pv/issues/67)) Wrap another process to monitor its stdin & stdout ([Alex Mason](https://github.com/axman6)) * ([#67](https://codeberg.org/a-j-wood/pv/issues/67)) Wrap another process to monitor its stdin & stdout ([Alex Mason](https://github.com/axman6))
* ([#76](https://codeberg.org/a-j-wood/pv/issues/76)) Provide a way to test translations without installing * ([#76](https://codeberg.org/a-j-wood/pv/issues/76)) Provide a way to test translations without installing
* ([#81](https://codeberg.org/a-j-wood/pv/issues/81)) Keep last output on terminal when "pv -d" is done
Any assistance would be appreciated. Any assistance would be appreciated.
+46 -3
View File
@@ -1,4 +1,4 @@
.TH PV 1 "November 2023" Linux "User Manuals" .TH PV 1 "April 2024" Linux "User Manuals"
.SH NAME .SH NAME
pv \- monitor the progress of data through a pipe pv \- monitor the progress of data through a pipe
.SH SYNOPSIS .SH SYNOPSIS
@@ -154,6 +154,11 @@ data transferred so far.
Display the total bits instead of the total bytes. The output suffix will Display the total bits instead of the total bytes. The output suffix will
be "b" instead of "B". be "b" instead of "B".
.TP .TP
.B \-k, \-\-si
Display and interpret suffixes as multiples of 1000 rather than the default
of 1024. Note that this only takes effect on options after this one, so for
consistency, specify this option first.
.TP
.B \-T, \-\-buffer\-percent .B \-T, \-\-buffer\-percent
Turn on the transfer buffer percentage display. This will show the Turn on the transfer buffer percentage display. This will show the
percentage of the transfer buffer in use - but see the caveat under percentage of the transfer buffer in use - but see the caveat under
@@ -343,7 +348,11 @@ invocations in a single, long, pipeline.
Limit the transfer to a maximum of Limit the transfer to a maximum of
.I RATE .I RATE
bytes per second. A suffix of "K", "M", "G", or "T" can be added to denote bytes per second. A suffix of "K", "M", "G", or "T" can be added to denote
kibibytes (*1024), mebibytes, and so on. kibibytes (*1024), mebibytes, and so on. If
.B \-\-si
was also passed, suffixes will denote kilobytes (*1000), megabytes, etc.
Note the caveat about the positioning of
.B \-\-si .
.TP .TP
.BI \-B\ BYTES \fR,\ \fB\-\-buffer-size\ BYTES .BI \-B\ BYTES \fR,\ \fB\-\-buffer-size\ BYTES
Use a transfer buffer size of Use a transfer buffer size of
@@ -654,6 +663,40 @@ Memory allocation failed.
A zero exit status indicates no problems. A zero exit status indicates no problems.
.SH ENVIRONMENT
The following environment variables may affect
.BR pv :
.TP
.B HOME
The current user's home directory. This may be used by the remote control
mechanism
(the
.B \-\-remote
option)
to exchange messages between
.B pv
instances: if the
.I /run/user/UID/
directory does not exist (where
.I UID
is the current user ID), then
.I $HOME/.pv/
will be used instead.
.TP
.BR TMPDIR ", " TMP
The directory to create per-tty lock files for the terminal when using the
.B \-\-cursor
option. If
.B TMPDIR
is set to a non-empty value, it is the directory under which lock files are
created. Otherwise, if
.B TMP
is set, then it is used; and if neither are set, then
.I /tmp
is used.
.SH AUTHOR .SH AUTHOR
Written by Andrew Wood, with patches submitted by various other people. Written by Andrew Wood, with patches submitted by various other people.
Please see the package's ACKNOWLEDGEMENTS file for a complete list of Please see the package's ACKNOWLEDGEMENTS file for a complete list of
@@ -716,7 +759,7 @@ home page: <https://www.ivarch.com/programs/pv.shtml>
.BR O_DIRECT ) .BR O_DIRECT )
.SH COPYRIGHT .SH COPYRIGHT
Copyright \(co 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood. Copyright \(co 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood.
License GPLv3+: GNU GPL version 3 or later <https://www.gnu.org/licenses/gpl-3.0.html>. License GPLv3+: GNU GPL version 3 or later <https://www.gnu.org/licenses/gpl-3.0.html>.
+34 -5
View File
@@ -34,9 +34,9 @@ the expected size to **pv**:
A more complicated example using numeric output to feed into the A more complicated example using numeric output to feed into the
**dialog**(1) program for a full-screen progress display: **dialog**(1) program for a full-screen progress display:
> **(tar cf - . \\**\ > **(tar cf - . \\** \
> ** \| pv -n -s \$(du -sb . \| awk \'{print \$1}\') \\**\ > **\| pv -n -s \$(du -sb . \| awk \'{print \$1}\') \\** \
> ** \| gzip -9 \> out.tgz) 2\>&1 \\**\ > **\| gzip -9 \> out.tgz) 2\>&1 \\** \
> **\| dialog \--gauge \'Progress\' 7 70** > **\| dialog \--gauge \'Progress\' 7 70**
Taking an image of a disk, skipping errors: Taking an image of a disk, skipping errors:
@@ -121,6 +121,12 @@ that are explicitly switched on will be shown.
: Display the total bits instead of the total bytes. The output suffix : Display the total bits instead of the total bytes. The output suffix
will be \"b\" instead of \"B\". will be \"b\" instead of \"B\".
**-k, \--si**
: Display and interpret suffixes as multiples of 1000 rather than the
default of 1024. Note that this only takes effect on options after
this one, so for consistency, specify this option first.
**-T, \--buffer-percent** **-T, \--buffer-percent**
: Turn on the transfer buffer percentage display. This will show the : Turn on the transfer buffer percentage display. This will show the
@@ -255,7 +261,9 @@ that are explicitly switched on will be shown.
: Limit the transfer to a maximum of *RATE* bytes per second. A suffix : Limit the transfer to a maximum of *RATE* bytes per second. A suffix
of \"K\", \"M\", \"G\", or \"T\" can be added to denote kibibytes of \"K\", \"M\", \"G\", or \"T\" can be added to denote kibibytes
(\*1024), mebibytes, and so on. (\*1024), mebibytes, and so on. If **\--si** was also passed,
suffixes will denote kilobytes (\*1000), megabytes, etc. Note the
caveat about the positioning of **\--si .**
**-B BYTES, \--buffer-size BYTES** **-B BYTES, \--buffer-size BYTES**
@@ -496,6 +504,26 @@ Any other exit status is a bitmask of the following:
A zero exit status indicates no problems. A zero exit status indicates no problems.
# ENVIRONMENT
The following environment variables may affect **pv**:
**HOME**
: The current user\'s home directory. This may be used by the remote
control mechanism (the **\--remote** option) to exchange messages
between **pv** instances: if the */run/user/UID/* directory does not
exist (where *UID* is the current user ID), then *\$HOME/.pv/* will
be used instead.
**TMPDIR**, **TMP**
: The directory to create per-tty lock files for the terminal when
using the **\--cursor** option. If **TMPDIR** is set to a non-empty
value, it is the directory under which lock files are created.
Otherwise, if **TMP** is set, then it is used; and if neither are
set, then */tmp* is used.
# AUTHOR # AUTHOR
Written by Andrew Wood, with patches submitted by various other people. Written by Andrew Wood, with patches submitted by various other people.
@@ -535,7 +563,8 @@ Alternatively, use the issue tracker linked from the **pv** home page:
# COPYRIGHT # COPYRIGHT
Copyright © 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood. Copyright © 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew
Wood.
License GPLv3+: GNU GPL version 3 or later License GPLv3+: GNU GPL version 3 or later
\<https://www.gnu.org/licenses/gpl-3.0.html\>. \<https://www.gnu.org/licenses/gpl-3.0.html\>.
+97 -89
View File
@@ -1,7 +1,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n" "Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2023-11-19 14:19+0000\n" "POT-Creation-Date: 2024-04-21 14:15+0100\n"
"Language: de\n" "Language: de\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Date: 1999-06-01 15:18:29+0100\n" "Date: 1999-06-01 15:18:29+0100\n"
@@ -44,7 +44,7 @@ msgstr "zeige die Datentransferrate an"
msgid "show data transfer average rate counter" msgid "show data transfer average rate counter"
msgstr "" msgstr ""
#: src/main/help.c:301 src/main/help.c:329 src/main/help.c:341 #: src/main/help.c:301 src/main/help.c:332 src/main/help.c:344
msgid "SEC" msgid "SEC"
msgstr "" msgstr ""
@@ -61,187 +61,191 @@ msgid "show number of bits transferred"
msgstr "" msgstr ""
#: src/main/help.c:311 #: src/main/help.c:311
msgid "show percentage of transfer buffer in use" msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "zeige, wie viel Prozent des Übertragungsbuffers in Benutzung sind"
#: src/main/help.c:313
msgid "NUM"
msgstr "" msgstr ""
#: src/main/help.c:314 #: src/main/help.c:314
msgid "show NUM bytes last written" msgid "show percentage of transfer buffer in use"
msgstr "NUM zeige die zuletzt geschriebenen NUM Bytes" msgstr "zeige, wie viel Prozent des Übertragungsbuffers in Benutzung sind"
#: src/main/help.c:316 #: src/main/help.c:316
msgid "FORMAT" msgid "NUM"
msgstr "" msgstr ""
#: src/main/help.c:317 #: src/main/help.c:317
msgid "show NUM bytes last written"
msgstr "NUM zeige die zuletzt geschriebenen NUM Bytes"
#: src/main/help.c:319
msgid "FORMAT"
msgstr ""
#: src/main/help.c:320
msgid "set output format to FORMAT" msgid "set output format to FORMAT"
msgstr "setze das Ausgabeformat auf FORMAT" msgstr "setze das Ausgabeformat auf FORMAT"
#: src/main/help.c:320 #: src/main/help.c:323
msgid "output percentages, not visual information" msgid "output percentages, not visual information"
msgstr "Ausgabe von Prozent-Angaben statt visueller Darstellung" msgstr "Ausgabe von Prozent-Angaben statt visueller Darstellung"
#: src/main/help.c:323 #: src/main/help.c:326
msgid "do not output any transfer information at all" msgid "do not output any transfer information at all"
msgstr "sämtliche Transferinformationen unterdrücken" msgstr "sämtliche Transferinformationen unterdrücken"
#: src/main/help.c:327 #: src/main/help.c:330
msgid "display nothing until first byte transferred" msgid "display nothing until first byte transferred"
msgstr "keine Ausgabe bevor das erste Byte übertragen wurde" msgstr "keine Ausgabe bevor das erste Byte übertragen wurde"
#: src/main/help.c:330 #: src/main/help.c:333
msgid "display nothing until SEC seconds have passed" msgid "display nothing until SEC seconds have passed"
msgstr "SEC nichts anzeigen, bis SEC Sekunden vergangen sind" msgstr "SEC nichts anzeigen, bis SEC Sekunden vergangen sind"
#: src/main/help.c:332 #: src/main/help.c:335
msgid "SIZE" msgid "SIZE"
msgstr "" msgstr ""
#: src/main/help.c:333 #: src/main/help.c:336
msgid "set estimated data size to SIZE bytes" msgid "set estimated data size to SIZE bytes"
msgstr "setze erwartete Datenlänge auf SIZE Byte" msgstr "setze erwartete Datenlänge auf SIZE Byte"
#: src/main/help.c:336 #: src/main/help.c:339
msgid "count lines instead of bytes" msgid "count lines instead of bytes"
msgstr "zähle Zeilen anstelle von Bytes" msgstr "zähle Zeilen anstelle von Bytes"
#: src/main/help.c:339 #: src/main/help.c:342
msgid "lines are null-terminated" msgid "lines are null-terminated"
msgstr "Zeilen sind nullterminiert" msgstr "Zeilen sind nullterminiert"
#: src/main/help.c:342 #: src/main/help.c:345
msgid "update every SEC seconds" msgid "update every SEC seconds"
msgstr "aktualisiere Ausgabe nach SEC Sekunden Intervall" msgstr "aktualisiere Ausgabe nach SEC Sekunden Intervall"
#: src/main/help.c:344 #: src/main/help.c:347
msgid "WIDTH" msgid "WIDTH"
msgstr "" msgstr ""
#: src/main/help.c:345 #: src/main/help.c:348
msgid "assume terminal is WIDTH characters wide" msgid "assume terminal is WIDTH characters wide"
msgstr "setze Terminal-Breite auf WIDTH Zeichen" msgstr "setze Terminal-Breite auf WIDTH Zeichen"
#: src/main/help.c:347 #: src/main/help.c:350
msgid "HEIGHT" msgid "HEIGHT"
msgstr "" msgstr ""
#: src/main/help.c:348 #: src/main/help.c:351
msgid "assume terminal is HEIGHT rows high" msgid "assume terminal is HEIGHT rows high"
msgstr "setze Terminal-Höhe auf HEIGHT Zeichen" msgstr "setze Terminal-Höhe auf HEIGHT Zeichen"
#: src/main/help.c:350 #: src/main/help.c:353
msgid "NAME" msgid "NAME"
msgstr "" msgstr ""
#: src/main/help.c:351 #: src/main/help.c:354
msgid "prefix visual information with NAME" msgid "prefix visual information with NAME"
msgstr "setze den NAMEn für visuelle Darstellung" msgstr "setze den NAMEn für visuelle Darstellung"
#: src/main/help.c:354 #: src/main/help.c:357
msgid "output even if standard error is not a terminal" msgid "output even if standard error is not a terminal"
msgstr "" msgstr ""
"Ausgabe auch dann erzwingen, wenn der Fehlerausgabe-Kanal kein Terminal ist" "Ausgabe auch dann erzwingen, wenn der Fehlerausgabe-Kanal kein Terminal ist"
#: src/main/help.c:357 #: src/main/help.c:360
msgid "use cursor positioning escape sequences" msgid "use cursor positioning escape sequences"
msgstr "benutze Escape-Sequenzen zur Cursor-Positionierung" msgstr "benutze Escape-Sequenzen zur Cursor-Positionierung"
#: src/main/help.c:360 #: src/main/help.c:363
msgid "RATE" msgid "RATE"
msgstr "" msgstr ""
#: src/main/help.c:361 #: src/main/help.c:364
msgid "limit transfer to RATE bytes per second" msgid "limit transfer to RATE bytes per second"
msgstr "beschränke die Transferrate auf RATE Byte pro Sekunde" msgstr "beschränke die Transferrate auf RATE Byte pro Sekunde"
#: src/main/help.c:363 src/main/help.c:372 #: src/main/help.c:366 src/main/help.c:375
msgid "BYTES" msgid "BYTES"
msgstr "" msgstr ""
#: src/main/help.c:364 #: src/main/help.c:367
msgid "use a buffer size of BYTES" msgid "use a buffer size of BYTES"
msgstr "BYTES benutze einen Puffer in der Größe von BYTES" msgstr "BYTES benutze einen Puffer in der Größe von BYTES"
#: src/main/help.c:367 #: src/main/help.c:370
msgid "never use splice(), always use read/write" msgid "never use splice(), always use read/write"
msgstr "anstelle von splice() immer read/write benutzen" msgstr "anstelle von splice() immer read/write benutzen"
#: src/main/help.c:370 #: src/main/help.c:373
msgid "skip read errors in input" msgid "skip read errors in input"
msgstr "Lesefehler in der Eingabe nicht beachten" msgstr "Lesefehler in der Eingabe nicht beachten"
#: src/main/help.c:373 #: src/main/help.c:376
msgid "skip errors in BYTES blocks at a time" msgid "skip errors in BYTES blocks at a time"
msgstr "" msgstr ""
#: src/main/help.c:376 #: src/main/help.c:379
msgid "stop after --size bytes have been transferred" msgid "stop after --size bytes have been transferred"
msgstr "anhalten, nachdem --size Bytes übertragen wurden" msgstr "anhalten, nachdem --size Bytes übertragen wurden"
#: src/main/help.c:379 #: src/main/help.c:382
msgid "flush cache to disk after every write" msgid "flush cache to disk after every write"
msgstr "" msgstr ""
#: src/main/help.c:382 #: src/main/help.c:385
msgid "use direct I/O to bypass cache" msgid "use direct I/O to bypass cache"
msgstr "" msgstr ""
#: src/main/help.c:385 #: src/main/help.c:388
msgid "discard input instead of writing to output" msgid "discard input instead of writing to output"
msgstr "" msgstr ""
#: src/main/help.c:388 #: src/main/help.c:391
msgid "PID" msgid "PID"
msgstr "" msgstr ""
#: src/main/help.c:389 #: src/main/help.c:392
msgid "update settings of process PID" msgid "update settings of process PID"
msgstr "Einstellungen der Prozess-PID updaten" msgstr "Einstellungen der Prozess-PID updaten"
#: src/main/help.c:393 src/main/help.c:408 #: src/main/help.c:396 src/main/help.c:411
msgid "FILE" msgid "FILE"
msgstr "" msgstr ""
#: src/main/help.c:394 #: src/main/help.c:397
msgid "save process ID in FILE" msgid "save process ID in FILE"
msgstr "Prozess-ID in FILE speichern" msgstr "Prozess-ID in FILE speichern"
#: src/main/help.c:397 #: src/main/help.c:400
msgid "PID[:FD]" msgid "PID[:FD]"
msgstr "" msgstr ""
#: src/main/help.c:398 #: src/main/help.c:401
msgid "watch file FD opened by process PID" msgid "watch file FD opened by process PID"
msgstr "die vom Prozess PID geöffnete Datei FD beobachten" msgstr "die vom Prozess PID geöffnete Datei FD beobachten"
#: src/main/help.c:402 #: src/main/help.c:405
msgid "show this help and exit" msgid "show this help and exit"
msgstr "zeige diese Hilfe und beende" msgstr "zeige diese Hilfe und beende"
#: src/main/help.c:405 #: src/main/help.c:408
msgid "show version information and exit" msgid "show version information and exit"
msgstr "zeige Versionsinformationen und beende" msgstr "zeige Versionsinformationen und beende"
#: src/main/help.c:409 #: src/main/help.c:412
msgid "write debug logs to FILE" msgid "write debug logs to FILE"
msgstr "" msgstr ""
#: src/main/help.c:434 #: src/main/help.c:437
#, c-format #, c-format
msgid "Usage: %s [OPTION] [FILE]..." msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Syntax: %s [OPTION] [DATEI]..." msgstr "Syntax: %s [OPTION] [DATEI]..."
#: src/main/help.c:445 #: src/main/help.c:448
msgid "" msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring." "Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr "" msgstr ""
"Verbindet DATEI(en) oder den Standard-Eingabe-Kanal mit dem Standard-Ausgabe-" "Verbindet DATEI(en) oder den Standard-Eingabe-Kanal mit dem Standard-Ausgabe-"
"Kanal und misst den Datenstrom." "Kanal und misst den Datenstrom."
#: src/main/help.c:582 #: src/main/help.c:585
#, c-format #, c-format
msgid "Please report any bugs to: %s" msgid "Please report any bugs to: %s"
msgstr "Bitte senden Sie Fehlerberichte an %s" msgstr "Bitte senden Sie Fehlerberichte an %s"
@@ -250,45 +254,45 @@ msgstr "Bitte senden Sie Fehlerberichte an %s"
msgid "state allocation failed" msgid "state allocation failed"
msgstr "Zustandszuweisung fehlgeschlagen" msgstr "Zustandszuweisung fehlgeschlagen"
#: src/main/options.c:173 #: src/main/options.c:174
msgid "option structure allocation failed" msgid "option structure allocation failed"
msgstr "`option' konnte nicht allokiert werden" msgstr "`option' konnte nicht allokiert werden"
#: src/main/options.c:192 #: src/main/options.c:193
msgid "option structure argv allocation failed" msgid "option structure argv allocation failed"
msgstr "`option' (argv) konnte nicht allokiert werden" msgstr "`option' (argv) konnte nicht allokiert werden"
#: src/main/options.c:254 #: src/main/options.c:255
msgid "integer argument expected" msgid "integer argument expected"
msgstr "Ganzzahliges Argument erwartet" msgstr "Ganzzahliges Argument erwartet"
#: src/main/options.c:265 #: src/main/options.c:266
msgid "numeric argument expected" msgid "numeric argument expected"
msgstr "numerisches Argument erwartet" msgstr "numerisches Argument erwartet"
#: src/main/options.c:276 #: src/main/options.c:277
msgid "process ID or pid:fd pair expected" msgid "process ID or pid:fd pair expected"
msgstr "Prozess-ID oder PID:FD-Paar erwartet" msgstr "Prozess-ID oder PID:FD-Paar erwartet"
#: src/main/options.c:283 #: src/main/options.c:284
msgid "invalid process ID" msgid "invalid process ID"
msgstr "ungültige Prozess-ID" msgstr "ungültige Prozess-ID"
#: src/main/options.c:384 src/pv/file.c:323 #: src/main/options.c:388 src/pv/file.c:323
msgid "failed to stat file" msgid "failed to stat file"
msgstr "Dateiinformationen konnten nicht gelesen werden" msgstr "Dateiinformationen konnten nicht gelesen werden"
#: src/main/options.c:487 #: src/main/options.c:491
#, c-format #, c-format
msgid "Try `%s --help' for more information." msgid "Try `%s --help' for more information."
msgstr "`%s --help' zeigt weitere Informationen an." msgstr "`%s --help' zeigt weitere Informationen an."
#: src/main/options.c:489 #: src/main/options.c:493
#, c-format #, c-format
msgid "Try `%s -h' for more information." msgid "Try `%s -h' for more information."
msgstr "`%s -h' zeigt weitere Informationen an." msgstr "`%s -h' zeigt weitere Informationen an."
#: src/main/options.c:520 #: src/main/options.c:524
msgid "" msgid ""
"cannot use line mode or transfer modifier options when watching file " "cannot use line mode or transfer modifier options when watching file "
"descriptors" "descriptors"
@@ -296,31 +300,31 @@ msgstr ""
"Beim Anzeigen von Dateideskriptoren können keine Optionen für den " "Beim Anzeigen von Dateideskriptoren können keine Optionen für den "
"Zeilenmodus oder den Übertragungsmodifikator verwendet werden" "Zeilenmodus oder den Übertragungsmodifikator verwendet werden"
#: src/main/options.c:529 #: src/main/options.c:533
msgid "cannot use cursor positioning when watching file descriptors" msgid "cannot use cursor positioning when watching file descriptors"
msgstr "" msgstr ""
"Beim Anzeigen von Dateideskriptoren können keine Zeilenmodus- oder " "Beim Anzeigen von Dateideskriptoren können keine Zeilenmodus- oder "
"Übertragungsmodifikatoroptionen verwendet werden." "Übertragungsmodifikatoroptionen verwendet werden."
#: src/main/options.c:538 #: src/main/options.c:542
msgid "cannot use remote control when watching file descriptors" msgid "cannot use remote control when watching file descriptors"
msgstr "" msgstr ""
"kann keine Fernbedienung verwenden, wenn Dateideskriptoren angezeigt werden" "kann keine Fernbedienung verwenden, wenn Dateideskriptoren angezeigt werden"
#: src/main/options.c:547 #: src/main/options.c:551
msgid "cannot transfer files when watching file descriptors" msgid "cannot transfer files when watching file descriptors"
msgstr "" msgstr ""
"Dateien können beim Betrachten von Dateideskriptoren nicht übertragen werden" "Dateien können beim Betrachten von Dateideskriptoren nicht übertragen werden"
#: src/main/options.c:562 #: src/main/options.c:566
msgid "not available on systems without /proc/self/fdinfo" msgid "not available on systems without /proc/self/fdinfo"
msgstr "Nicht verfügbar auf Systemen ohne /proc/self/fdinfo" msgstr "Nicht verfügbar auf Systemen ohne /proc/self/fdinfo"
#: src/main/remote.c:295 #: src/main/remote.c:302
msgid "message not received" msgid "message not received"
msgstr "Nachricht nicht empfangen" msgstr "Nachricht nicht empfangen"
#: src/main/remote.c:422 #: src/main/remote.c:429
msgid "SA_SIGINFO not supported on this system" msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO wird auf diesem System nicht unterstützt" msgstr "SA_SIGINFO wird auf diesem System nicht unterstützt"
@@ -344,51 +348,51 @@ msgstr ""
msgid "failed to get terminal name" msgid "failed to get terminal name"
msgstr "Terminalname konnte nicht gelesen werden" msgstr "Terminalname konnte nicht gelesen werden"
#: src/pv/cursor.c:130 #: src/pv/cursor.c:132
msgid "failed to open lock file" msgid "failed to open lock file"
msgstr "Sperrdatei konnte nicht geöffnet werden" msgstr "Sperrdatei konnte nicht geöffnet werden"
#: src/pv/cursor.c:163 #: src/pv/cursor.c:165
msgid "lock attempt failed" msgid "lock attempt failed"
msgstr "Sperrversuch fehlgeschlagen" msgstr "Sperrversuch fehlgeschlagen"
#: src/pv/cursor.c:424 #: src/pv/cursor.c:426
msgid "failed to open terminal" msgid "failed to open terminal"
msgstr "Terminal konnte nicht geöffnet werden" msgstr "Terminal konnte nicht geöffnet werden"
#: src/pv/display.c:192 #: src/pv/display.c:193
msgid "yzafpnum kMGTPEZY" msgid "yzafpnum kMGTPEZY"
msgstr "" msgstr ""
#: src/pv/display.c:210 #: src/pv/display.c:211
msgid "yzafpnum KMGTPEZY" msgid "yzafpnum KMGTPEZY"
msgstr "" msgstr ""
#: src/pv/display.c:746 src/pv/transfer.c:910 #: src/pv/display.c:750 src/pv/transfer.c:954
msgid "buffer allocation failed" msgid "buffer allocation failed"
msgstr "Puffer konnte nicht allokiert werden" msgstr "Puffer konnte nicht allokiert werden"
#: src/pv/display.c:845 #: src/pv/display.c:856
msgid "b" msgid "b"
msgstr "" msgstr ""
#: src/pv/display.c:848 src/pv/transfer.c:595 #: src/pv/display.c:859 src/pv/transfer.c:596
msgid "B" msgid "B"
msgstr "B" msgstr "B"
#: src/pv/display.c:890 src/pv/display.c:907 #: src/pv/display.c:900 src/pv/display.c:916
msgid "b/s" msgid "b/s"
msgstr "" msgstr ""
#: src/pv/display.c:895 src/pv/display.c:912 #: src/pv/display.c:905 src/pv/display.c:920
msgid "/s" msgid "/s"
msgstr "" msgstr ""
#: src/pv/display.c:895 src/pv/display.c:912 #: src/pv/display.c:905 src/pv/display.c:920
msgid "B/s" msgid "B/s"
msgstr "" msgstr ""
#: src/pv/display.c:940 src/pv/display.c:944 src/pv/display.c:1010 #: src/pv/display.c:947 src/pv/display.c:951 src/pv/display.c:1017
msgid "ETA" msgid "ETA"
msgstr "ETA" msgstr "ETA"
@@ -432,43 +436,47 @@ msgstr ""
msgid "history structure allocation failed" msgid "history structure allocation failed"
msgstr "" msgstr ""
#: src/pv/state.c:386 src/pv/state.c:397 #: src/pv/state.c:391 src/pv/state.c:402
msgid "file list allocation failed" msgid "file list allocation failed"
msgstr "" msgstr ""
#: src/pv/transfer.c:457 #: src/pv/transfer.c:458
msgid "read failed" msgid "read failed"
msgstr "read-Aufruf fehlgeschlagen" msgstr "read-Aufruf fehlgeschlagen"
#: src/pv/transfer.c:480 #: src/pv/transfer.c:481
msgid "warning: read errors detected" msgid "warning: read errors detected"
msgstr "warnung: lesefehler erkannt" msgstr "warnung: lesefehler erkannt"
#: src/pv/transfer.c:496 #: src/pv/transfer.c:497
msgid "file is not seekable" msgid "file is not seekable"
msgstr "datei ist nicht durchsuchbar" msgstr "datei ist nicht durchsuchbar"
#: src/pv/transfer.c:574 #: src/pv/transfer.c:575
msgid "failed to seek past error" msgid "failed to seek past error"
msgstr "konnte den Fehler nicht überwinden" msgstr "konnte den Fehler nicht überwinden"
#: src/pv/transfer.c:594 #: src/pv/transfer.c:595
msgid "skipped past read error" msgid "skipped past read error"
msgstr "über den Lesefehler hinaus verschoben" msgstr "über den Lesefehler hinaus verschoben"
#: src/pv/transfer.c:634 #: src/pv/transfer.c:635
msgid "no transfer buffer allocated" msgid "no transfer buffer allocated"
msgstr "" msgstr ""
#: src/pv/transfer.c:647 #: src/pv/transfer.c:676
msgid "failed to set alarm signal handler" msgid "failed to set interval timer"
msgstr "" msgstr ""
#: src/pv/transfer.c:774 #: src/pv/transfer.c:694
msgid "failed to clear interval timer"
msgstr ""
#: src/pv/transfer.c:818
msgid "write failed" msgid "write failed"
msgstr "write-Aufruf fehlgeschlagen" msgstr "write-Aufruf fehlgeschlagen"
#: src/pv/transfer.c:1007 #: src/pv/transfer.c:1051
msgid "select call failed" msgid "select call failed"
msgstr "select-Aufruf fehlgeschlagen" msgstr "select-Aufruf fehlgeschlagen"
+156 -141
View File
@@ -1,7 +1,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n" "Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2023-11-19 14:19+0000\n" "POT-Creation-Date: 2024-04-21 14:15+0100\n"
"Language: fr\n" "Language: fr\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Date: 1999-06-01 15:18:29+0100\n" "Date: 1999-06-01 15:18:29+0100\n"
@@ -22,272 +22,278 @@ msgstr ""
#: src/main/help.c:284 #: src/main/help.c:284
msgid "show progress bar" msgid "show progress bar"
msgstr "affiche la barre de progression" msgstr "afficher la barre de progression"
#: src/main/help.c:287 #: src/main/help.c:287
msgid "show elapsed time" msgid "show elapsed time"
msgstr "affiche le temps écoulé" msgstr "afficher le temps écoulé"
#: src/main/help.c:290 #: src/main/help.c:290
msgid "show estimated time of arrival (completion)" msgid "show estimated time of arrival (completion)"
msgstr "affiche l'heure approximative de l'achèvement de la tâche" msgstr "afficher l'heure approximative de l'achèvement de la tâche"
#: src/main/help.c:293 #: src/main/help.c:293
msgid "show absolute estimated time of arrival (completion)" msgid "show absolute estimated time of arrival (completion)"
msgstr "affiche l'heure absolute de l'achèvement de la tâche" msgstr "afficher l'heure absolute de l'achèvement de la tâche"
#: src/main/help.c:296 #: src/main/help.c:296
msgid "show data transfer rate counter" msgid "show data transfer rate counter"
msgstr "affiche le taux de tranfert des données" msgstr "afficher le taux de tranfert des données"
#: src/main/help.c:299 #: src/main/help.c:299
msgid "show data transfer average rate counter" msgid "show data transfer average rate counter"
msgstr "afficher le compteur de taux moyen de transfert de données" msgstr "afficher le compteur de taux moyen de transfert de données"
#: src/main/help.c:301 src/main/help.c:329 src/main/help.c:341 #: src/main/help.c:301 src/main/help.c:332 src/main/help.c:344
msgid "SEC" msgid "SEC"
msgstr "SEC" msgstr "SEC"
#: src/main/help.c:302 #: src/main/help.c:302
msgid "compute average rate over past SEC seconds (default 30s)" msgid "compute average rate over past SEC seconds (default 30s)"
msgstr "" msgstr ""
"calculer le taux moyen d'après les SEC dernières secondes (30s par défaut)"
#: src/main/help.c:305 #: src/main/help.c:305
msgid "show number of bytes transferred" msgid "show number of bytes transferred"
msgstr "affiche le nombre d'octets transférés" msgstr "afficher le nombre d'octets transférés"
#: src/main/help.c:308 #: src/main/help.c:308
msgid "show number of bits transferred" msgid "show number of bits transferred"
msgstr "" msgstr "afficher le nombre de bits transférés"
#: src/main/help.c:311 #: src/main/help.c:311
msgid "show percentage of transfer buffer in use" msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "afficher le pourcentage de tampon de transfert utilisé"
#: src/main/help.c:313
msgid "NUM"
msgstr "" msgstr ""
#: src/main/help.c:314 #: src/main/help.c:314
msgid "show NUM bytes last written" msgid "show percentage of transfer buffer in use"
msgstr "affiche NUM octets pour la dernière fois écrits" msgstr "afficher le pourcentage de tampon de transfert utilisé"
#: src/main/help.c:316 #: src/main/help.c:316
msgid "FORMAT" msgid "NUM"
msgstr "" msgstr "NUM"
#: src/main/help.c:317 #: src/main/help.c:317
msgid "show NUM bytes last written"
msgstr "afficher les derniers NUM octets écrits"
#: src/main/help.c:319
msgid "FORMAT"
msgstr "FORMAT"
#: src/main/help.c:320
msgid "set output format to FORMAT" msgid "set output format to FORMAT"
msgstr "définir le format de sortie sur FORMAT" msgstr "définir le format de sortie sur FORMAT"
#: src/main/help.c:320
msgid "output percentages, not visual information"
msgstr "imprime en pourcentage, pas les informations visuelles"
#: src/main/help.c:323 #: src/main/help.c:323
msgid "output percentages, not visual information"
msgstr "imprimer en pourcentage plutôt que des informations visuelles"
#: src/main/help.c:326
msgid "do not output any transfer information at all" msgid "do not output any transfer information at all"
msgstr "n'afficher aucune information de transfert" msgstr "n'afficher aucune information de transfert"
#: src/main/help.c:327 #: src/main/help.c:330
msgid "display nothing until first byte transferred" msgid "display nothing until first byte transferred"
msgstr "ne rien afficher avant qu'au moins un octet soit tranféré" msgstr "ne rien afficher avant qu'au moins un octet soit tranféré"
#: src/main/help.c:330 #: src/main/help.c:333
msgid "display nothing until SEC seconds have passed" msgid "display nothing until SEC seconds have passed"
msgstr "n'afficher rien jusqu'à ce que SEC secondes se soient écoulées" msgstr "ne rien afficher jusqu'à ce que SEC secondes se soient écoulées"
#: src/main/help.c:332 #: src/main/help.c:335
msgid "SIZE" msgid "SIZE"
msgstr "TAILLE" msgstr "TAILLE"
#: src/main/help.c:333
msgid "set estimated data size to SIZE bytes"
msgstr "ajuste la taille estimée des données à TAILLE octets"
#: src/main/help.c:336 #: src/main/help.c:336
msgid "count lines instead of bytes" msgid "set estimated data size to SIZE bytes"
msgstr "compte les lignes au lieu des octets" msgstr "ajuster la taille estimée des données à TAILLE octets"
#: src/main/help.c:339 #: src/main/help.c:339
msgid "lines are null-terminated" msgid "count lines instead of bytes"
msgstr "les lignes sont terminées par un nul" msgstr "compter les lignes au lieu des octets"
#: src/main/help.c:342 #: src/main/help.c:342
msgid "update every SEC seconds" msgid "lines are null-terminated"
msgstr "mise-à-jour toute les SEC secondes" msgstr "les lignes sont terminées par un caractère nul"
#: src/main/help.c:344 #: src/main/help.c:345
msgid "update every SEC seconds"
msgstr "mettre à jour toutes les SEC secondes"
#: src/main/help.c:347
msgid "WIDTH" msgid "WIDTH"
msgstr "LARGEUR" msgstr "LARGEUR"
#: src/main/help.c:345 #: src/main/help.c:348
msgid "assume terminal is WIDTH characters wide" msgid "assume terminal is WIDTH characters wide"
msgstr "présumer la largeur du terminal à LARGEUR caractères" msgstr "présumer la largeur du terminal à LARGEUR caractères"
#: src/main/help.c:347 #: src/main/help.c:350
msgid "HEIGHT" msgid "HEIGHT"
msgstr "HAUTEUR" msgstr "HAUTEUR"
#: src/main/help.c:348 #: src/main/help.c:351
msgid "assume terminal is HEIGHT rows high" msgid "assume terminal is HEIGHT rows high"
msgstr "présumer la hauteur du terminal à HAUTEUR lignes" msgstr "présumer la hauteur du terminal à HAUTEUR lignes"
#: src/main/help.c:350 #: src/main/help.c:353
msgid "NAME" msgid "NAME"
msgstr "NOM" msgstr "NOM"
#: src/main/help.c:351 #: src/main/help.c:354
msgid "prefix visual information with NAME" msgid "prefix visual information with NAME"
msgstr "préfixer les informations visuelles avec NOM" msgstr "préfixer les informations visuelles avec NOM"
#: src/main/help.c:354
msgid "output even if standard error is not a terminal"
msgstr "imprime vers la sortie d'erreur même si ce n'est pas un terminal"
#: src/main/help.c:357 #: src/main/help.c:357
msgid "output even if standard error is not a terminal"
msgstr ""
"imprimer vers la sortie d'erreur standard même si ce n'est pas un terminal"
#: src/main/help.c:360
msgid "use cursor positioning escape sequences" msgid "use cursor positioning escape sequences"
msgstr "utiliser les séquences d'échappements de positionnement de curseur" msgstr "utiliser les séquences d'échappements de positionnement de curseur"
#: src/main/help.c:360 #: src/main/help.c:363
msgid "RATE" msgid "RATE"
msgstr "TAUX" msgstr "TAUX"
#: src/main/help.c:361 #: src/main/help.c:364
msgid "limit transfer to RATE bytes per second" msgid "limit transfer to RATE bytes per second"
msgstr "limite le taux de transfer à TAUX octets par seconde" msgstr "limite le taux de transfert à TAUX octets par seconde"
#: src/main/help.c:363 src/main/help.c:372 #: src/main/help.c:366 src/main/help.c:375
msgid "BYTES" msgid "BYTES"
msgstr "OCTETS" msgstr "OCTETS"
#: src/main/help.c:364 #: src/main/help.c:367
msgid "use a buffer size of BYTES" msgid "use a buffer size of BYTES"
msgstr "Utiliser une mémoire tampon de OCTETS octets" msgstr "Utiliser une mémoire tampon de OCTETS octets"
#: src/main/help.c:367
msgid "never use splice(), always use read/write"
msgstr "n'utilisez jamais splice(), utilisez toujours read/write"
#: src/main/help.c:370 #: src/main/help.c:370
msgid "never use splice(), always use read/write"
msgstr "ne jamais utiliser splice(), toujours utiliser read/write"
#: src/main/help.c:373
msgid "skip read errors in input" msgid "skip read errors in input"
msgstr "ignorer les erreurs de lecture dans l'entrée" msgstr "ignorer les erreurs de lecture dans l'entrée"
#: src/main/help.c:373
msgid "skip errors in BYTES blocks at a time"
msgstr ""
#: src/main/help.c:376 #: src/main/help.c:376
msgid "skip errors in BYTES blocks at a time"
msgstr "ignorer les erreurs dans OCTETS blocs à la fois"
#: src/main/help.c:379
msgid "stop after --size bytes have been transferred" msgid "stop after --size bytes have been transferred"
msgstr "arrêter après le transfert de --size octets" msgstr "arrêter après le transfert de --size octets"
#: src/main/help.c:379
msgid "flush cache to disk after every write"
msgstr ""
#: src/main/help.c:382 #: src/main/help.c:382
msgid "use direct I/O to bypass cache" msgid "flush cache to disk after every write"
msgstr "" msgstr "vider le cache sur le disque après chaque écriture"
#: src/main/help.c:385 #: src/main/help.c:385
msgid "discard input instead of writing to output" msgid "use direct I/O to bypass cache"
msgstr "" msgstr "utiliser les E/S directes pour contourner le cache"
#: src/main/help.c:388 #: src/main/help.c:388
msgid "discard input instead of writing to output"
msgstr "rejeter l'entrée au lieu de l'écrire vers la sortie"
#: src/main/help.c:391
msgid "PID" msgid "PID"
msgstr "PID" msgstr "PID"
#: src/main/help.c:389 #: src/main/help.c:392
msgid "update settings of process PID" msgid "update settings of process PID"
msgstr "mettre-à-jour la configuration du processus PID" msgstr "mettre à jour la configuration du processus PID"
#: src/main/help.c:393 src/main/help.c:408 #: src/main/help.c:396 src/main/help.c:411
msgid "FILE" msgid "FILE"
msgstr "" msgstr "FICHIER"
#: src/main/help.c:394
msgid "save process ID in FILE"
msgstr "enregistrer l'ID de processus dans FILE"
#: src/main/help.c:397 #: src/main/help.c:397
msgid "save process ID in FILE"
msgstr "enregistrer l'ID de processus dans FICHIER"
#: src/main/help.c:400
msgid "PID[:FD]" msgid "PID[:FD]"
msgstr "" msgstr "PID[:FD]"
#: src/main/help.c:398 #: src/main/help.c:401
msgid "watch file FD opened by process PID" msgid "watch file FD opened by process PID"
msgstr "regarder le fichier FD ouvert par le processus PID" msgstr "surveiller le fichier FD ouvert par le processus PID"
#: src/main/help.c:402 #: src/main/help.c:405
msgid "show this help and exit" msgid "show this help and exit"
msgstr "afficher cette aide puis quitter" msgstr "afficher cette aide puis quitter"
#: src/main/help.c:405 #: src/main/help.c:408
msgid "show version information and exit" msgid "show version information and exit"
msgstr "afficher la version puis quitter" msgstr "afficher la version puis quitter"
#: src/main/help.c:409 #: src/main/help.c:412
msgid "write debug logs to FILE" msgid "write debug logs to FILE"
msgstr "" msgstr "écrire les journaux de déboggage vers FICHIER"
#: src/main/help.c:434 #: src/main/help.c:437
#, c-format #, c-format
msgid "Usage: %s [OPTION] [FILE]..." msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Utilisation : %s [OPTIONS] [FICHIER]..." msgstr "Utilisation : %s [OPTIONS] [FICHIER]..."
#: src/main/help.c:445 #: src/main/help.c:448
msgid "" msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring." "Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr "" msgstr ""
"Concatène FICHIER(s), ou l'entrée standard, sur la sortie standard avec " "Concaténer FICHIER(s), ou l'entrée standard, sur la sortie standard avec "
"monitorage." "monitorage."
#: src/main/help.c:582 #: src/main/help.c:585
#, c-format #, c-format
msgid "Please report any bugs to: %s" msgid "Please report any bugs to: %s"
msgstr "SVP rapporter touts bogues à %s" msgstr "SVP rapporter tous bogues à %s"
#: src/main/main.c:74 #: src/main/main.c:74
msgid "state allocation failed" msgid "state allocation failed"
msgstr "échec de l'allocation de mémoire de condition" msgstr "échec de l'allocation de mémoire de condition"
#: src/main/options.c:173 #: src/main/options.c:174
msgid "option structure allocation failed" msgid "option structure allocation failed"
msgstr "l'allocation pour la structure d'une option a echoué" msgstr "l'allocation pour la structure d'une option a échoué"
#: src/main/options.c:192 #: src/main/options.c:193
msgid "option structure argv allocation failed" msgid "option structure argv allocation failed"
msgstr "l'allocation pour la structure de l'option argv a echoué" msgstr "l'allocation pour la structure de l'option argv a échoué"
#: src/main/options.c:254 #: src/main/options.c:255
msgid "integer argument expected" msgid "integer argument expected"
msgstr "Valeur entière attendue" msgstr "Valeur entière attendue"
#: src/main/options.c:265 #: src/main/options.c:266
msgid "numeric argument expected" msgid "numeric argument expected"
msgstr "Valeur numérique attendue" msgstr "Valeur numérique attendue"
#: src/main/options.c:276 #: src/main/options.c:277
msgid "process ID or pid:fd pair expected" msgid "process ID or pid:fd pair expected"
msgstr "ID de processus ou paire pid:fd attendue" msgstr "ID de processus ou paire pid:fd attendue"
#: src/main/options.c:283 #: src/main/options.c:284
msgid "invalid process ID" msgid "invalid process ID"
msgstr "ID de processus non valide" msgstr "ID de processus non valide"
#: src/main/options.c:384 src/pv/file.c:323 #: src/main/options.c:388 src/pv/file.c:323
msgid "failed to stat file" msgid "failed to stat file"
msgstr "échec à statuer sur le fichier" msgstr "échec à statuer sur le fichier"
#: src/main/options.c:487 #: src/main/options.c:491
#, c-format #, c-format
msgid "Try `%s --help' for more information." msgid "Try `%s --help' for more information."
msgstr "Essayez `%s --help' pour plus d'information." msgstr "Essayez `%s --help' pour plus d'informations."
#: src/main/options.c:489 #: src/main/options.c:493
#, c-format #, c-format
msgid "Try `%s -h' for more information." msgid "Try `%s -h' for more information."
msgstr "Essayez `%s -h' pour plus d'information." msgstr "Essayez `%s -h' pour plus d'informations."
#: src/main/options.c:520 #: src/main/options.c:524
msgid "" msgid ""
"cannot use line mode or transfer modifier options when watching file " "cannot use line mode or transfer modifier options when watching file "
"descriptors" "descriptors"
@@ -295,101 +301,103 @@ msgstr ""
"impossible d'utiliser le mode ligne ou les options de modificateur de " "impossible d'utiliser le mode ligne ou les options de modificateur de "
"transfert lors de la visualisation des descripteurs de fichiers" "transfert lors de la visualisation des descripteurs de fichiers"
#: src/main/options.c:529 #: src/main/options.c:533
msgid "cannot use cursor positioning when watching file descriptors" msgid "cannot use cursor positioning when watching file descriptors"
msgstr "" msgstr ""
"impossible d'utiliser le positionnement du curseur lors de la visualisation " "impossible d'utiliser le positionnement du curseur lors de la visualisation "
"des descripteurs de fichier" "des descripteurs de fichier"
#: src/main/options.c:538 #: src/main/options.c:542
msgid "cannot use remote control when watching file descriptors" msgid "cannot use remote control when watching file descriptors"
msgstr "" msgstr ""
"impossible d'utiliser la télécommande lors de la visualisation des " "impossible d'utiliser la télécommande lors de la visualisation des "
"descripteurs de fichiers" "descripteurs de fichiers"
#: src/main/options.c:547 #: src/main/options.c:551
msgid "cannot transfer files when watching file descriptors" msgid "cannot transfer files when watching file descriptors"
msgstr "" msgstr ""
"impossible de transférer des fichiers lorsque vous regardez des descripteurs " "impossible de transférer des fichiers lorsque vous regardez des descripteurs "
"de fichiers" "de fichiers"
#: src/main/options.c:562 #: src/main/options.c:566
msgid "not available on systems without /proc/self/fdinfo" msgid "not available on systems without /proc/self/fdinfo"
msgstr "non disponible sur les systèmes sans /proc/self/fdinfo" msgstr "non disponible sur les systèmes sans /proc/self/fdinfo"
#: src/main/remote.c:295 #: src/main/remote.c:302
msgid "message not received" msgid "message not received"
msgstr "message non reçu" msgstr "message non reçu"
#: src/main/remote.c:422 #: src/main/remote.c:429
msgid "SA_SIGINFO not supported on this system" msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO non pris en charge sur ce système" msgstr "SA_SIGINFO non pris en charge sur ce système"
#: src/main/version.c:28 #: src/main/version.c:28
msgid "License: GPLv3+ <https://www.gnu.org/licenses/gpl-3.0.html>" msgid "License: GPLv3+ <https://www.gnu.org/licenses/gpl-3.0.html>"
msgstr "" msgstr "License : GPLv3+ <https://www.gnu.org/licenses/gpl-3.0.html>"
#: src/main/version.c:29 #: src/main/version.c:29
msgid "This is free software: you are free to change and redistribute it." msgid "This is free software: you are free to change and redistribute it."
msgstr "" msgstr ""
"Ceci est un logiciel libre : vous êtes libre de le modifier et de le "
"redistribuer."
#: src/main/version.c:30 #: src/main/version.c:30
msgid "There is NO WARRANTY, to the extent permitted by law." msgid "There is NO WARRANTY, to the extent permitted by law."
msgstr "" msgstr "Il n'y a AUCUNE GARANTIE, dans la mesure permise par la loi."
#: src/main/version.c:32 #: src/main/version.c:32
msgid "Project web site" msgid "Project web site"
msgstr "" msgstr "Site web du projet"
#: src/pv/cursor.c:87 #: src/pv/cursor.c:87
msgid "failed to get terminal name" msgid "failed to get terminal name"
msgstr "échec de lecture du nom du terminal" msgstr "échec de lecture du nom du terminal"
#: src/pv/cursor.c:130 #: src/pv/cursor.c:132
msgid "failed to open lock file" msgid "failed to open lock file"
msgstr "échec de l'ouverture du fichier de verrouillage" msgstr "échec de l'ouverture du fichier de verrouillage"
#: src/pv/cursor.c:163 #: src/pv/cursor.c:165
msgid "lock attempt failed" msgid "lock attempt failed"
msgstr "tentative de verrouillage échoué" msgstr "échec de la tentative de verrouillage"
#: src/pv/cursor.c:424 #: src/pv/cursor.c:426
msgid "failed to open terminal" msgid "failed to open terminal"
msgstr "l'ouverture du terminal a échoué" msgstr "échec de l'ouverture du terminal"
#: src/pv/display.c:192 #: src/pv/display.c:193
msgid "yzafpnum kMGTPEZY" msgid "yzafpnum kMGTPEZY"
msgstr "" msgstr ""
#: src/pv/display.c:210 #: src/pv/display.c:211
msgid "yzafpnum KMGTPEZY" msgid "yzafpnum KMGTPEZY"
msgstr "" msgstr ""
#: src/pv/display.c:746 src/pv/transfer.c:910 #: src/pv/display.c:750 src/pv/transfer.c:954
msgid "buffer allocation failed" msgid "buffer allocation failed"
msgstr "l'allocation de mémoire tampon a échoué" msgstr "échec de l'allocation de mémoire tampon"
#: src/pv/display.c:845 #: src/pv/display.c:856
msgid "b" msgid "b"
msgstr "" msgstr ""
#: src/pv/display.c:848 src/pv/transfer.c:595 #: src/pv/display.c:859 src/pv/transfer.c:596
msgid "B" msgid "B"
msgstr "O" msgstr "O"
#: src/pv/display.c:890 src/pv/display.c:907 #: src/pv/display.c:900 src/pv/display.c:916
msgid "b/s" msgid "b/s"
msgstr "" msgstr ""
#: src/pv/display.c:895 src/pv/display.c:912 #: src/pv/display.c:905 src/pv/display.c:920
msgid "/s" msgid "/s"
msgstr "/s" msgstr "/s"
#: src/pv/display.c:895 src/pv/display.c:912 #: src/pv/display.c:905 src/pv/display.c:920
msgid "B/s" msgid "B/s"
msgstr "O/s" msgstr "O/s"
#: src/pv/display.c:940 src/pv/display.c:944 src/pv/display.c:1010 #: src/pv/display.c:947 src/pv/display.c:951 src/pv/display.c:1017
msgid "ETA" msgid "ETA"
msgstr "ETA" msgstr "ETA"
@@ -415,7 +423,7 @@ msgstr "fichiers d'entré et de sortie sont les mêmes"
#: src/pv/file.c:411 #: src/pv/file.c:411
msgid "(none)" msgid "(none)"
msgstr "" msgstr "(aucun)"
#: src/pv/file.c:413 #: src/pv/file.c:413
msgid "(stdin)" msgid "(stdin)"
@@ -431,47 +439,51 @@ msgstr ""
#: src/pv/state.c:36 #: src/pv/state.c:36
msgid "history structure allocation failed" msgid "history structure allocation failed"
msgstr "" msgstr "l'allocation de la structure de l'historique a échoué"
#: src/pv/state.c:386 src/pv/state.c:397 #: src/pv/state.c:391 src/pv/state.c:402
msgid "file list allocation failed" msgid "file list allocation failed"
msgstr "" msgstr "échec de l'allocation de la liste de fichiers"
#: src/pv/transfer.c:457 #: src/pv/transfer.c:458
msgid "read failed" msgid "read failed"
msgstr "la lecture a échoué" msgstr "la lecture a échoué"
#: src/pv/transfer.c:480 #: src/pv/transfer.c:481
msgid "warning: read errors detected" msgid "warning: read errors detected"
msgstr "avertissement: erreurs de lecture détectées" msgstr "avertissement : erreurs de lecture détectées"
#: src/pv/transfer.c:496 #: src/pv/transfer.c:497
msgid "file is not seekable" msgid "file is not seekable"
msgstr "ne peut pas se déplacer dans le fichier" msgstr "ne peut pas se déplacer dans le fichier"
#: src/pv/transfer.c:574 #: src/pv/transfer.c:575
msgid "failed to seek past error" msgid "failed to seek past error"
msgstr "n'a pas réussi à dépasser l'erreur" msgstr "n'a pas réussi à dépasser l'erreur"
#: src/pv/transfer.c:594 #: src/pv/transfer.c:595
msgid "skipped past read error" msgid "skipped past read error"
msgstr "erreur de lecture dépassée" msgstr "erreur de lecture dépassée"
#: src/pv/transfer.c:634 #: src/pv/transfer.c:635
msgid "no transfer buffer allocated" msgid "no transfer buffer allocated"
msgstr "aucun tampon de transfert alloué"
#: src/pv/transfer.c:676
msgid "failed to set interval timer"
msgstr "" msgstr ""
#: src/pv/transfer.c:647 #: src/pv/transfer.c:694
msgid "failed to set alarm signal handler" msgid "failed to clear interval timer"
msgstr "" msgstr ""
#: src/pv/transfer.c:774 #: src/pv/transfer.c:818
msgid "write failed" msgid "write failed"
msgstr "l'écriture a échoué" msgstr "l'écriture a échoué"
#: src/pv/transfer.c:1007 #: src/pv/transfer.c:1051
msgid "select call failed" msgid "select call failed"
msgstr "appel de sélection a échoué" msgstr "l'appel de sélection a échoué"
#: src/pv/watchpid.c:109 src/pv/watchpid.c:121 src/pv/watchpid.c:130 #: src/pv/watchpid.c:109 src/pv/watchpid.c:121 src/pv/watchpid.c:130
#: src/pv/watchpid.c:184 src/pv/watchpid.c:193 src/pv/watchpid.c:204 #: src/pv/watchpid.c:184 src/pv/watchpid.c:193 src/pv/watchpid.c:204
@@ -481,3 +493,6 @@ msgstr ""
#: src/pv/watchpid.c:130 src/pv/watchpid.c:204 #: src/pv/watchpid.c:130 src/pv/watchpid.c:204
msgid "not a regular file or block device" msgid "not a regular file or block device"
msgstr "pas un fichier ordinaire ou un périphérique de bloc" msgstr "pas un fichier ordinaire ou un périphérique de bloc"
#~ msgid "failed to set alarm signal handler"
#~ msgstr "échec de la définition du gestionnaire de signal d'alarme"
+97 -88
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: pv@ivarch.com\n" "Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2023-11-19 14:19+0000\n" "POT-Creation-Date: 2024-04-21 14:15+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -39,7 +39,7 @@ msgstr "pokaż licznik prędkości przesyłania"
msgid "show data transfer average rate counter" msgid "show data transfer average rate counter"
msgstr "" msgstr ""
#: src/main/help.c:301 src/main/help.c:329 src/main/help.c:341 #: src/main/help.c:301 src/main/help.c:332 src/main/help.c:344
msgid "SEC" msgid "SEC"
msgstr "WARTOŚĆ" msgstr "WARTOŚĆ"
@@ -56,186 +56,190 @@ msgid "show number of bits transferred"
msgstr "" msgstr ""
#: src/main/help.c:311 #: src/main/help.c:311
msgid "show percentage of transfer buffer in use" msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr ""
#: src/main/help.c:313
msgid "NUM"
msgstr "" msgstr ""
#: src/main/help.c:314 #: src/main/help.c:314
msgid "show NUM bytes last written" msgid "show percentage of transfer buffer in use"
msgstr "" msgstr ""
#: src/main/help.c:316 #: src/main/help.c:316
msgid "FORMAT" msgid "NUM"
msgstr "" msgstr ""
#: src/main/help.c:317 #: src/main/help.c:317
msgid "set output format to FORMAT" msgid "show NUM bytes last written"
msgstr ""
#: src/main/help.c:319
msgid "FORMAT"
msgstr "" msgstr ""
#: src/main/help.c:320 #: src/main/help.c:320
msgid "set output format to FORMAT"
msgstr ""
#: src/main/help.c:323
msgid "output percentages, not visual information" msgid "output percentages, not visual information"
msgstr "wświetl wyjście procentowo, bez graficznej prezentacji" msgstr "wświetl wyjście procentowo, bez graficznej prezentacji"
#: src/main/help.c:323 #: src/main/help.c:326
msgid "do not output any transfer information at all" msgid "do not output any transfer information at all"
msgstr "nie wyświetlaj żadnych informacji o przesyłaniu" msgstr "nie wyświetlaj żadnych informacji o przesyłaniu"
#: src/main/help.c:327 #: src/main/help.c:330
msgid "display nothing until first byte transferred" msgid "display nothing until first byte transferred"
msgstr "nie wyświetlaj nic aż do pierwszego przesłanego bajtu" msgstr "nie wyświetlaj nic aż do pierwszego przesłanego bajtu"
#: src/main/help.c:330 #: src/main/help.c:333
msgid "display nothing until SEC seconds have passed" msgid "display nothing until SEC seconds have passed"
msgstr "" msgstr ""
#: src/main/help.c:332 #: src/main/help.c:335
msgid "SIZE" msgid "SIZE"
msgstr "WARTOŚĆ" msgstr "WARTOŚĆ"
#: src/main/help.c:333 #: src/main/help.c:336
msgid "set estimated data size to SIZE bytes" msgid "set estimated data size to SIZE bytes"
msgstr "ustaw oczekiwany rozmiar danych na WARTOŚĆ bajtów" msgstr "ustaw oczekiwany rozmiar danych na WARTOŚĆ bajtów"
#: src/main/help.c:336 #: src/main/help.c:339
msgid "count lines instead of bytes" msgid "count lines instead of bytes"
msgstr "" msgstr ""
#: src/main/help.c:339 #: src/main/help.c:342
msgid "lines are null-terminated" msgid "lines are null-terminated"
msgstr "" msgstr ""
#: src/main/help.c:342 #: src/main/help.c:345
msgid "update every SEC seconds" msgid "update every SEC seconds"
msgstr "aktualizuj co każde WARTOŚĆ sekund" msgstr "aktualizuj co każde WARTOŚĆ sekund"
#: src/main/help.c:344 #: src/main/help.c:347
msgid "WIDTH" msgid "WIDTH"
msgstr "WARTOŚĆ" msgstr "WARTOŚĆ"
#: src/main/help.c:345 #: src/main/help.c:348
msgid "assume terminal is WIDTH characters wide" msgid "assume terminal is WIDTH characters wide"
msgstr "przyjmij, że terminal ma szerokość WARTOŚĆ znaków" msgstr "przyjmij, że terminal ma szerokość WARTOŚĆ znaków"
#: src/main/help.c:347 #: src/main/help.c:350
msgid "HEIGHT" msgid "HEIGHT"
msgstr "" msgstr ""
#: src/main/help.c:348 #: src/main/help.c:351
msgid "assume terminal is HEIGHT rows high" msgid "assume terminal is HEIGHT rows high"
msgstr "przyjmij, że terminal ma szerokość WARTOŚĆ znaków" msgstr "przyjmij, że terminal ma szerokość WARTOŚĆ znaków"
#: src/main/help.c:350 #: src/main/help.c:353
msgid "NAME" msgid "NAME"
msgstr "NAZWA" msgstr "NAZWA"
#: src/main/help.c:351 #: src/main/help.c:354
msgid "prefix visual information with NAME" msgid "prefix visual information with NAME"
msgstr "poprzedź informacje prefiksem NAZWA" msgstr "poprzedź informacje prefiksem NAZWA"
#: src/main/help.c:354 #: src/main/help.c:357
msgid "output even if standard error is not a terminal" msgid "output even if standard error is not a terminal"
msgstr "pokaż wyjście nawet gdy błędy nie są typu terminal" msgstr "pokaż wyjście nawet gdy błędy nie są typu terminal"
#: src/main/help.c:357 #: src/main/help.c:360
msgid "use cursor positioning escape sequences" msgid "use cursor positioning escape sequences"
msgstr "używaj sekwencji escape do pozycjonowania" msgstr "używaj sekwencji escape do pozycjonowania"
#: src/main/help.c:360 #: src/main/help.c:363
msgid "RATE" msgid "RATE"
msgstr "" msgstr ""
#: src/main/help.c:361 #: src/main/help.c:364
msgid "limit transfer to RATE bytes per second" msgid "limit transfer to RATE bytes per second"
msgstr "ogranicz przesyłane dane do RATE bajtów na sekundę" msgstr "ogranicz przesyłane dane do RATE bajtów na sekundę"
#: src/main/help.c:363 src/main/help.c:372 #: src/main/help.c:366 src/main/help.c:375
msgid "BYTES" msgid "BYTES"
msgstr "" msgstr ""
#: src/main/help.c:364 #: src/main/help.c:367
msgid "use a buffer size of BYTES" msgid "use a buffer size of BYTES"
msgstr "" msgstr ""
#: src/main/help.c:367 #: src/main/help.c:370
msgid "never use splice(), always use read/write" msgid "never use splice(), always use read/write"
msgstr "" msgstr ""
#: src/main/help.c:370 #: src/main/help.c:373
msgid "skip read errors in input" msgid "skip read errors in input"
msgstr "" msgstr ""
#: src/main/help.c:373 #: src/main/help.c:376
msgid "skip errors in BYTES blocks at a time" msgid "skip errors in BYTES blocks at a time"
msgstr "" msgstr ""
#: src/main/help.c:376 #: src/main/help.c:379
msgid "stop after --size bytes have been transferred" msgid "stop after --size bytes have been transferred"
msgstr "" msgstr ""
#: src/main/help.c:379 #: src/main/help.c:382
msgid "flush cache to disk after every write" msgid "flush cache to disk after every write"
msgstr "" msgstr ""
#: src/main/help.c:382 #: src/main/help.c:385
msgid "use direct I/O to bypass cache" msgid "use direct I/O to bypass cache"
msgstr "" msgstr ""
#: src/main/help.c:385 #: src/main/help.c:388
msgid "discard input instead of writing to output" msgid "discard input instead of writing to output"
msgstr "" msgstr ""
#: src/main/help.c:388 #: src/main/help.c:391
msgid "PID" msgid "PID"
msgstr "" msgstr ""
#: src/main/help.c:389 #: src/main/help.c:392
msgid "update settings of process PID" msgid "update settings of process PID"
msgstr "" msgstr ""
#: src/main/help.c:393 src/main/help.c:408 #: src/main/help.c:396 src/main/help.c:411
msgid "FILE" msgid "FILE"
msgstr "" msgstr ""
#: src/main/help.c:394 #: src/main/help.c:397
msgid "save process ID in FILE" msgid "save process ID in FILE"
msgstr "" msgstr ""
#: src/main/help.c:397 #: src/main/help.c:400
msgid "PID[:FD]" msgid "PID[:FD]"
msgstr "" msgstr ""
#: src/main/help.c:398 #: src/main/help.c:401
msgid "watch file FD opened by process PID" msgid "watch file FD opened by process PID"
msgstr "" msgstr ""
#: src/main/help.c:402 #: src/main/help.c:405
msgid "show this help and exit" msgid "show this help and exit"
msgstr "wyświetl te informacje z pomocą i wyjdź" msgstr "wyświetl te informacje z pomocą i wyjdź"
#: src/main/help.c:405 #: src/main/help.c:408
msgid "show version information and exit" msgid "show version information and exit"
msgstr "wyświetl informacje o wersji i wyjdź" msgstr "wyświetl informacje o wersji i wyjdź"
#: src/main/help.c:409 #: src/main/help.c:412
msgid "write debug logs to FILE" msgid "write debug logs to FILE"
msgstr "" msgstr ""
#: src/main/help.c:434 #: src/main/help.c:437
#, c-format #, c-format
msgid "Usage: %s [OPTION] [FILE]..." msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Sposób użycia: %s [OPCJA] [PLIK]..." msgstr "Sposób użycia: %s [OPCJA] [PLIK]..."
#: src/main/help.c:445 #: src/main/help.c:448
msgid "" msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring." "Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr "" msgstr ""
"Łączenie PLIK(ów) lub wejścia standardowego, do wyjścia standardowego z " "Łączenie PLIK(ów) lub wejścia standardowego, do wyjścia standardowego z "
"monitoringiem." "monitoringiem."
#: src/main/help.c:582 #: src/main/help.c:585
#, c-format #, c-format
msgid "Please report any bugs to: %s" msgid "Please report any bugs to: %s"
msgstr "Proszę przesyłać zgłoszenia błędów do %s" msgstr "Proszę przesyłać zgłoszenia błędów do %s"
@@ -244,71 +248,71 @@ msgstr "Proszę przesyłać zgłoszenia błędów do %s"
msgid "state allocation failed" msgid "state allocation failed"
msgstr "" msgstr ""
#: src/main/options.c:173 #: src/main/options.c:174
msgid "option structure allocation failed" msgid "option structure allocation failed"
msgstr "nie udało się zaalokować struktur opcji" msgstr "nie udało się zaalokować struktur opcji"
#: src/main/options.c:192 #: src/main/options.c:193
msgid "option structure argv allocation failed" msgid "option structure argv allocation failed"
msgstr "nie udało się zaalokować struktur opcji argv" msgstr "nie udało się zaalokować struktur opcji argv"
#: src/main/options.c:254 #: src/main/options.c:255
msgid "integer argument expected" msgid "integer argument expected"
msgstr "" msgstr ""
#: src/main/options.c:265 #: src/main/options.c:266
msgid "numeric argument expected" msgid "numeric argument expected"
msgstr "" msgstr ""
#: src/main/options.c:276 #: src/main/options.c:277
msgid "process ID or pid:fd pair expected" msgid "process ID or pid:fd pair expected"
msgstr "" msgstr ""
#: src/main/options.c:283 #: src/main/options.c:284
msgid "invalid process ID" msgid "invalid process ID"
msgstr "" msgstr ""
#: src/main/options.c:384 src/pv/file.c:323 #: src/main/options.c:388 src/pv/file.c:323
msgid "failed to stat file" msgid "failed to stat file"
msgstr "nie udało się wykonać operacji stat na pliku" msgstr "nie udało się wykonać operacji stat na pliku"
#: src/main/options.c:487 #: src/main/options.c:491
#, c-format #, c-format
msgid "Try `%s --help' for more information." msgid "Try `%s --help' for more information."
msgstr "Spróbuj `%s --help' by uzyskać więcej informacji" msgstr "Spróbuj `%s --help' by uzyskać więcej informacji"
#: src/main/options.c:489 #: src/main/options.c:493
#, c-format #, c-format
msgid "Try `%s -h' for more information." msgid "Try `%s -h' for more information."
msgstr "Spróbuj `%s -h' by uzyskać więcej informacji" msgstr "Spróbuj `%s -h' by uzyskać więcej informacji"
#: src/main/options.c:520 #: src/main/options.c:524
msgid "" msgid ""
"cannot use line mode or transfer modifier options when watching file " "cannot use line mode or transfer modifier options when watching file "
"descriptors" "descriptors"
msgstr "" msgstr ""
#: src/main/options.c:529 #: src/main/options.c:533
msgid "cannot use cursor positioning when watching file descriptors" msgid "cannot use cursor positioning when watching file descriptors"
msgstr "" msgstr ""
#: src/main/options.c:538 #: src/main/options.c:542
msgid "cannot use remote control when watching file descriptors" msgid "cannot use remote control when watching file descriptors"
msgstr "" msgstr ""
#: src/main/options.c:547 #: src/main/options.c:551
msgid "cannot transfer files when watching file descriptors" msgid "cannot transfer files when watching file descriptors"
msgstr "" msgstr ""
#: src/main/options.c:562 #: src/main/options.c:566
msgid "not available on systems without /proc/self/fdinfo" msgid "not available on systems without /proc/self/fdinfo"
msgstr "" msgstr ""
#: src/main/remote.c:295 #: src/main/remote.c:302
msgid "message not received" msgid "message not received"
msgstr "" msgstr ""
#: src/main/remote.c:422 #: src/main/remote.c:429
msgid "SA_SIGINFO not supported on this system" msgid "SA_SIGINFO not supported on this system"
msgstr "" msgstr ""
@@ -333,51 +337,51 @@ msgid "failed to get terminal name"
msgstr "" msgstr ""
# "Przewidywany czas ukończenia" for ETA is too long # "Przewidywany czas ukończenia" for ETA is too long
#: src/pv/cursor.c:130 #: src/pv/cursor.c:132
msgid "failed to open lock file" msgid "failed to open lock file"
msgstr "" msgstr ""
#: src/pv/cursor.c:163 #: src/pv/cursor.c:165
msgid "lock attempt failed" msgid "lock attempt failed"
msgstr "" msgstr ""
#: src/pv/cursor.c:424 #: src/pv/cursor.c:426
msgid "failed to open terminal" msgid "failed to open terminal"
msgstr "nie udało się otworzyć terminala" msgstr "nie udało się otworzyć terminala"
#: src/pv/display.c:192 #: src/pv/display.c:193
msgid "yzafpnum kMGTPEZY" msgid "yzafpnum kMGTPEZY"
msgstr "" msgstr ""
#: src/pv/display.c:210 #: src/pv/display.c:211
msgid "yzafpnum KMGTPEZY" msgid "yzafpnum KMGTPEZY"
msgstr "" msgstr ""
#: src/pv/display.c:746 src/pv/transfer.c:910 #: src/pv/display.c:750 src/pv/transfer.c:954
msgid "buffer allocation failed" msgid "buffer allocation failed"
msgstr "nie udało się zaalokować bufora" msgstr "nie udało się zaalokować bufora"
#: src/pv/display.c:845 #: src/pv/display.c:856
msgid "b" msgid "b"
msgstr "" msgstr ""
#: src/pv/display.c:848 src/pv/transfer.c:595 #: src/pv/display.c:859 src/pv/transfer.c:596
msgid "B" msgid "B"
msgstr "B" msgstr "B"
#: src/pv/display.c:890 src/pv/display.c:907 #: src/pv/display.c:900 src/pv/display.c:916
msgid "b/s" msgid "b/s"
msgstr "" msgstr ""
#: src/pv/display.c:895 src/pv/display.c:912 #: src/pv/display.c:905 src/pv/display.c:920
msgid "/s" msgid "/s"
msgstr "/s" msgstr "/s"
#: src/pv/display.c:895 src/pv/display.c:912 #: src/pv/display.c:905 src/pv/display.c:920
msgid "B/s" msgid "B/s"
msgstr "B/s" msgstr "B/s"
#: src/pv/display.c:940 src/pv/display.c:944 src/pv/display.c:1010 #: src/pv/display.c:947 src/pv/display.c:951 src/pv/display.c:1017
msgid "ETA" msgid "ETA"
msgstr "ETA" msgstr "ETA"
@@ -422,43 +426,48 @@ msgstr ""
msgid "history structure allocation failed" msgid "history structure allocation failed"
msgstr "" msgstr ""
#: src/pv/state.c:386 src/pv/state.c:397 #: src/pv/state.c:391 src/pv/state.c:402
msgid "file list allocation failed" msgid "file list allocation failed"
msgstr "" msgstr ""
#: src/pv/transfer.c:457 #: src/pv/transfer.c:458
msgid "read failed" msgid "read failed"
msgstr "błąd odczytu" msgstr "błąd odczytu"
#: src/pv/transfer.c:480 #: src/pv/transfer.c:481
msgid "warning: read errors detected" msgid "warning: read errors detected"
msgstr "" msgstr ""
#: src/pv/transfer.c:496 #: src/pv/transfer.c:497
msgid "file is not seekable" msgid "file is not seekable"
msgstr "" msgstr ""
#: src/pv/transfer.c:574 #: src/pv/transfer.c:575
msgid "failed to seek past error" msgid "failed to seek past error"
msgstr "" msgstr ""
#: src/pv/transfer.c:594 #: src/pv/transfer.c:595
msgid "skipped past read error" msgid "skipped past read error"
msgstr "" msgstr ""
#: src/pv/transfer.c:634 #: src/pv/transfer.c:635
msgid "no transfer buffer allocated" msgid "no transfer buffer allocated"
msgstr "" msgstr ""
#: src/pv/transfer.c:647 #: src/pv/transfer.c:676
msgid "failed to set alarm signal handler" msgid "failed to set interval timer"
msgstr "" msgstr ""
#: src/pv/transfer.c:774 # "Przewidywany czas ukończenia" for ETA is too long
#: src/pv/transfer.c:694
msgid "failed to clear interval timer"
msgstr ""
#: src/pv/transfer.c:818
msgid "write failed" msgid "write failed"
msgstr "błąd zapisu" msgstr "błąd zapisu"
#: src/pv/transfer.c:1007 #: src/pv/transfer.c:1051
msgid "select call failed" msgid "select call failed"
msgstr "nie udało się wywołać funkcji select" msgstr "nie udało się wywołać funkcji select"
+97 -89
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: pv@ivarch.com\n" "Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2023-11-19 14:19+0000\n" "POT-Creation-Date: 2024-04-21 14:15+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -39,7 +39,7 @@ msgstr "exibe a taxa de transferência"
msgid "show data transfer average rate counter" msgid "show data transfer average rate counter"
msgstr "exibe o contador da taxa média de transferência de dados" msgstr "exibe o contador da taxa média de transferência de dados"
#: src/main/help.c:301 src/main/help.c:329 src/main/help.c:341 #: src/main/help.c:301 src/main/help.c:332 src/main/help.c:344
msgid "SEC" msgid "SEC"
msgstr "" msgstr ""
@@ -56,186 +56,190 @@ msgid "show number of bits transferred"
msgstr "" msgstr ""
#: src/main/help.c:311 #: src/main/help.c:311
msgid "show percentage of transfer buffer in use" msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "exibe a porcentagem de buffer de transferência em uso"
#: src/main/help.c:313
msgid "NUM"
msgstr "" msgstr ""
#: src/main/help.c:314 #: src/main/help.c:314
msgid "show NUM bytes last written" msgid "show percentage of transfer buffer in use"
msgstr "exibe NUM bytes gravados pela última vez" msgstr "exibe a porcentagem de buffer de transferência em uso"
#: src/main/help.c:316 #: src/main/help.c:316
msgid "FORMAT" msgid "NUM"
msgstr "" msgstr ""
#: src/main/help.c:317 #: src/main/help.c:317
msgid "show NUM bytes last written"
msgstr "exibe NUM bytes gravados pela última vez"
#: src/main/help.c:319
msgid "FORMAT"
msgstr ""
#: src/main/help.c:320
msgid "set output format to FORMAT" msgid "set output format to FORMAT"
msgstr "definir o formato de saída para FORMAT" msgstr "definir o formato de saída para FORMAT"
#: src/main/help.c:320 #: src/main/help.c:323
msgid "output percentages, not visual information" msgid "output percentages, not visual information"
msgstr "exibe apenas as porcentagens, sem informações visuais" msgstr "exibe apenas as porcentagens, sem informações visuais"
#: src/main/help.c:323 #: src/main/help.c:326
msgid "do not output any transfer information at all" msgid "do not output any transfer information at all"
msgstr "executa programa sem exibir quaisquer informações" msgstr "executa programa sem exibir quaisquer informações"
#: src/main/help.c:327 #: src/main/help.c:330
msgid "display nothing until first byte transferred" msgid "display nothing until first byte transferred"
msgstr "não exibe nada até iniciar o processamento" msgstr "não exibe nada até iniciar o processamento"
#: src/main/help.c:330 #: src/main/help.c:333
msgid "display nothing until SEC seconds have passed" msgid "display nothing until SEC seconds have passed"
msgstr "não exibir nada até que os segundos SEC tenham passado" msgstr "não exibir nada até que os segundos SEC tenham passado"
#: src/main/help.c:332 #: src/main/help.c:335
msgid "SIZE" msgid "SIZE"
msgstr "" msgstr ""
#: src/main/help.c:333 #: src/main/help.c:336
msgid "set estimated data size to SIZE bytes" msgid "set estimated data size to SIZE bytes"
msgstr "seta a quantidade estimada de dados em SIZE bytes" msgstr "seta a quantidade estimada de dados em SIZE bytes"
#: src/main/help.c:336 #: src/main/help.c:339
msgid "count lines instead of bytes" msgid "count lines instead of bytes"
msgstr "contar linhas em vez de bytes" msgstr "contar linhas em vez de bytes"
#: src/main/help.c:339 #: src/main/help.c:342
msgid "lines are null-terminated" msgid "lines are null-terminated"
msgstr "linhas são terminadas em nulo" msgstr "linhas são terminadas em nulo"
#: src/main/help.c:342 #: src/main/help.c:345
msgid "update every SEC seconds" msgid "update every SEC seconds"
msgstr "atualiza informações a cada SEC segundos" msgstr "atualiza informações a cada SEC segundos"
#: src/main/help.c:344 #: src/main/help.c:347
msgid "WIDTH" msgid "WIDTH"
msgstr "" msgstr ""
#: src/main/help.c:345 #: src/main/help.c:348
msgid "assume terminal is WIDTH characters wide" msgid "assume terminal is WIDTH characters wide"
msgstr "presuma que o terminal tem WIDTH caracteres de largura" msgstr "presuma que o terminal tem WIDTH caracteres de largura"
#: src/main/help.c:347 #: src/main/help.c:350
msgid "HEIGHT" msgid "HEIGHT"
msgstr "" msgstr ""
#: src/main/help.c:348 #: src/main/help.c:351
msgid "assume terminal is HEIGHT rows high" msgid "assume terminal is HEIGHT rows high"
msgstr "presuma que o terminal tem HEIGHT caracteres de altura" msgstr "presuma que o terminal tem HEIGHT caracteres de altura"
#: src/main/help.c:350 #: src/main/help.c:353
msgid "NAME" msgid "NAME"
msgstr "" msgstr ""
#: src/main/help.c:351 #: src/main/help.c:354
msgid "prefix visual information with NAME" msgid "prefix visual information with NAME"
msgstr "exibe NAME antes das demais informações" msgstr "exibe NAME antes das demais informações"
#: src/main/help.c:354 #: src/main/help.c:357
msgid "output even if standard error is not a terminal" msgid "output even if standard error is not a terminal"
msgstr "gera dados mesmo que a saída de erro seja redirecionada" msgstr "gera dados mesmo que a saída de erro seja redirecionada"
#: src/main/help.c:357 #: src/main/help.c:360
msgid "use cursor positioning escape sequences" msgid "use cursor positioning escape sequences"
msgstr "utiliza caracteres de escape para posicionar o cursor" msgstr "utiliza caracteres de escape para posicionar o cursor"
#: src/main/help.c:360 #: src/main/help.c:363
msgid "RATE" msgid "RATE"
msgstr "" msgstr ""
#: src/main/help.c:361 #: src/main/help.c:364
msgid "limit transfer to RATE bytes per second" msgid "limit transfer to RATE bytes per second"
msgstr "limita a transferência a RATE bytes por segundo" msgstr "limita a transferência a RATE bytes por segundo"
#: src/main/help.c:363 src/main/help.c:372 #: src/main/help.c:366 src/main/help.c:375
msgid "BYTES" msgid "BYTES"
msgstr "" msgstr ""
#: src/main/help.c:364 #: src/main/help.c:367
msgid "use a buffer size of BYTES" msgid "use a buffer size of BYTES"
msgstr "use um tamanho de buffer de BYTES" msgstr "use um tamanho de buffer de BYTES"
#: src/main/help.c:367 #: src/main/help.c:370
msgid "never use splice(), always use read/write" msgid "never use splice(), always use read/write"
msgstr "nunca use splice(), sempre use read/write" msgstr "nunca use splice(), sempre use read/write"
#: src/main/help.c:370 #: src/main/help.c:373
msgid "skip read errors in input" msgid "skip read errors in input"
msgstr "ignorar erros de leitura em entrada" msgstr "ignorar erros de leitura em entrada"
#: src/main/help.c:373 #: src/main/help.c:376
msgid "skip errors in BYTES blocks at a time" msgid "skip errors in BYTES blocks at a time"
msgstr "" msgstr ""
#: src/main/help.c:376 #: src/main/help.c:379
msgid "stop after --size bytes have been transferred" msgid "stop after --size bytes have been transferred"
msgstr "parar após --size bytes terem sido transferidos" msgstr "parar após --size bytes terem sido transferidos"
#: src/main/help.c:379 #: src/main/help.c:382
msgid "flush cache to disk after every write" msgid "flush cache to disk after every write"
msgstr "" msgstr ""
#: src/main/help.c:382 #: src/main/help.c:385
msgid "use direct I/O to bypass cache" msgid "use direct I/O to bypass cache"
msgstr "" msgstr ""
#: src/main/help.c:385 #: src/main/help.c:388
msgid "discard input instead of writing to output" msgid "discard input instead of writing to output"
msgstr "" msgstr ""
#: src/main/help.c:388 #: src/main/help.c:391
msgid "PID" msgid "PID"
msgstr "" msgstr ""
#: src/main/help.c:389 #: src/main/help.c:392
msgid "update settings of process PID" msgid "update settings of process PID"
msgstr "atualizar as configurações do processo PID" msgstr "atualizar as configurações do processo PID"
#: src/main/help.c:393 src/main/help.c:408 #: src/main/help.c:396 src/main/help.c:411
msgid "FILE" msgid "FILE"
msgstr "" msgstr ""
#: src/main/help.c:394 #: src/main/help.c:397
msgid "save process ID in FILE" msgid "save process ID in FILE"
msgstr "salvar ID do processo em FILE" msgstr "salvar ID do processo em FILE"
#: src/main/help.c:397 #: src/main/help.c:400
msgid "PID[:FD]" msgid "PID[:FD]"
msgstr "" msgstr ""
#: src/main/help.c:398 #: src/main/help.c:401
msgid "watch file FD opened by process PID" msgid "watch file FD opened by process PID"
msgstr "assistir arquivo FD aberto pelo processo PID" msgstr "assistir arquivo FD aberto pelo processo PID"
#: src/main/help.c:402 #: src/main/help.c:405
msgid "show this help and exit" msgid "show this help and exit"
msgstr "exibe esta tela de ajuda e termina" msgstr "exibe esta tela de ajuda e termina"
#: src/main/help.c:405 #: src/main/help.c:408
msgid "show version information and exit" msgid "show version information and exit"
msgstr "exibe a versão e termina" msgstr "exibe a versão e termina"
#: src/main/help.c:409 #: src/main/help.c:412
msgid "write debug logs to FILE" msgid "write debug logs to FILE"
msgstr "" msgstr ""
#: src/main/help.c:434 #: src/main/help.c:437
#, c-format #, c-format
msgid "Usage: %s [OPTION] [FILE]..." msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Uso: %s [OPÇÕES] [ARQUIVOS]..." msgstr "Uso: %s [OPÇÕES] [ARQUIVOS]..."
#: src/main/help.c:445 #: src/main/help.c:448
msgid "" msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring." "Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr "" msgstr ""
"Concatena ARQUIVO(s) ou a entrada padrão e grava na saída padrão, com " "Concatena ARQUIVO(s) ou a entrada padrão e grava na saída padrão, com "
"monitoramento." "monitoramento."
#: src/main/help.c:582 #: src/main/help.c:585
#, c-format #, c-format
msgid "Please report any bugs to: %s" msgid "Please report any bugs to: %s"
msgstr "Por favor, reporte quaisquer defeitos para %s" msgstr "Por favor, reporte quaisquer defeitos para %s"
@@ -244,45 +248,45 @@ msgstr "Por favor, reporte quaisquer defeitos para %s"
msgid "state allocation failed" msgid "state allocation failed"
msgstr "alocação de memória de status falhou" msgstr "alocação de memória de status falhou"
#: src/main/options.c:173 #: src/main/options.c:174
msgid "option structure allocation failed" msgid "option structure allocation failed"
msgstr "erro na alocação da estrutura de opções" msgstr "erro na alocação da estrutura de opções"
#: src/main/options.c:192 #: src/main/options.c:193
msgid "option structure argv allocation failed" msgid "option structure argv allocation failed"
msgstr "erro na alocação da estrutura de opções argv" msgstr "erro na alocação da estrutura de opções argv"
#: src/main/options.c:254 #: src/main/options.c:255
msgid "integer argument expected" msgid "integer argument expected"
msgstr "argumento inteiro esperado" msgstr "argumento inteiro esperado"
#: src/main/options.c:265 #: src/main/options.c:266
msgid "numeric argument expected" msgid "numeric argument expected"
msgstr "argumento numérico esperado" msgstr "argumento numérico esperado"
#: src/main/options.c:276 #: src/main/options.c:277
msgid "process ID or pid:fd pair expected" msgid "process ID or pid:fd pair expected"
msgstr "ID do processo ou par pid:fd esperado" msgstr "ID do processo ou par pid:fd esperado"
#: src/main/options.c:283 #: src/main/options.c:284
msgid "invalid process ID" msgid "invalid process ID"
msgstr "ID de processo inválido" msgstr "ID de processo inválido"
#: src/main/options.c:384 src/pv/file.c:323 #: src/main/options.c:388 src/pv/file.c:323
msgid "failed to stat file" msgid "failed to stat file"
msgstr "erro obtendo informações do arquivo" msgstr "erro obtendo informações do arquivo"
#: src/main/options.c:487 #: src/main/options.c:491
#, c-format #, c-format
msgid "Try `%s --help' for more information." msgid "Try `%s --help' for more information."
msgstr "Tente `%s --help' para maiores informações." msgstr "Tente `%s --help' para maiores informações."
#: src/main/options.c:489 #: src/main/options.c:493
#, c-format #, c-format
msgid "Try `%s -h' for more information." msgid "Try `%s -h' for more information."
msgstr "Tente `%s -h' para maiores informações." msgstr "Tente `%s -h' para maiores informações."
#: src/main/options.c:520 #: src/main/options.c:524
msgid "" msgid ""
"cannot use line mode or transfer modifier options when watching file " "cannot use line mode or transfer modifier options when watching file "
"descriptors" "descriptors"
@@ -290,29 +294,29 @@ msgstr ""
"não pode usar o modo de linha ou opções de modificador de transferência ao " "não pode usar o modo de linha ou opções de modificador de transferência ao "
"assistir os descritores de arquivo" "assistir os descritores de arquivo"
#: src/main/options.c:529 #: src/main/options.c:533
msgid "cannot use cursor positioning when watching file descriptors" msgid "cannot use cursor positioning when watching file descriptors"
msgstr "" msgstr ""
"não pode usar o posicionamento do cursor ao observar os descritores de " "não pode usar o posicionamento do cursor ao observar os descritores de "
"arquivo" "arquivo"
#: src/main/options.c:538 #: src/main/options.c:542
msgid "cannot use remote control when watching file descriptors" msgid "cannot use remote control when watching file descriptors"
msgstr "não pode usar o controle remoto ao assistir os descritores de arquivo" msgstr "não pode usar o controle remoto ao assistir os descritores de arquivo"
#: src/main/options.c:547 #: src/main/options.c:551
msgid "cannot transfer files when watching file descriptors" msgid "cannot transfer files when watching file descriptors"
msgstr "não pode transferir arquivos ao assistir descritores de arquivo" msgstr "não pode transferir arquivos ao assistir descritores de arquivo"
#: src/main/options.c:562 #: src/main/options.c:566
msgid "not available on systems without /proc/self/fdinfo" msgid "not available on systems without /proc/self/fdinfo"
msgstr "não disponível em sistemas sem /proc/self/fdinfo" msgstr "não disponível em sistemas sem /proc/self/fdinfo"
#: src/main/remote.c:295 #: src/main/remote.c:302
msgid "message not received" msgid "message not received"
msgstr "mensagem não recebida" msgstr "mensagem não recebida"
#: src/main/remote.c:422 #: src/main/remote.c:429
msgid "SA_SIGINFO not supported on this system" msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO não suportado neste sistema" msgstr "SA_SIGINFO não suportado neste sistema"
@@ -336,51 +340,51 @@ msgstr ""
msgid "failed to get terminal name" msgid "failed to get terminal name"
msgstr "erro ao ler o nome do terminal" msgstr "erro ao ler o nome do terminal"
#: src/pv/cursor.c:130 #: src/pv/cursor.c:132
msgid "failed to open lock file" msgid "failed to open lock file"
msgstr "erro ao abrir arquivo de bloqueio" msgstr "erro ao abrir arquivo de bloqueio"
#: src/pv/cursor.c:163 #: src/pv/cursor.c:165
msgid "lock attempt failed" msgid "lock attempt failed"
msgstr "tentativa de bloqueio falhou" msgstr "tentativa de bloqueio falhou"
#: src/pv/cursor.c:424 #: src/pv/cursor.c:426
msgid "failed to open terminal" msgid "failed to open terminal"
msgstr "erro abrindo o terminal" msgstr "erro abrindo o terminal"
#: src/pv/display.c:192 #: src/pv/display.c:193
msgid "yzafpnum kMGTPEZY" msgid "yzafpnum kMGTPEZY"
msgstr "" msgstr ""
#: src/pv/display.c:210 #: src/pv/display.c:211
msgid "yzafpnum KMGTPEZY" msgid "yzafpnum KMGTPEZY"
msgstr "" msgstr ""
#: src/pv/display.c:746 src/pv/transfer.c:910 #: src/pv/display.c:750 src/pv/transfer.c:954
msgid "buffer allocation failed" msgid "buffer allocation failed"
msgstr "erro alocando o buffer" msgstr "erro alocando o buffer"
#: src/pv/display.c:845 #: src/pv/display.c:856
msgid "b" msgid "b"
msgstr "" msgstr ""
#: src/pv/display.c:848 src/pv/transfer.c:595 #: src/pv/display.c:859 src/pv/transfer.c:596
msgid "B" msgid "B"
msgstr "" msgstr ""
#: src/pv/display.c:890 src/pv/display.c:907 #: src/pv/display.c:900 src/pv/display.c:916
msgid "b/s" msgid "b/s"
msgstr "" msgstr ""
#: src/pv/display.c:895 src/pv/display.c:912 #: src/pv/display.c:905 src/pv/display.c:920
msgid "/s" msgid "/s"
msgstr "" msgstr ""
#: src/pv/display.c:895 src/pv/display.c:912 #: src/pv/display.c:905 src/pv/display.c:920
msgid "B/s" msgid "B/s"
msgstr "B/s" msgstr "B/s"
#: src/pv/display.c:940 src/pv/display.c:944 src/pv/display.c:1010 #: src/pv/display.c:947 src/pv/display.c:951 src/pv/display.c:1017
msgid "ETA" msgid "ETA"
msgstr "ETA" msgstr "ETA"
@@ -424,43 +428,47 @@ msgstr ""
msgid "history structure allocation failed" msgid "history structure allocation failed"
msgstr "" msgstr ""
#: src/pv/state.c:386 src/pv/state.c:397 #: src/pv/state.c:391 src/pv/state.c:402
msgid "file list allocation failed" msgid "file list allocation failed"
msgstr "" msgstr ""
#: src/pv/transfer.c:457 #: src/pv/transfer.c:458
msgid "read failed" msgid "read failed"
msgstr "erro de leitura" msgstr "erro de leitura"
#: src/pv/transfer.c:480 #: src/pv/transfer.c:481
msgid "warning: read errors detected" msgid "warning: read errors detected"
msgstr "aviso: erros de leitura detectados" msgstr "aviso: erros de leitura detectados"
#: src/pv/transfer.c:496 #: src/pv/transfer.c:497
msgid "file is not seekable" msgid "file is not seekable"
msgstr "não pode mover dentro do arquivo" msgstr "não pode mover dentro do arquivo"
#: src/pv/transfer.c:574 #: src/pv/transfer.c:575
msgid "failed to seek past error" msgid "failed to seek past error"
msgstr "não pode ir além do erro" msgstr "não pode ir além do erro"
#: src/pv/transfer.c:594 #: src/pv/transfer.c:595
msgid "skipped past read error" msgid "skipped past read error"
msgstr "ignorado erro de leitura" msgstr "ignorado erro de leitura"
#: src/pv/transfer.c:634 #: src/pv/transfer.c:635
msgid "no transfer buffer allocated" msgid "no transfer buffer allocated"
msgstr "" msgstr ""
#: src/pv/transfer.c:647 #: src/pv/transfer.c:676
msgid "failed to set alarm signal handler" msgid "failed to set interval timer"
msgstr "" msgstr ""
#: src/pv/transfer.c:774 #: src/pv/transfer.c:694
msgid "failed to clear interval timer"
msgstr ""
#: src/pv/transfer.c:818
msgid "write failed" msgid "write failed"
msgstr "erro de gravação" msgstr "erro de gravação"
#: src/pv/transfer.c:1007 #: src/pv/transfer.c:1051
msgid "select call failed" msgid "select call failed"
msgstr "erro na chamada da função select" msgstr "erro na chamada da função select"
+1 -1
View File
@@ -3,7 +3,7 @@
* `configure' script. Include this after config.h and before anything * `configure' script. Include this after config.h and before anything
* else. * else.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
+3
View File
@@ -100,6 +100,9 @@
/* Define to 1 if you have the `select' function. */ /* Define to 1 if you have the `select' function. */
#undef HAVE_SELECT #undef HAVE_SELECT
/* Define to 1 if you have the `setitimer' function. */
#undef HAVE_SETITIMER
/* Define to 1 if you have the `setlocale' function. */ /* Define to 1 if you have the `setlocale' function. */
#undef HAVE_SETLOCALE #undef HAVE_SETLOCALE
+2 -1
View File
@@ -1,7 +1,7 @@
/* /*
* Global program option structure and the parsing function prototype. * Global program option structure and the parsing function prototype.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -34,6 +34,7 @@ struct opts_s { /* structure describing run-time options */
bool average_rate; /* average rate counter flag */ bool average_rate; /* average rate counter flag */
bool bytes; /* bytes transferred flag */ bool bytes; /* bytes transferred flag */
bool bits; /* report transfer size in bits */ bool bits; /* report transfer size in bits */
bool decimal_units; /* decimal prefix flag */
bool bufpercent; /* transfer buffer percentage flag */ bool bufpercent; /* transfer buffer percentage flag */
size_t lastwritten; /* show N bytes last written */ size_t lastwritten; /* show N bytes last written */
bool force; /* force-if-not-terminal flag */ bool force; /* force-if-not-terminal flag */
+3 -1
View File
@@ -1,7 +1,7 @@
/* /*
* Functions internal to the PV library. Include "config.h" first. * Functions internal to the PV library. Include "config.h" first.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -105,6 +105,7 @@ struct pvstate_s {
bool wait; /* wait for data before display */ bool wait; /* wait for data before display */
bool linemode; /* count lines instead of bytes */ bool linemode; /* count lines instead of bytes */
bool bits; /* report bits instead of bytes */ bool bits; /* report bits instead of bytes */
bool decimal_units; /* use decimal prefixes */
bool null_terminated_lines; /* lines are null-terminated */ bool null_terminated_lines; /* lines are null-terminated */
bool no_display; /* do nothing other than pipe data */ bool no_display; /* do nothing other than pipe data */
unsigned int skip_errors; /* skip read errors counter */ unsigned int skip_errors; /* skip read errors counter */
@@ -156,6 +157,7 @@ struct pvstate_s {
#ifdef SA_SIGINFO #ifdef SA_SIGINFO
struct sigaction old_sigusr2; struct sigaction old_sigusr2;
#endif #endif
struct sigaction old_sigalrm;
} signal; } signal;
/******************* /*******************
+7 -4
View File
@@ -1,7 +1,7 @@
/* /*
* Functions used across the program. * Functions used across the program.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -49,15 +49,17 @@ typedef enum {
extern double pv_getnum_interval(const char *); extern double pv_getnum_interval(const char *);
/* /*
* Return the given string converted to an off_t, for use as a size. * Return the given string converted to an off_t, for use as a size,
* optionally interpreting suffixes in decimal units (multiples of 1000)
* instead of multiples of 1024.
*/ */
extern off_t pv_getnum_size(const char *); extern off_t pv_getnum_size(const char *, bool);
/* /*
* Return the given string converted to an unsigned integer, for use as a * Return the given string converted to an unsigned integer, for use as a
* count such as screen width. * count such as screen width.
*/ */
extern unsigned int pv_getnum_count(const char *); extern unsigned int pv_getnum_count(const char *, bool);
/* /*
* Return true if the given string is a number of the given type. NB an * Return true if the given string is a number of the given type. NB an
@@ -164,6 +166,7 @@ extern void pv_state_wait_set(pvstate_t, bool);
extern void pv_state_delay_start_set(pvstate_t, double); extern void pv_state_delay_start_set(pvstate_t, double);
extern void pv_state_linemode_set(pvstate_t, bool); extern void pv_state_linemode_set(pvstate_t, bool);
extern void pv_state_bits_set(pvstate_t, bool); extern void pv_state_bits_set(pvstate_t, bool);
extern void pv_state_decimal_units_set(pvstate_t, bool);
extern void pv_state_null_terminated_lines_set(pvstate_t, bool); extern void pv_state_null_terminated_lines_set(pvstate_t, bool);
extern void pv_state_no_display_set(pvstate_t, bool); extern void pv_state_no_display_set(pvstate_t, bool);
extern void pv_state_skip_errors_set(pvstate_t, unsigned int); extern void pv_state_skip_errors_set(pvstate_t, unsigned int);
+1 -1
View File
@@ -1,7 +1,7 @@
/* /*
* Output debugging information. * Output debugging information.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
+4 -1
View File
@@ -1,7 +1,7 @@
/* /*
* Output command-line help to stdout. * Output command-line help to stdout.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -307,6 +307,9 @@ void display_help(void)
{ "-8", "--bits", NULL, { "-8", "--bits", NULL,
N_("show number of bits transferred"), N_("show number of bits transferred"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
{ "-k", "--si", NULL,
N_("treat suffixes as multiples of 1000 rather than 1024"),
{ 0, 0, 0, 0} },
{ "-T", "--buffer-percent", NULL, { "-T", "--buffer-percent", NULL,
N_("show percentage of transfer buffer in use"), N_("show percentage of transfer buffer in use"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
+2 -1
View File
@@ -2,7 +2,7 @@
* Main program entry point - read the command line options, then perform * Main program entry point - read the command line options, then perform
* the appropriate actions. * the appropriate actions.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -278,6 +278,7 @@ int main(int argc, char **argv)
pv_state_delay_start_set(state, opts->delay_start); pv_state_delay_start_set(state, opts->delay_start);
pv_state_linemode_set(state, opts->linemode); pv_state_linemode_set(state, opts->linemode);
pv_state_bits_set(state, opts->bits); pv_state_bits_set(state, opts->bits);
pv_state_decimal_units_set(state, opts->decimal_units);
pv_state_null_terminated_lines_set(state, opts->null_terminated_lines); pv_state_null_terminated_lines_set(state, opts->null_terminated_lines);
pv_state_skip_errors_set(state, opts->skip_errors); pv_state_skip_errors_set(state, opts->skip_errors);
pv_state_error_skip_block_set(state, opts->error_skip_block); pv_state_error_skip_block_set(state, opts->error_skip_block);
+15 -11
View File
@@ -1,7 +1,7 @@
/* /*
* Parse command-line options. * Parse command-line options.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -114,6 +114,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
{ "average-rate", 0, NULL, (int) 'a' }, { "average-rate", 0, NULL, (int) 'a' },
{ "bytes", 0, NULL, (int) 'b' }, { "bytes", 0, NULL, (int) 'b' },
{ "bits", 0, NULL, (int) '8' }, { "bits", 0, NULL, (int) '8' },
{ "si", 0, NULL, (int) 'k' },
{ "buffer-percent", 0, NULL, (int) 'T' }, { "buffer-percent", 0, NULL, (int) 'T' },
{ "last-written", 1, NULL, (int) 'A' }, { "last-written", 1, NULL, (int) 'A' },
{ "force", 0, NULL, (int) 'f' }, { "force", 0, NULL, (int) 'f' },
@@ -151,7 +152,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
/*@+nullassign@ */ /*@+nullassign@ */
int option_index = 0; int option_index = 0;
#endif /* HAVE_GETOPT_LONG */ #endif /* HAVE_GETOPT_LONG */
char *short_options = "hVpteIrab8TA:fnqcWD:s:l0i:w:H:N:F:L:B:CEZ:SYKXR:P:d:m:" char *short_options = "hVpteIrab8kTA:fnqcWD:s:l0i:w:H:N:F:L:B:CEZ:SYKXR:P:d:m:"
#ifdef ENABLE_DEBUGGING #ifdef ENABLE_DEBUGGING
"!:" "!:"
#endif #endif
@@ -335,13 +336,16 @@ opts_t opts_parse(unsigned int argc, char **argv)
opts->bits = true; opts->bits = true;
numopts++; numopts++;
break; break;
case 'k':
opts->decimal_units = true;
break;
case 'T': case 'T':
opts->bufpercent = true; opts->bufpercent = true;
numopts++; numopts++;
opts->no_splice = true; opts->no_splice = true;
break; break;
case 'A': case 'A':
opts->lastwritten = (size_t) pv_getnum_count(optarg); opts->lastwritten = (size_t) pv_getnum_count(optarg, opts->decimal_units);
numopts++; numopts++;
opts->no_splice = true; opts->no_splice = true;
break; break;
@@ -387,7 +391,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
/*@+mustfreefresh@ */ /*@+mustfreefresh@ */
} }
} else { } else {
opts->size = pv_getnum_size(optarg); opts->size = pv_getnum_size(optarg, opts->decimal_units);
} }
break; break;
case 'l': case 'l':
@@ -401,11 +405,11 @@ opts_t opts_parse(unsigned int argc, char **argv)
opts->interval = pv_getnum_interval(optarg); opts->interval = pv_getnum_interval(optarg);
break; break;
case 'w': case 'w':
opts->width = pv_getnum_count(optarg); opts->width = pv_getnum_count(optarg, opts->decimal_units);
opts->width_set_manually = opts->width == 0 ? false : true; opts->width_set_manually = opts->width == 0 ? false : true;
break; break;
case 'H': case 'H':
opts->height = pv_getnum_count(optarg); opts->height = pv_getnum_count(optarg, opts->decimal_units);
opts->height_set_manually = opts->height == 0 ? false : true; opts->height_set_manually = opts->height == 0 ? false : true;
break; break;
case 'N': case 'N':
@@ -417,10 +421,10 @@ opts_t opts_parse(unsigned int argc, char **argv)
} }
break; break;
case 'L': case 'L':
opts->rate_limit = pv_getnum_size(optarg); opts->rate_limit = pv_getnum_size(optarg, opts->decimal_units);
break; break;
case 'B': case 'B':
opts->buffer_size = (size_t) pv_getnum_size(optarg); opts->buffer_size = (size_t) pv_getnum_size(optarg, opts->decimal_units);
opts->no_splice = true; opts->no_splice = true;
break; break;
case 'C': case 'C':
@@ -430,7 +434,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
opts->skip_errors++; opts->skip_errors++;
break; break;
case 'Z': case 'Z':
opts->error_skip_block = pv_getnum_size(optarg); opts->error_skip_block = pv_getnum_size(optarg, opts->decimal_units);
break; break;
case 'S': case 'S':
opts->stop_at_size = true; opts->stop_at_size = true;
@@ -446,7 +450,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
opts->no_splice = true; opts->no_splice = true;
break; break;
case 'R': case 'R':
opts->remote = pv_getnum_count(optarg); opts->remote = pv_getnum_count(optarg, false);
break; break;
case 'P': case 'P':
opts->pidfile = pv_strdup(optarg); opts->pidfile = pv_strdup(optarg);
@@ -473,7 +477,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
opts->watch_fd = parse_fd; opts->watch_fd = parse_fd;
break; break;
case 'm': case 'm':
opts->average_rate_window = pv_getnum_count(optarg); opts->average_rate_window = pv_getnum_count(optarg, opts->decimal_units);
break; break;
#ifdef ENABLE_DEBUGGING #ifdef ENABLE_DEBUGGING
case '!': case '!':
+8 -1
View File
@@ -1,7 +1,7 @@
/* /*
* Remote-control functions. * Remote-control functions.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -84,6 +84,13 @@ static FILE *pv__control_file(char *filename, size_t bufsize, pid_t control_pid,
home_dir = getenv("HOME"); /* flawfinder: ignore */ home_dir = getenv("HOME"); /* flawfinder: ignore */
if (NULL == home_dir) if (NULL == home_dir)
return NULL; return NULL;
if ('\0' == home_dir[0])
return NULL;
/*
* flawfinder rationale: null and zero-size values are
* rejected, and the destination buffer is bounded.
*/
(void) pv_snprintf(filename, bufsize, "%s/.pv/remote.%lu", home_dir, (unsigned long) control_pid); (void) pv_snprintf(filename, bufsize, "%s/.pv/remote.%lu", home_dir, (unsigned long) control_pid);
control_fd = open(filename, open_flags, open_mode); /* flawfinder: ignore */ control_fd = open(filename, open_flags, open_mode); /* flawfinder: ignore */
+1 -1
View File
@@ -1,7 +1,7 @@
/* /*
* Output version information to stdout. * Output version information to stdout.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
+10 -8
View File
@@ -10,7 +10,7 @@
* terminal, so we try to use a lockfile if terminal locking doesn't work, * terminal, so we try to use a lockfile if terminal locking doesn't work,
* and finally abort if even that is unavailable. * and finally abort if even that is unavailable.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -95,14 +95,16 @@ static void pv_crs_open_lockfile(pvstate_t state, int fd)
return; return;
} }
tmpdir = (char *) getenv("TMPDIR"); /* flawfinder: ignore */
if ((NULL == tmpdir) || ('\0' == tmpdir[0]))
tmpdir = (char *) getenv("TMP"); /* flawfinder: ignore */
if ((NULL == tmpdir) || ('\0' == tmpdir[0]))
tmpdir = "/tmp";
/* /*
* We used to look at the TMPDIR or TMP environment variables to * flawfinder rationale: null and zero-size values of $TMPDIR and
* override the temporary directory, but this leads to less * $TMP are rejected, and the destination buffer is bounded.
* predictable behaviour, and flawfinder points out that relying on
* environment variables in this way is not safe. So the lock
* directory is hard-coded to "/tmp" now (Sep 2023).
*/ */
tmpdir = "/tmp";
memset(state->cursor.lock_file, 0, PV_SIZEOF_CRS_LOCK_FILE); memset(state->cursor.lock_file, 0, PV_SIZEOF_CRS_LOCK_FILE);
(void) pv_snprintf(state->cursor.lock_file, (void) pv_snprintf(state->cursor.lock_file,
@@ -293,7 +295,7 @@ static int pv_crs_get_ypos(int terminalfd)
} }
#endif /* !CURSOR_ANSWERBACK_BYTE_BY_BYTE */ #endif /* !CURSOR_ANSWERBACK_BYTE_BY_BYTE */
ypos = (int) pv_getnum_count(cpr + 2); ypos = (int) pv_getnum_count(cpr + 2, false);
if (0 != tcsetattr(terminalfd, TCSANOW | TCSAFLUSH, &old_tty)) { if (0 != tcsetattr(terminalfd, TCSANOW | TCSAFLUSH, &old_tty)) {
debug("%s: %s", "tcsetattr (2) failed", strerror(errno)); debug("%s: %s", "tcsetattr (2) failed", strerror(errno));
+19 -12
View File
@@ -1,7 +1,7 @@
/* /*
* Display functions. * Display functions.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -146,10 +146,11 @@ static long pv__seconds_remaining(const off_t so_far, const off_t total, const l
} }
/* /*
* Types of transfer count - bytes or lines. * Types of transfer count - bytes, decimal bytes or lines.
*/ */
typedef enum { typedef enum {
PV_TRANSFERCOUNT_BYTES, PV_TRANSFERCOUNT_BYTES,
PV_TRANSFERCOUNT_DECBYTES,
PV_TRANSFERCOUNT_LINES PV_TRANSFERCOUNT_LINES
} pv__transfercount_t; } pv__transfercount_t;
@@ -346,6 +347,9 @@ static void pv__sizestr(char *buffer, size_t bufsize, char *format,
if (count_type == PV_TRANSFERCOUNT_BYTES) { if (count_type == PV_TRANSFERCOUNT_BYTES) {
suffix = suffix_bytes; suffix = suffix_bytes;
divider = 1024.0; divider = 1024.0;
} else if (count_type == PV_TRANSFERCOUNT_DECBYTES) {
suffix = suffix_bytes;
divider = 1000.0;
} else { } else {
suffix = suffix_basic; suffix = suffix_basic;
divider = 1000.0; divider = 1000.0;
@@ -808,6 +812,7 @@ static bool pv__format(pvstate_t state, long double elapsed_sec, off_t bytes_sin
time_t then; time_t then;
struct tm *time_ptr; struct tm *time_ptr;
char *time_format; char *time_format;
pv__transfercount_t count_type;
if (!state->display.component[component_type].required) if (!state->display.component[component_type].required)
continue; continue;
@@ -828,6 +833,12 @@ static bool pv__format(pvstate_t state, long double elapsed_sec, off_t bytes_sin
component_content[0] = '\0'; component_content[0] = '\0';
component_buf_size = PV_SIZEOF_COMPONENT_STR; component_buf_size = PV_SIZEOF_COMPONENT_STR;
count_type = PV_TRANSFERCOUNT_BYTES;
if (state->control.linemode)
count_type = PV_TRANSFERCOUNT_LINES;
else if (state->control.decimal_units)
count_type = PV_TRANSFERCOUNT_DECBYTES;
switch (component_type) { switch (component_type) {
case PV_COMPONENT_STRING: case PV_COMPONENT_STRING:
@@ -842,11 +853,10 @@ static bool pv__format(pvstate_t state, long double elapsed_sec, off_t bytes_sin
/*@-mustfreefresh @ */ /*@-mustfreefresh @ */
if (state->control.bits && !state->control.linemode) { if (state->control.bits && !state->control.linemode) {
pv__sizestr(component_content, component_buf_size, "%s", pv__sizestr(component_content, component_buf_size, "%s",
(long double) total_bytes * 8, "", _("b"), PV_TRANSFERCOUNT_BYTES); (long double) total_bytes * 8, "", _("b"), count_type);
} else { } else {
pv__sizestr(component_content, component_buf_size, "%s", pv__sizestr(component_content, component_buf_size, "%s",
(long double) total_bytes, "", _("B"), (long double) total_bytes, "", _("B"), count_type);
state->control.linemode ? PV_TRANSFERCOUNT_LINES : PV_TRANSFERCOUNT_BYTES);
} }
/*@+mustfreefresh @ */ /*@+mustfreefresh @ */
/* splint: we trust gettext() not to really leak memory. */ /* splint: we trust gettext() not to really leak memory. */
@@ -888,12 +898,11 @@ static bool pv__format(pvstate_t state, long double elapsed_sec, off_t bytes_sin
if (state->control.bits && !state->control.linemode) { if (state->control.bits && !state->control.linemode) {
/* bits per second */ /* bits per second */
pv__sizestr(component_content, component_buf_size, "[%s]", 8 * rate, "", _("b/s"), pv__sizestr(component_content, component_buf_size, "[%s]", 8 * rate, "", _("b/s"),
PV_TRANSFERCOUNT_BYTES); count_type);
} else { } else {
/* bytes or lines per second */ /* bytes or lines per second */
pv__sizestr(component_content, component_buf_size, pv__sizestr(component_content, component_buf_size,
"[%s]", rate, _("/s"), _("B/s"), "[%s]", rate, _("/s"), _("B/s"), count_type);
state->control.linemode ? PV_TRANSFERCOUNT_LINES : PV_TRANSFERCOUNT_BYTES);
} }
/*@+mustfreefresh @ *//* splint: see above. */ /*@+mustfreefresh @ *//* splint: see above. */
break; break;
@@ -904,13 +913,11 @@ static bool pv__format(pvstate_t state, long double elapsed_sec, off_t bytes_sin
if (state->control.bits && !state->control.linemode) { if (state->control.bits && !state->control.linemode) {
/* bits per second */ /* bits per second */
pv__sizestr(component_content, component_buf_size, pv__sizestr(component_content, component_buf_size,
"[%s]", 8 * average_rate, "", _("b/s"), PV_TRANSFERCOUNT_BYTES); "[%s]", 8 * average_rate, "", _("b/s"), count_type);
} else { } else {
/* bytes or lines per second */ /* bytes or lines per second */
pv__sizestr(component_content, pv__sizestr(component_content,
component_buf_size, component_buf_size, "[%s]", average_rate, _("/s"), _("B/s"), count_type);
"[%s]", average_rate, _("/s"), _("B/s"),
state->control.linemode ? PV_TRANSFERCOUNT_LINES : PV_TRANSFERCOUNT_BYTES);
} }
/*@+mustfreefresh @ *//* splint: see above. */ /*@+mustfreefresh @ *//* splint: see above. */
break; break;
+1 -1
View File
@@ -1,7 +1,7 @@
/* /*
* Functions relating to elapsed time. * Functions relating to elapsed time.
* *
* Copyright 2023 Andrew Wood * Copyright 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
+1 -1
View File
@@ -1,7 +1,7 @@
/* /*
* Functions for opening and closing files, and calculating their size. * Functions for opening and closing files, and calculating their size.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
+1 -1
View File
@@ -1,7 +1,7 @@
/* /*
* Functions providing the main transfer or file descriptor watching loop. * Functions providing the main transfer or file descriptor watching loop.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
+39 -15
View File
@@ -1,7 +1,7 @@
/* /*
* Functions for converting strings to numbers. * Functions for converting strings to numbers.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -27,14 +27,16 @@ static bool pv__isdigit(char c)
* Return the numeric value of "str", as an off_t, where "str" is expected * Return the numeric value of "str", as an off_t, where "str" is expected
* to be a sequence of digits (without a thousands separator), possibly with * to be a sequence of digits (without a thousands separator), possibly with
* a fractional part, optionally followed by a units suffix such as "K" for * a fractional part, optionally followed by a units suffix such as "K" for
* kibibytes. * kibibytes. If "decimal_units" is true, suffixes are interpreted as
* multiples of 1000, rather than multiples of 1024.
*/ */
off_t pv_getnum_size(const char *str) off_t pv_getnum_size(const char *str, bool decimal_units)
{ {
off_t integral_part = 0; off_t integral_part = 0;
off_t fractional_part = 0; off_t fractional_part = 0;
unsigned int fractional_divisor = 1; unsigned int fractional_divisor = 1;
unsigned int shift = 0; unsigned int binary_shift = 0;
off_t decimal_multiplier = 0;
if (NULL == str) if (NULL == str)
return (off_t) 0; return (off_t) 0;
@@ -74,7 +76,7 @@ off_t pv_getnum_size(const char *str)
/* /*
* Parse any units given (K=KiB=*1024, M=MiB=1024KiB, G=GiB=1024MiB, * Parse any units given (K=KiB=*1024, M=MiB=1024KiB, G=GiB=1024MiB,
* T=TiB=1024GiB). * T=TiB=1024GiB; replace 1024 with 1000 if decimal_units is true).
*/ */
if (str[0] != '\0') { if (str[0] != '\0') {
/* Skip any spaces or tabs after the digits. */ /* Skip any spaces or tabs after the digits. */
@@ -83,19 +85,23 @@ off_t pv_getnum_size(const char *str)
switch (str[0]) { switch (str[0]) {
case 'k': case 'k':
case 'K': case 'K':
shift = 10; binary_shift = 10;
decimal_multiplier = 1000;
break; break;
case 'm': case 'm':
case 'M': case 'M':
shift = 20; binary_shift = 20;
decimal_multiplier = 1000000;
break; break;
case 'g': case 'g':
case 'G': case 'G':
shift = 30; binary_shift = 30;
decimal_multiplier = 1000000000;
break; break;
case 't': case 't':
case 'T': case 'T':
shift = 40; binary_shift = 40;
decimal_multiplier = 1000000000000;
break; break;
default: default:
break; break;
@@ -103,14 +109,24 @@ off_t pv_getnum_size(const char *str)
} }
/* /*
* Binary left-shift the supplied number by "shift" times, i.e. * If decimal_units is false, zero decimal_multiplier; if true, zero
* binary_shift. This is so we only do one or the other.
*/
if (decimal_units) {
binary_shift = 0;
} else {
decimal_multiplier = 0;
}
/*
* Binary left-shift the supplied number by "binary_shift" times, i.e.
* apply the given units (KiB, MiB, etc) to it, but never shift left * apply the given units (KiB, MiB, etc) to it, but never shift left
* more than 30 at a time to avoid overflows. * more than 30 at a time to avoid overflows.
*/ */
while (shift > 0) { while (binary_shift > 0) {
unsigned int shiftby; unsigned int shiftby;
shiftby = shift; shiftby = binary_shift;
if (shiftby > 30) if (shiftby > 30)
shiftby = 30; shiftby = 30;
@@ -124,7 +140,15 @@ off_t pv_getnum_size(const char *str)
fractional_part = (off_t) (fractional_part << shiftby); fractional_part = (off_t) (fractional_part << shiftby);
/*@+shiftimplementation@ */ /*@+shiftimplementation@ */
shift -= shiftby; binary_shift -= shiftby;
}
/*
* Multiply the supplied number by the decimal multiplier.
*/
if (decimal_multiplier > 0) {
integral_part = integral_part * decimal_multiplier;
fractional_part = fractional_part * decimal_multiplier;
} }
/* /*
@@ -183,9 +207,9 @@ double pv_getnum_interval(const char *str)
* rules as pv_getnum_size(), expecting "str" to express a value to be used * rules as pv_getnum_size(), expecting "str" to express a value to be used
* as a count (such as number of screen columns, or size of a buffer). * as a count (such as number of screen columns, or size of a buffer).
*/ */
unsigned int pv_getnum_count(const char *str) unsigned int pv_getnum_count(const char *str, bool decimal_units)
{ {
return (unsigned int) pv_getnum_size(str); return (unsigned int) pv_getnum_size(str, decimal_units);
} }
+27 -1
View File
@@ -1,7 +1,7 @@
/* /*
* Signal handling functions. * Signal handling functions.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -244,6 +244,22 @@ bool pv_sigusr2_received(pvstate_t state, pid_t * pid)
#endif #endif
/*
* Handle alarm signals by doing nothing.
*
* Note that we have to use a signal handler like this, instead of using
* SIG_IGN, because if we ignore the signal entirely, it does nothing,
* including not interrupting blocking write() calls - which is what we're
* using alarm signals for in the first place.
*/
static void pv_sig_alrm( /*@unused@ */ __attribute__((unused))
int s)
{
debug("%s", "SIGALRM received");
/* Do nothing. */
}
/* /*
* Initialise signal handling. * Initialise signal handling.
*/ */
@@ -360,6 +376,15 @@ void pv_sig_init(pvstate_t state)
* while backgrounded (see the SIGTTOU handler above). * while backgrounded (see the SIGTTOU handler above).
*/ */
pv_sig_ensure_tty_tostop(); pv_sig_ensure_tty_tostop();
/*
* Handle SIGALRM by doing nothing, so we can use alarms or interval
* timers to interrupt blocking writes (returning EINTR).
*/
sa.sa_handler = pv_sig_alrm;
(void) sigemptyset(&(sa.sa_mask));
sa.sa_flags = 0;
(void) sigaction(SIGALRM, &sa, &(pv_sig_state->signal.old_sigalrm));
} }
@@ -389,6 +414,7 @@ void pv_sig_fini( /*@unused@ */ __attribute__((unused)) pvstate_t state)
#ifdef SA_SIGINFO #ifdef SA_SIGINFO
(void) sigaction(SIGUSR2, &(pv_sig_state->signal.old_sigusr2), NULL); (void) sigaction(SIGUSR2, &(pv_sig_state->signal.old_sigusr2), NULL);
#endif #endif
(void) sigaction(SIGALRM, &(pv_sig_state->signal.old_sigalrm), NULL);
need_to_clear_tostop = pv_sig_state->signal.pv_tty_tostop_added; need_to_clear_tostop = pv_sig_state->signal.pv_tty_tostop_added;
+6 -1
View File
@@ -1,7 +1,7 @@
/* /*
* State management functions. * State management functions.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -234,6 +234,11 @@ void pv_state_bits_set(pvstate_t state, bool bits)
state->control.bits = bits; state->control.bits = bits;
} }
void pv_state_decimal_units_set(pvstate_t state, bool decimal_units)
{
state->control.decimal_units = decimal_units;
}
void pv_state_null_terminated_lines_set(pvstate_t state, bool val) void pv_state_null_terminated_lines_set(pvstate_t state, bool val)
{ {
state->control.null_terminated_lines = val; state->control.null_terminated_lines = val;
+1 -1
View File
@@ -1,7 +1,7 @@
/* /*
* Functions for portably managing strings. * Functions for portably managing strings.
* *
* Copyright 2023 Andrew Wood * Copyright 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
+57 -13
View File
@@ -1,7 +1,7 @@
/* /*
* Functions for transferring data between file descriptors. * Functions for transferring data between file descriptors.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */
@@ -156,8 +156,8 @@ static ssize_t pv__transfer_read_repeated(int fd, void *buf, size_t count)
elapsed_seconds = pv_elapsedtime_seconds(&transfer_elapsed); elapsed_seconds = pv_elapsedtime_seconds(&transfer_elapsed);
if (elapsed_seconds > TRANSFER_READ_TIMEOUT) { if (elapsed_seconds > TRANSFER_READ_TIMEOUT) {
debug("%s %d: %s (%lf %s)", "fd", fd, debug("%s %d: %s (%f %s)", "fd", fd,
"stopping read - timer expired", elapsed_seconds, "sec elapsed"); "stopping read - timer expired", (double) elapsed_seconds, "sec elapsed");
return total_read; return total_read;
} }
@@ -231,8 +231,8 @@ static ssize_t pv__transfer_write_repeated(int fd, void *buf, size_t count, bool
if ((EINTR == errno) || (EAGAIN == errno)) { if ((EINTR == errno) || (EAGAIN == errno)) {
/* /*
* Interrupted by a signal - probably our * Interrupted by a signal - probably our
* alarm() - so just return what we've * alarm or interval timer - so just return
* written so far. * what we've written so far.
*/ */
return total_written; return total_written;
} else { } else {
@@ -259,16 +259,17 @@ static ssize_t pv__transfer_write_repeated(int fd, void *buf, size_t count, bool
elapsed_seconds = pv_elapsedtime_seconds(&transfer_elapsed); elapsed_seconds = pv_elapsedtime_seconds(&transfer_elapsed);
if (elapsed_seconds > TRANSFER_WRITE_TIMEOUT) { if (elapsed_seconds > TRANSFER_WRITE_TIMEOUT) {
debug("%s %d: %s (%lf %s)", "fd", fd, debug("%s %d: %s (%f %s)", "fd", fd,
"stopping write - timer expired", elapsed_seconds, "sec elapsed"); "stopping write - timer expired", (double) elapsed_seconds, "sec elapsed");
return total_written; return total_written;
} }
/* /*
* Running the select() here seems to make PV eat a lot of * Running the select() here seems to make PV eat a lot of
* CPU in some cases, so instead we just go round the loop * CPU in some cases, so instead we just go round the loop
* again and rely on our alarm() to interrupt us if we run * again and rely on our alarm or interval timer to
* out of time - also on our elapsed time check. * interrupt us if we run out of time - also on our elapsed
* time check.
*/ */
if (count > 0) { if (count > 0) {
debug("%s %d: %s (%ld %s, %ld %s)", "fd", fd, debug("%s %d: %s (%ld %s, %ld %s)", "fd", fd,
@@ -643,17 +644,60 @@ static int pv__transfer_write(pvstate_t state, bool *eof_in, bool *eof_out, long
if (state->control.discard_input) { if (state->control.discard_input) {
nwritten = state->transfer.to_write; nwritten = state->transfer.to_write;
} else if (state->transfer.to_write > 0) { } else if (state->transfer.to_write > 0) {
if (signal(SIGALRM, SIG_IGN) == SIG_ERR) {
pv_error(state, "%s: %s", _("failed to set alarm signal handler"), strerror(errno)); /*
} else { * Set an interval timer or an alarm to interrupt the write
(void) alarm(1); * with a signal if the write takes too long, so we can
* continue producing progress information.
*/
#if HAVE_SETITIMER
struct itimerval new_timer;
/*@-unrecog@ */
/* splint doesn't know setitimer or ITIMER_REAL */
memset(&new_timer, 0, sizeof(new_timer));
new_timer.it_value.tv_sec = (time_t) (state->control.interval);
new_timer.it_value.tv_usec = (suseconds_t) (((long) (state->control.interval * 1000000.0)) % 1000000);
/*
* We have to set the interval so that the timer continues
* to repeat while writes are attempted, especially as it's
* possible that the initial timer run will expire
* immediately if the period is less than 1 second.
*/
new_timer.it_interval.tv_sec = new_timer.it_value.tv_sec;
new_timer.it_interval.tv_usec = new_timer.it_value.tv_usec;
debug("%s: [%lds,%ldus]", "setting interval timer", (long) (new_timer.it_value.tv_sec),
(long) (new_timer.it_value.tv_usec));
if (0 != setitimer(ITIMER_REAL, &new_timer, NULL)) {
pv_error(state, "%s: %s", _("failed to set interval timer"), strerror(errno));
} }
#else /* ! HAVE_SETITIMER */
(void) alarm(1);
#endif /* HAVE_SETITIMER */
nwritten = pv__transfer_write_repeated(STDOUT_FILENO, nwritten = pv__transfer_write_repeated(STDOUT_FILENO,
state->transfer.transfer_buffer + state->transfer.transfer_buffer +
state->transfer.write_position, state->transfer.write_position,
(size_t) (state->transfer.to_write), (size_t) (state->transfer.to_write),
state->control.sync_after_write); state->control.sync_after_write);
#if HAVE_SETITIMER
memset(&new_timer, 0, sizeof(new_timer));
new_timer.it_interval.tv_sec = 0;
new_timer.it_interval.tv_usec = 0;
new_timer.it_value.tv_sec = 0;
new_timer.it_value.tv_usec = 0;
if (0 != setitimer(ITIMER_REAL, &new_timer, NULL)) {
pv_error(state, "%s: %s", _("failed to clear interval timer"), strerror(errno));
}
/*@+unrecog@ */
#else /* ! HAVE_SETITIMER */
(void) alarm(0); (void) alarm(0);
#endif /* HAVE_SETITIMER */
} }
if (0 == nwritten) { if (0 == nwritten) {
+1 -1
View File
@@ -1,7 +1,7 @@
/* /*
* Functions for watching file descriptors in other processes. * Functions for watching file descriptors in other processes.
* *
* Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
* *
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'. * License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/ */