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 (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>.
+3 -2
View File
@@ -1,10 +1,10 @@
dnl Process this file with autoconf to produce a configure script.
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 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_AUX_DIR([build-aux])
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([fpathconf sysconf posix_memalign posix_fadvise])
AC_CHECK_FUNCS([nanosleep])
AC_CHECK_FUNCS([setitimer])
AC_CHECK_HEADERS([getopt.h])
AC_CHECK_HEADERS([limits.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))
* 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))
* [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
* 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: 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
+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)
* ([#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
* ([#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,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)
* ([#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)
* ([#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)
* ([#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)
@@ -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))
* ([#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
* ([#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.
+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
pv \- monitor the progress of data through a pipe
.SH SYNOPSIS
@@ -154,6 +154,11 @@ data transferred so far.
Display the total bits instead of the total bytes. The output suffix will
be "b" instead of "B".
.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
Turn on the transfer buffer percentage display. This will show the
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
.I RATE
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
.BI \-B\ BYTES \fR,\ \fB\-\-buffer-size\ BYTES
Use a transfer buffer size of
@@ -654,6 +663,40 @@ Memory allocation failed.
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
Written by Andrew Wood, with patches submitted by various other people.
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 )
.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>.
+34 -5
View File
@@ -34,9 +34,9 @@ the expected size to **pv**:
A more complicated example using numeric output to feed into the
**dialog**(1) program for a full-screen progress display:
> **(tar cf - . \\**\
> ** \| pv -n -s \$(du -sb . \| awk \'{print \$1}\') \\**\
> ** \| gzip -9 \> out.tgz) 2\>&1 \\**\
> **(tar cf - . \\** \
> **\| pv -n -s \$(du -sb . \| awk \'{print \$1}\') \\** \
> **\| gzip -9 \> out.tgz) 2\>&1 \\** \
> **\| dialog \--gauge \'Progress\' 7 70**
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
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**
: 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
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**
@@ -496,6 +504,26 @@ Any other exit status is a bitmask of the following:
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
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 © 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
\<https://www.gnu.org/licenses/gpl-3.0.html\>.
+97 -89
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"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"
"Content-Type: text/plain; charset=UTF-8\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"
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"
msgstr ""
@@ -61,187 +61,191 @@ msgid "show number of bits transferred"
msgstr ""
#: src/main/help.c:311
msgid "show percentage of transfer buffer in use"
msgstr "zeige, wie viel Prozent des Übertragungsbuffers in Benutzung sind"
#: src/main/help.c:313
msgid "NUM"
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr ""
#: src/main/help.c:314
msgid "show NUM bytes last written"
msgstr "NUM zeige die zuletzt geschriebenen NUM Bytes"
msgid "show percentage of transfer buffer in use"
msgstr "zeige, wie viel Prozent des Übertragungsbuffers in Benutzung sind"
#: src/main/help.c:316
msgid "FORMAT"
msgid "NUM"
msgstr ""
#: 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"
msgstr "setze das Ausgabeformat auf FORMAT"
#: src/main/help.c:320
#: src/main/help.c:323
msgid "output percentages, not visual information"
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"
msgstr "sämtliche Transferinformationen unterdrücken"
#: src/main/help.c:327
#: src/main/help.c:330
msgid "display nothing until first byte transferred"
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"
msgstr "SEC nichts anzeigen, bis SEC Sekunden vergangen sind"
#: src/main/help.c:332
#: src/main/help.c:335
msgid "SIZE"
msgstr ""
#: src/main/help.c:333
#: src/main/help.c:336
msgid "set estimated data size to SIZE bytes"
msgstr "setze erwartete Datenlänge auf SIZE Byte"
#: src/main/help.c:336
#: src/main/help.c:339
msgid "count lines instead of bytes"
msgstr "zähle Zeilen anstelle von Bytes"
#: src/main/help.c:339
#: src/main/help.c:342
msgid "lines are null-terminated"
msgstr "Zeilen sind nullterminiert"
#: src/main/help.c:342
#: src/main/help.c:345
msgid "update every SEC seconds"
msgstr "aktualisiere Ausgabe nach SEC Sekunden Intervall"
#: src/main/help.c:344
#: src/main/help.c:347
msgid "WIDTH"
msgstr ""
#: src/main/help.c:345
#: src/main/help.c:348
msgid "assume terminal is WIDTH characters wide"
msgstr "setze Terminal-Breite auf WIDTH Zeichen"
#: src/main/help.c:347
#: src/main/help.c:350
msgid "HEIGHT"
msgstr ""
#: src/main/help.c:348
#: src/main/help.c:351
msgid "assume terminal is HEIGHT rows high"
msgstr "setze Terminal-Höhe auf HEIGHT Zeichen"
#: src/main/help.c:350
#: src/main/help.c:353
msgid "NAME"
msgstr ""
#: src/main/help.c:351
#: src/main/help.c:354
msgid "prefix visual information with NAME"
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"
msgstr ""
"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"
msgstr "benutze Escape-Sequenzen zur Cursor-Positionierung"
#: src/main/help.c:360
#: src/main/help.c:363
msgid "RATE"
msgstr ""
#: src/main/help.c:361
#: src/main/help.c:364
msgid "limit transfer to RATE bytes per second"
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"
msgstr ""
#: src/main/help.c:364
#: src/main/help.c:367
msgid "use a buffer size of 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"
msgstr "anstelle von splice() immer read/write benutzen"
#: src/main/help.c:370
#: src/main/help.c:373
msgid "skip read errors in input"
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"
msgstr ""
#: src/main/help.c:376
#: src/main/help.c:379
msgid "stop after --size bytes have been transferred"
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"
msgstr ""
#: src/main/help.c:382
#: src/main/help.c:385
msgid "use direct I/O to bypass cache"
msgstr ""
#: src/main/help.c:385
#: src/main/help.c:388
msgid "discard input instead of writing to output"
msgstr ""
#: src/main/help.c:388
#: src/main/help.c:391
msgid "PID"
msgstr ""
#: src/main/help.c:389
#: src/main/help.c:392
msgid "update settings of process PID"
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"
msgstr ""
#: src/main/help.c:394
#: src/main/help.c:397
msgid "save process ID in FILE"
msgstr "Prozess-ID in FILE speichern"
#: src/main/help.c:397
#: src/main/help.c:400
msgid "PID[:FD]"
msgstr ""
#: src/main/help.c:398
#: src/main/help.c:401
msgid "watch file FD opened by process PID"
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"
msgstr "zeige diese Hilfe und beende"
#: src/main/help.c:405
#: src/main/help.c:408
msgid "show version information and exit"
msgstr "zeige Versionsinformationen und beende"
#: src/main/help.c:409
#: src/main/help.c:412
msgid "write debug logs to FILE"
msgstr ""
#: src/main/help.c:434
#: src/main/help.c:437
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Syntax: %s [OPTION] [DATEI]..."
#: src/main/help.c:445
#: src/main/help.c:448
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr ""
"Verbindet DATEI(en) oder den Standard-Eingabe-Kanal mit dem Standard-Ausgabe-"
"Kanal und misst den Datenstrom."
#: src/main/help.c:582
#: src/main/help.c:585
#, c-format
msgid "Please report any bugs to: %s"
msgstr "Bitte senden Sie Fehlerberichte an %s"
@@ -250,45 +254,45 @@ msgstr "Bitte senden Sie Fehlerberichte an %s"
msgid "state allocation failed"
msgstr "Zustandszuweisung fehlgeschlagen"
#: src/main/options.c:173
#: src/main/options.c:174
msgid "option structure allocation failed"
msgstr "`option' konnte nicht allokiert werden"
#: src/main/options.c:192
#: src/main/options.c:193
msgid "option structure argv allocation failed"
msgstr "`option' (argv) konnte nicht allokiert werden"
#: src/main/options.c:254
#: src/main/options.c:255
msgid "integer argument expected"
msgstr "Ganzzahliges Argument erwartet"
#: src/main/options.c:265
#: src/main/options.c:266
msgid "numeric argument expected"
msgstr "numerisches Argument erwartet"
#: src/main/options.c:276
#: src/main/options.c:277
msgid "process ID or pid:fd pair expected"
msgstr "Prozess-ID oder PID:FD-Paar erwartet"
#: src/main/options.c:283
#: src/main/options.c:284
msgid "invalid process 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"
msgstr "Dateiinformationen konnten nicht gelesen werden"
#: src/main/options.c:487
#: src/main/options.c:491
#, c-format
msgid "Try `%s --help' for more information."
msgstr "`%s --help' zeigt weitere Informationen an."
#: src/main/options.c:489
#: src/main/options.c:493
#, c-format
msgid "Try `%s -h' for more information."
msgstr "`%s -h' zeigt weitere Informationen an."
#: src/main/options.c:520
#: src/main/options.c:524
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
@@ -296,31 +300,31 @@ msgstr ""
"Beim Anzeigen von Dateideskriptoren können keine Optionen für den "
"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"
msgstr ""
"Beim Anzeigen von Dateideskriptoren können keine Zeilenmodus- oder "
"Übertragungsmodifikatoroptionen verwendet werden."
#: src/main/options.c:538
#: src/main/options.c:542
msgid "cannot use remote control when watching file descriptors"
msgstr ""
"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"
msgstr ""
"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"
msgstr "Nicht verfügbar auf Systemen ohne /proc/self/fdinfo"
#: src/main/remote.c:295
#: src/main/remote.c:302
msgid "message not received"
msgstr "Nachricht nicht empfangen"
#: src/main/remote.c:422
#: src/main/remote.c:429
msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO wird auf diesem System nicht unterstützt"
@@ -344,51 +348,51 @@ msgstr ""
msgid "failed to get terminal name"
msgstr "Terminalname konnte nicht gelesen werden"
#: src/pv/cursor.c:130
#: src/pv/cursor.c:132
msgid "failed to open lock file"
msgstr "Sperrdatei konnte nicht geöffnet werden"
#: src/pv/cursor.c:163
#: src/pv/cursor.c:165
msgid "lock attempt failed"
msgstr "Sperrversuch fehlgeschlagen"
#: src/pv/cursor.c:424
#: src/pv/cursor.c:426
msgid "failed to open terminal"
msgstr "Terminal konnte nicht geöffnet werden"
#: src/pv/display.c:192
#: src/pv/display.c:193
msgid "yzafpnum kMGTPEZY"
msgstr ""
#: src/pv/display.c:210
#: src/pv/display.c:211
msgid "yzafpnum KMGTPEZY"
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"
msgstr "Puffer konnte nicht allokiert werden"
#: src/pv/display.c:845
#: src/pv/display.c:856
msgid "b"
msgstr ""
#: src/pv/display.c:848 src/pv/transfer.c:595
#: src/pv/display.c:859 src/pv/transfer.c:596
msgid "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"
msgstr ""
#: src/pv/display.c:895 src/pv/display.c:912
#: src/pv/display.c:905 src/pv/display.c:920
msgid "/s"
msgstr ""
#: src/pv/display.c:895 src/pv/display.c:912
#: src/pv/display.c:905 src/pv/display.c:920
msgid "B/s"
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"
msgstr "ETA"
@@ -432,43 +436,47 @@ msgstr ""
msgid "history structure allocation failed"
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"
msgstr ""
#: src/pv/transfer.c:457
#: src/pv/transfer.c:458
msgid "read failed"
msgstr "read-Aufruf fehlgeschlagen"
#: src/pv/transfer.c:480
#: src/pv/transfer.c:481
msgid "warning: read errors detected"
msgstr "warnung: lesefehler erkannt"
#: src/pv/transfer.c:496
#: src/pv/transfer.c:497
msgid "file is not seekable"
msgstr "datei ist nicht durchsuchbar"
#: src/pv/transfer.c:574
#: src/pv/transfer.c:575
msgid "failed to seek past error"
msgstr "konnte den Fehler nicht überwinden"
#: src/pv/transfer.c:594
#: src/pv/transfer.c:595
msgid "skipped past read error"
msgstr "über den Lesefehler hinaus verschoben"
#: src/pv/transfer.c:634
#: src/pv/transfer.c:635
msgid "no transfer buffer allocated"
msgstr ""
#: src/pv/transfer.c:647
msgid "failed to set alarm signal handler"
#: src/pv/transfer.c:676
msgid "failed to set interval timer"
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"
msgstr "write-Aufruf fehlgeschlagen"
#: src/pv/transfer.c:1007
#: src/pv/transfer.c:1051
msgid "select call failed"
msgstr "select-Aufruf fehlgeschlagen"
+156 -141
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"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"
"Content-Type: text/plain; charset=UTF-8\n"
"Date: 1999-06-01 15:18:29+0100\n"
@@ -22,272 +22,278 @@ msgstr ""
#: src/main/help.c:284
msgid "show progress bar"
msgstr "affiche la barre de progression"
msgstr "afficher la barre de progression"
#: src/main/help.c:287
msgid "show elapsed time"
msgstr "affiche le temps écoulé"
msgstr "afficher le temps écoulé"
#: src/main/help.c:290
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
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
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
msgid "show data transfer average rate counter"
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"
msgstr "SEC"
#: src/main/help.c:302
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr ""
"calculer le taux moyen d'après les SEC dernières secondes (30s par défaut)"
#: src/main/help.c:305
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
msgid "show number of bits transferred"
msgstr ""
msgstr "afficher le nombre de bits transférés"
#: src/main/help.c:311
msgid "show percentage of transfer buffer in use"
msgstr "afficher le pourcentage de tampon de transfert utilisé"
#: src/main/help.c:313
msgid "NUM"
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr ""
#: src/main/help.c:314
msgid "show NUM bytes last written"
msgstr "affiche NUM octets pour la dernière fois écrits"
msgid "show percentage of transfer buffer in use"
msgstr "afficher le pourcentage de tampon de transfert utilisé"
#: src/main/help.c:316
msgid "FORMAT"
msgstr ""
msgid "NUM"
msgstr "NUM"
#: 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"
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
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"
msgstr "n'afficher aucune information de transfert"
#: src/main/help.c:327
#: src/main/help.c:330
msgid "display nothing until first byte transferred"
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"
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"
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
msgid "count lines instead of bytes"
msgstr "compte les lignes au lieu des octets"
msgid "set estimated data size to SIZE bytes"
msgstr "ajuster la taille estimée des données à TAILLE octets"
#: src/main/help.c:339
msgid "lines are null-terminated"
msgstr "les lignes sont terminées par un nul"
msgid "count lines instead of bytes"
msgstr "compter les lignes au lieu des octets"
#: src/main/help.c:342
msgid "update every SEC seconds"
msgstr "mise-à-jour toute les SEC secondes"
msgid "lines are null-terminated"
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"
msgstr "LARGEUR"
#: src/main/help.c:345
#: src/main/help.c:348
msgid "assume terminal is WIDTH characters wide"
msgstr "présumer la largeur du terminal à LARGEUR caractères"
#: src/main/help.c:347
#: src/main/help.c:350
msgid "HEIGHT"
msgstr "HAUTEUR"
#: src/main/help.c:348
#: src/main/help.c:351
msgid "assume terminal is HEIGHT rows high"
msgstr "présumer la hauteur du terminal à HAUTEUR lignes"
#: src/main/help.c:350
#: src/main/help.c:353
msgid "NAME"
msgstr "NOM"
#: src/main/help.c:351
#: src/main/help.c:354
msgid "prefix visual information with NAME"
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
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"
msgstr "utiliser les séquences d'échappements de positionnement de curseur"
#: src/main/help.c:360
#: src/main/help.c:363
msgid "RATE"
msgstr "TAUX"
#: src/main/help.c:361
#: src/main/help.c:364
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"
msgstr "OCTETS"
#: src/main/help.c:364
#: src/main/help.c:367
msgid "use a buffer size of BYTES"
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
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"
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
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"
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
msgid "use direct I/O to bypass cache"
msgstr ""
msgid "flush cache to disk after every write"
msgstr "vider le cache sur le disque après chaque écriture"
#: src/main/help.c:385
msgid "discard input instead of writing to output"
msgstr ""
msgid "use direct I/O to bypass cache"
msgstr "utiliser les E/S directes pour contourner le cache"
#: 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"
msgstr "PID"
#: src/main/help.c:389
#: src/main/help.c:392
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"
msgstr ""
#: src/main/help.c:394
msgid "save process ID in FILE"
msgstr "enregistrer l'ID de processus dans FILE"
msgstr "FICHIER"
#: 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]"
msgstr ""
msgstr "PID[:FD]"
#: src/main/help.c:398
#: src/main/help.c:401
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"
msgstr "afficher cette aide puis quitter"
#: src/main/help.c:405
#: src/main/help.c:408
msgid "show version information and exit"
msgstr "afficher la version puis quitter"
#: src/main/help.c:409
#: src/main/help.c:412
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
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Utilisation : %s [OPTIONS] [FICHIER]..."
#: src/main/help.c:445
#: src/main/help.c:448
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
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."
#: src/main/help.c:582
#: src/main/help.c:585
#, c-format
msgid "Please report any bugs to: %s"
msgstr "SVP rapporter touts bogues à %s"
msgstr "SVP rapporter tous bogues à %s"
#: src/main/main.c:74
msgid "state allocation failed"
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"
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"
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"
msgstr "Valeur entière attendue"
#: src/main/options.c:265
#: src/main/options.c:266
msgid "numeric argument expected"
msgstr "Valeur numérique attendue"
#: src/main/options.c:276
#: src/main/options.c:277
msgid "process ID or pid:fd pair expected"
msgstr "ID de processus ou paire pid:fd attendue"
#: src/main/options.c:283
#: src/main/options.c:284
msgid "invalid process ID"
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"
msgstr "échec à statuer sur le fichier"
#: src/main/options.c:487
#: src/main/options.c:491
#, c-format
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
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 ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
@@ -295,101 +301,103 @@ msgstr ""
"impossible d'utiliser le mode ligne ou les options de modificateur de "
"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"
msgstr ""
"impossible d'utiliser le positionnement du curseur lors de la visualisation "
"des descripteurs de fichier"
#: src/main/options.c:538
#: src/main/options.c:542
msgid "cannot use remote control when watching file descriptors"
msgstr ""
"impossible d'utiliser la télécommande lors de la visualisation des "
"descripteurs de fichiers"
#: src/main/options.c:547
#: src/main/options.c:551
msgid "cannot transfer files when watching file descriptors"
msgstr ""
"impossible de transférer des fichiers lorsque vous regardez des descripteurs "
"de fichiers"
#: src/main/options.c:562
#: src/main/options.c:566
msgid "not available on systems without /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"
msgstr "message non reçu"
#: src/main/remote.c:422
#: src/main/remote.c:429
msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO non pris en charge sur ce système"
#: src/main/version.c:28
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
msgid "This is free software: you are free to change and redistribute it."
msgstr ""
"Ceci est un logiciel libre : vous êtes libre de le modifier et de le "
"redistribuer."
#: src/main/version.c:30
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
msgid "Project web site"
msgstr ""
msgstr "Site web du projet"
#: src/pv/cursor.c:87
msgid "failed to get terminal name"
msgstr "échec de lecture du nom du terminal"
#: src/pv/cursor.c:130
#: src/pv/cursor.c:132
msgid "failed to open lock file"
msgstr "échec de l'ouverture du fichier de verrouillage"
#: src/pv/cursor.c:163
#: src/pv/cursor.c:165
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"
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"
msgstr ""
#: src/pv/display.c:210
#: src/pv/display.c:211
msgid "yzafpnum KMGTPEZY"
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"
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"
msgstr ""
#: src/pv/display.c:848 src/pv/transfer.c:595
#: src/pv/display.c:859 src/pv/transfer.c:596
msgid "B"
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"
msgstr ""
#: src/pv/display.c:895 src/pv/display.c:912
#: src/pv/display.c:905 src/pv/display.c:920
msgid "/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"
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"
msgstr "ETA"
@@ -415,7 +423,7 @@ msgstr "fichiers d'entré et de sortie sont les mêmes"
#: src/pv/file.c:411
msgid "(none)"
msgstr ""
msgstr "(aucun)"
#: src/pv/file.c:413
msgid "(stdin)"
@@ -431,47 +439,51 @@ msgstr ""
#: src/pv/state.c:36
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"
msgstr ""
msgstr "échec de l'allocation de la liste de fichiers"
#: src/pv/transfer.c:457
#: src/pv/transfer.c:458
msgid "read failed"
msgstr "la lecture a échoué"
#: src/pv/transfer.c:480
#: src/pv/transfer.c:481
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"
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"
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"
msgstr "erreur de lecture dépassée"
#: src/pv/transfer.c:634
#: src/pv/transfer.c:635
msgid "no transfer buffer allocated"
msgstr "aucun tampon de transfert alloué"
#: src/pv/transfer.c:676
msgid "failed to set interval timer"
msgstr ""
#: src/pv/transfer.c:647
msgid "failed to set alarm signal handler"
#: src/pv/transfer.c:694
msgid "failed to clear interval timer"
msgstr ""
#: src/pv/transfer.c:774
#: src/pv/transfer.c:818
msgid "write failed"
msgstr "l'écriture a échoué"
#: src/pv/transfer.c:1007
#: src/pv/transfer.c:1051
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: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
msgid "not a regular file or block device"
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 ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
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"
msgstr "WARTOŚĆ"
@@ -56,186 +56,190 @@ msgid "show number of bits transferred"
msgstr ""
#: src/main/help.c:311
msgid "show percentage of transfer buffer in use"
msgstr ""
#: src/main/help.c:313
msgid "NUM"
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr ""
#: src/main/help.c:314
msgid "show NUM bytes last written"
msgid "show percentage of transfer buffer in use"
msgstr ""
#: src/main/help.c:316
msgid "FORMAT"
msgid "NUM"
msgstr ""
#: 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 ""
#: src/main/help.c:320
msgid "set output format to FORMAT"
msgstr ""
#: src/main/help.c:323
msgid "output percentages, not visual information"
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"
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"
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"
msgstr ""
#: src/main/help.c:332
#: src/main/help.c:335
msgid "SIZE"
msgstr "WARTOŚĆ"
#: src/main/help.c:333
#: src/main/help.c:336
msgid "set estimated data size to SIZE bytes"
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"
msgstr ""
#: src/main/help.c:339
#: src/main/help.c:342
msgid "lines are null-terminated"
msgstr ""
#: src/main/help.c:342
#: src/main/help.c:345
msgid "update every SEC seconds"
msgstr "aktualizuj co każde WARTOŚĆ sekund"
#: src/main/help.c:344
#: src/main/help.c:347
msgid "WIDTH"
msgstr "WARTOŚĆ"
#: src/main/help.c:345
#: src/main/help.c:348
msgid "assume terminal is WIDTH characters wide"
msgstr "przyjmij, że terminal ma szerokość WARTOŚĆ znaków"
#: src/main/help.c:347
#: src/main/help.c:350
msgid "HEIGHT"
msgstr ""
#: src/main/help.c:348
#: src/main/help.c:351
msgid "assume terminal is HEIGHT rows high"
msgstr "przyjmij, że terminal ma szerokość WARTOŚĆ znaków"
#: src/main/help.c:350
#: src/main/help.c:353
msgid "NAME"
msgstr "NAZWA"
#: src/main/help.c:351
#: src/main/help.c:354
msgid "prefix visual information with NAME"
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"
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"
msgstr "używaj sekwencji escape do pozycjonowania"
#: src/main/help.c:360
#: src/main/help.c:363
msgid "RATE"
msgstr ""
#: src/main/help.c:361
#: src/main/help.c:364
msgid "limit transfer to RATE bytes per second"
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"
msgstr ""
#: src/main/help.c:364
#: src/main/help.c:367
msgid "use a buffer size of BYTES"
msgstr ""
#: src/main/help.c:367
#: src/main/help.c:370
msgid "never use splice(), always use read/write"
msgstr ""
#: src/main/help.c:370
#: src/main/help.c:373
msgid "skip read errors in input"
msgstr ""
#: src/main/help.c:373
#: src/main/help.c:376
msgid "skip errors in BYTES blocks at a time"
msgstr ""
#: src/main/help.c:376
#: src/main/help.c:379
msgid "stop after --size bytes have been transferred"
msgstr ""
#: src/main/help.c:379
#: src/main/help.c:382
msgid "flush cache to disk after every write"
msgstr ""
#: src/main/help.c:382
#: src/main/help.c:385
msgid "use direct I/O to bypass cache"
msgstr ""
#: src/main/help.c:385
#: src/main/help.c:388
msgid "discard input instead of writing to output"
msgstr ""
#: src/main/help.c:388
#: src/main/help.c:391
msgid "PID"
msgstr ""
#: src/main/help.c:389
#: src/main/help.c:392
msgid "update settings of process PID"
msgstr ""
#: src/main/help.c:393 src/main/help.c:408
#: src/main/help.c:396 src/main/help.c:411
msgid "FILE"
msgstr ""
#: src/main/help.c:394
#: src/main/help.c:397
msgid "save process ID in FILE"
msgstr ""
#: src/main/help.c:397
#: src/main/help.c:400
msgid "PID[:FD]"
msgstr ""
#: src/main/help.c:398
#: src/main/help.c:401
msgid "watch file FD opened by process PID"
msgstr ""
#: src/main/help.c:402
#: src/main/help.c:405
msgid "show this help and exit"
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"
msgstr "wyświetl informacje o wersji i wyjdź"
#: src/main/help.c:409
#: src/main/help.c:412
msgid "write debug logs to FILE"
msgstr ""
#: src/main/help.c:434
#: src/main/help.c:437
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Sposób użycia: %s [OPCJA] [PLIK]..."
#: src/main/help.c:445
#: src/main/help.c:448
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr ""
"Łączenie PLIK(ów) lub wejścia standardowego, do wyjścia standardowego z "
"monitoringiem."
#: src/main/help.c:582
#: src/main/help.c:585
#, c-format
msgid "Please report any bugs to: %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"
msgstr ""
#: src/main/options.c:173
#: src/main/options.c:174
msgid "option structure allocation failed"
msgstr "nie udało się zaalokować struktur opcji"
#: src/main/options.c:192
#: src/main/options.c:193
msgid "option structure argv allocation failed"
msgstr "nie udało się zaalokować struktur opcji argv"
#: src/main/options.c:254
#: src/main/options.c:255
msgid "integer argument expected"
msgstr ""
#: src/main/options.c:265
#: src/main/options.c:266
msgid "numeric argument expected"
msgstr ""
#: src/main/options.c:276
#: src/main/options.c:277
msgid "process ID or pid:fd pair expected"
msgstr ""
#: src/main/options.c:283
#: src/main/options.c:284
msgid "invalid process ID"
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"
msgstr "nie udało się wykonać operacji stat na pliku"
#: src/main/options.c:487
#: src/main/options.c:491
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Spróbuj `%s --help' by uzyskać więcej informacji"
#: src/main/options.c:489
#: src/main/options.c:493
#, c-format
msgid "Try `%s -h' for more information."
msgstr "Spróbuj `%s -h' by uzyskać więcej informacji"
#: src/main/options.c:520
#: src/main/options.c:524
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
msgstr ""
#: src/main/options.c:529
#: src/main/options.c:533
msgid "cannot use cursor positioning when watching file descriptors"
msgstr ""
#: src/main/options.c:538
#: src/main/options.c:542
msgid "cannot use remote control when watching file descriptors"
msgstr ""
#: src/main/options.c:547
#: src/main/options.c:551
msgid "cannot transfer files when watching file descriptors"
msgstr ""
#: src/main/options.c:562
#: src/main/options.c:566
msgid "not available on systems without /proc/self/fdinfo"
msgstr ""
#: src/main/remote.c:295
#: src/main/remote.c:302
msgid "message not received"
msgstr ""
#: src/main/remote.c:422
#: src/main/remote.c:429
msgid "SA_SIGINFO not supported on this system"
msgstr ""
@@ -333,51 +337,51 @@ msgid "failed to get terminal name"
msgstr ""
# "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"
msgstr ""
#: src/pv/cursor.c:163
#: src/pv/cursor.c:165
msgid "lock attempt failed"
msgstr ""
#: src/pv/cursor.c:424
#: src/pv/cursor.c:426
msgid "failed to open terminal"
msgstr "nie udało się otworzyć terminala"
#: src/pv/display.c:192
#: src/pv/display.c:193
msgid "yzafpnum kMGTPEZY"
msgstr ""
#: src/pv/display.c:210
#: src/pv/display.c:211
msgid "yzafpnum KMGTPEZY"
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"
msgstr "nie udało się zaalokować bufora"
#: src/pv/display.c:845
#: src/pv/display.c:856
msgid "b"
msgstr ""
#: src/pv/display.c:848 src/pv/transfer.c:595
#: src/pv/display.c:859 src/pv/transfer.c:596
msgid "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"
msgstr ""
#: src/pv/display.c:895 src/pv/display.c:912
#: src/pv/display.c:905 src/pv/display.c:920
msgid "/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"
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"
msgstr "ETA"
@@ -422,43 +426,48 @@ msgstr ""
msgid "history structure allocation failed"
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"
msgstr ""
#: src/pv/transfer.c:457
#: src/pv/transfer.c:458
msgid "read failed"
msgstr "błąd odczytu"
#: src/pv/transfer.c:480
#: src/pv/transfer.c:481
msgid "warning: read errors detected"
msgstr ""
#: src/pv/transfer.c:496
#: src/pv/transfer.c:497
msgid "file is not seekable"
msgstr ""
#: src/pv/transfer.c:574
#: src/pv/transfer.c:575
msgid "failed to seek past error"
msgstr ""
#: src/pv/transfer.c:594
#: src/pv/transfer.c:595
msgid "skipped past read error"
msgstr ""
#: src/pv/transfer.c:634
#: src/pv/transfer.c:635
msgid "no transfer buffer allocated"
msgstr ""
#: src/pv/transfer.c:647
msgid "failed to set alarm signal handler"
#: src/pv/transfer.c:676
msgid "failed to set interval timer"
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"
msgstr "błąd zapisu"
#: src/pv/transfer.c:1007
#: src/pv/transfer.c:1051
msgid "select call failed"
msgstr "nie udało się wywołać funkcji select"
+97 -89
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
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"
msgstr ""
@@ -56,186 +56,190 @@ msgid "show number of bits transferred"
msgstr ""
#: src/main/help.c:311
msgid "show percentage of transfer buffer in use"
msgstr "exibe a porcentagem de buffer de transferência em uso"
#: src/main/help.c:313
msgid "NUM"
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr ""
#: src/main/help.c:314
msgid "show NUM bytes last written"
msgstr "exibe NUM bytes gravados pela última vez"
msgid "show percentage of transfer buffer in use"
msgstr "exibe a porcentagem de buffer de transferência em uso"
#: src/main/help.c:316
msgid "FORMAT"
msgid "NUM"
msgstr ""
#: 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"
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"
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"
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"
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"
msgstr "não exibir nada até que os segundos SEC tenham passado"
#: src/main/help.c:332
#: src/main/help.c:335
msgid "SIZE"
msgstr ""
#: src/main/help.c:333
#: src/main/help.c:336
msgid "set estimated data size to 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"
msgstr "contar linhas em vez de bytes"
#: src/main/help.c:339
#: src/main/help.c:342
msgid "lines are null-terminated"
msgstr "linhas são terminadas em nulo"
#: src/main/help.c:342
#: src/main/help.c:345
msgid "update every SEC seconds"
msgstr "atualiza informações a cada SEC segundos"
#: src/main/help.c:344
#: src/main/help.c:347
msgid "WIDTH"
msgstr ""
#: src/main/help.c:345
#: src/main/help.c:348
msgid "assume terminal is WIDTH characters wide"
msgstr "presuma que o terminal tem WIDTH caracteres de largura"
#: src/main/help.c:347
#: src/main/help.c:350
msgid "HEIGHT"
msgstr ""
#: src/main/help.c:348
#: src/main/help.c:351
msgid "assume terminal is HEIGHT rows high"
msgstr "presuma que o terminal tem HEIGHT caracteres de altura"
#: src/main/help.c:350
#: src/main/help.c:353
msgid "NAME"
msgstr ""
#: src/main/help.c:351
#: src/main/help.c:354
msgid "prefix visual information with NAME"
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"
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"
msgstr "utiliza caracteres de escape para posicionar o cursor"
#: src/main/help.c:360
#: src/main/help.c:363
msgid "RATE"
msgstr ""
#: src/main/help.c:361
#: src/main/help.c:364
msgid "limit transfer to RATE bytes per second"
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"
msgstr ""
#: src/main/help.c:364
#: src/main/help.c:367
msgid "use a buffer size of 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"
msgstr "nunca use splice(), sempre use read/write"
#: src/main/help.c:370
#: src/main/help.c:373
msgid "skip read errors in input"
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"
msgstr ""
#: src/main/help.c:376
#: src/main/help.c:379
msgid "stop after --size bytes have been transferred"
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"
msgstr ""
#: src/main/help.c:382
#: src/main/help.c:385
msgid "use direct I/O to bypass cache"
msgstr ""
#: src/main/help.c:385
#: src/main/help.c:388
msgid "discard input instead of writing to output"
msgstr ""
#: src/main/help.c:388
#: src/main/help.c:391
msgid "PID"
msgstr ""
#: src/main/help.c:389
#: src/main/help.c:392
msgid "update settings of process 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"
msgstr ""
#: src/main/help.c:394
#: src/main/help.c:397
msgid "save process ID in FILE"
msgstr "salvar ID do processo em FILE"
#: src/main/help.c:397
#: src/main/help.c:400
msgid "PID[:FD]"
msgstr ""
#: src/main/help.c:398
#: src/main/help.c:401
msgid "watch file FD opened by process 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"
msgstr "exibe esta tela de ajuda e termina"
#: src/main/help.c:405
#: src/main/help.c:408
msgid "show version information and exit"
msgstr "exibe a versão e termina"
#: src/main/help.c:409
#: src/main/help.c:412
msgid "write debug logs to FILE"
msgstr ""
#: src/main/help.c:434
#: src/main/help.c:437
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Uso: %s [OPÇÕES] [ARQUIVOS]..."
#: src/main/help.c:445
#: src/main/help.c:448
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr ""
"Concatena ARQUIVO(s) ou a entrada padrão e grava na saída padrão, com "
"monitoramento."
#: src/main/help.c:582
#: src/main/help.c:585
#, c-format
msgid "Please report any bugs to: %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"
msgstr "alocação de memória de status falhou"
#: src/main/options.c:173
#: src/main/options.c:174
msgid "option structure allocation failed"
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"
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"
msgstr "argumento inteiro esperado"
#: src/main/options.c:265
#: src/main/options.c:266
msgid "numeric argument expected"
msgstr "argumento numérico esperado"
#: src/main/options.c:276
#: src/main/options.c:277
msgid "process ID or pid:fd pair expected"
msgstr "ID do processo ou par pid:fd esperado"
#: src/main/options.c:283
#: src/main/options.c:284
msgid "invalid process ID"
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"
msgstr "erro obtendo informações do arquivo"
#: src/main/options.c:487
#: src/main/options.c:491
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Tente `%s --help' para maiores informações."
#: src/main/options.c:489
#: src/main/options.c:493
#, c-format
msgid "Try `%s -h' for more information."
msgstr "Tente `%s -h' para maiores informações."
#: src/main/options.c:520
#: src/main/options.c:524
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
@@ -290,29 +294,29 @@ msgstr ""
"não pode usar o modo de linha ou opções de modificador de transferência ao "
"assistir os descritores de arquivo"
#: src/main/options.c:529
#: src/main/options.c:533
msgid "cannot use cursor positioning when watching file descriptors"
msgstr ""
"não pode usar o posicionamento do cursor ao observar os descritores de "
"arquivo"
#: src/main/options.c:538
#: src/main/options.c:542
msgid "cannot use remote control when watching file descriptors"
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"
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"
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"
msgstr "mensagem não recebida"
#: src/main/remote.c:422
#: src/main/remote.c:429
msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO não suportado neste sistema"
@@ -336,51 +340,51 @@ msgstr ""
msgid "failed to get terminal name"
msgstr "erro ao ler o nome do terminal"
#: src/pv/cursor.c:130
#: src/pv/cursor.c:132
msgid "failed to open lock file"
msgstr "erro ao abrir arquivo de bloqueio"
#: src/pv/cursor.c:163
#: src/pv/cursor.c:165
msgid "lock attempt failed"
msgstr "tentativa de bloqueio falhou"
#: src/pv/cursor.c:424
#: src/pv/cursor.c:426
msgid "failed to open terminal"
msgstr "erro abrindo o terminal"
#: src/pv/display.c:192
#: src/pv/display.c:193
msgid "yzafpnum kMGTPEZY"
msgstr ""
#: src/pv/display.c:210
#: src/pv/display.c:211
msgid "yzafpnum KMGTPEZY"
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"
msgstr "erro alocando o buffer"
#: src/pv/display.c:845
#: src/pv/display.c:856
msgid "b"
msgstr ""
#: src/pv/display.c:848 src/pv/transfer.c:595
#: src/pv/display.c:859 src/pv/transfer.c:596
msgid "B"
msgstr ""
#: src/pv/display.c:890 src/pv/display.c:907
#: src/pv/display.c:900 src/pv/display.c:916
msgid "b/s"
msgstr ""
#: src/pv/display.c:895 src/pv/display.c:912
#: src/pv/display.c:905 src/pv/display.c:920
msgid "/s"
msgstr ""
#: src/pv/display.c:895 src/pv/display.c:912
#: src/pv/display.c:905 src/pv/display.c:920
msgid "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"
msgstr "ETA"
@@ -424,43 +428,47 @@ msgstr ""
msgid "history structure allocation failed"
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"
msgstr ""
#: src/pv/transfer.c:457
#: src/pv/transfer.c:458
msgid "read failed"
msgstr "erro de leitura"
#: src/pv/transfer.c:480
#: src/pv/transfer.c:481
msgid "warning: read errors detected"
msgstr "aviso: erros de leitura detectados"
#: src/pv/transfer.c:496
#: src/pv/transfer.c:497
msgid "file is not seekable"
msgstr "não pode mover dentro do arquivo"
#: src/pv/transfer.c:574
#: src/pv/transfer.c:575
msgid "failed to seek past error"
msgstr "não pode ir além do erro"
#: src/pv/transfer.c:594
#: src/pv/transfer.c:595
msgid "skipped past read error"
msgstr "ignorado erro de leitura"
#: src/pv/transfer.c:634
#: src/pv/transfer.c:635
msgid "no transfer buffer allocated"
msgstr ""
#: src/pv/transfer.c:647
msgid "failed to set alarm signal handler"
#: src/pv/transfer.c:676
msgid "failed to set interval timer"
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"
msgstr "erro de gravação"
#: src/pv/transfer.c:1007
#: src/pv/transfer.c:1051
msgid "select call failed"
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
* 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'.
*/
+3
View File
@@ -100,6 +100,9 @@
/* Define to 1 if you have the `select' function. */
#undef HAVE_SELECT
/* Define to 1 if you have the `setitimer' function. */
#undef HAVE_SETITIMER
/* Define to 1 if you have the `setlocale' function. */
#undef HAVE_SETLOCALE
+2 -1
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
@@ -34,6 +34,7 @@ struct opts_s { /* structure describing run-time options */
bool average_rate; /* average rate counter flag */
bool bytes; /* bytes transferred flag */
bool bits; /* report transfer size in bits */
bool decimal_units; /* decimal prefix flag */
bool bufpercent; /* transfer buffer percentage flag */
size_t lastwritten; /* show N bytes last written */
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.
*
* 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'.
*/
@@ -105,6 +105,7 @@ struct pvstate_s {
bool wait; /* wait for data before display */
bool linemode; /* count lines 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 no_display; /* do nothing other than pipe data */
unsigned int skip_errors; /* skip read errors counter */
@@ -156,6 +157,7 @@ struct pvstate_s {
#ifdef SA_SIGINFO
struct sigaction old_sigusr2;
#endif
struct sigaction old_sigalrm;
} signal;
/*******************
+7 -4
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
@@ -49,15 +49,17 @@ typedef enum {
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
* 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
@@ -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_linemode_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_no_display_set(pvstate_t, bool);
extern void pv_state_skip_errors_set(pvstate_t, unsigned int);
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
+4 -1
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
@@ -307,6 +307,9 @@ void display_help(void)
{ "-8", "--bits", NULL,
N_("show number of bits transferred"),
{ 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,
N_("show percentage of transfer buffer in use"),
{ 0, 0, 0, 0} },
+2 -1
View File
@@ -2,7 +2,7 @@
* Main program entry point - read the command line options, then perform
* 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'.
*/
@@ -278,6 +278,7 @@ int main(int argc, char **argv)
pv_state_delay_start_set(state, opts->delay_start);
pv_state_linemode_set(state, opts->linemode);
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_skip_errors_set(state, opts->skip_errors);
pv_state_error_skip_block_set(state, opts->error_skip_block);
+15 -11
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
@@ -114,6 +114,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
{ "average-rate", 0, NULL, (int) 'a' },
{ "bytes", 0, NULL, (int) 'b' },
{ "bits", 0, NULL, (int) '8' },
{ "si", 0, NULL, (int) 'k' },
{ "buffer-percent", 0, NULL, (int) 'T' },
{ "last-written", 1, NULL, (int) 'A' },
{ "force", 0, NULL, (int) 'f' },
@@ -151,7 +152,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
/*@+nullassign@ */
int option_index = 0;
#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
"!:"
#endif
@@ -335,13 +336,16 @@ opts_t opts_parse(unsigned int argc, char **argv)
opts->bits = true;
numopts++;
break;
case 'k':
opts->decimal_units = true;
break;
case 'T':
opts->bufpercent = true;
numopts++;
opts->no_splice = true;
break;
case 'A':
opts->lastwritten = (size_t) pv_getnum_count(optarg);
opts->lastwritten = (size_t) pv_getnum_count(optarg, opts->decimal_units);
numopts++;
opts->no_splice = true;
break;
@@ -387,7 +391,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
/*@+mustfreefresh@ */
}
} else {
opts->size = pv_getnum_size(optarg);
opts->size = pv_getnum_size(optarg, opts->decimal_units);
}
break;
case 'l':
@@ -401,11 +405,11 @@ opts_t opts_parse(unsigned int argc, char **argv)
opts->interval = pv_getnum_interval(optarg);
break;
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;
break;
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;
break;
case 'N':
@@ -417,10 +421,10 @@ opts_t opts_parse(unsigned int argc, char **argv)
}
break;
case 'L':
opts->rate_limit = pv_getnum_size(optarg);
opts->rate_limit = pv_getnum_size(optarg, opts->decimal_units);
break;
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;
break;
case 'C':
@@ -430,7 +434,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
opts->skip_errors++;
break;
case 'Z':
opts->error_skip_block = pv_getnum_size(optarg);
opts->error_skip_block = pv_getnum_size(optarg, opts->decimal_units);
break;
case 'S':
opts->stop_at_size = true;
@@ -446,7 +450,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
opts->no_splice = true;
break;
case 'R':
opts->remote = pv_getnum_count(optarg);
opts->remote = pv_getnum_count(optarg, false);
break;
case 'P':
opts->pidfile = pv_strdup(optarg);
@@ -473,7 +477,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
opts->watch_fd = parse_fd;
break;
case 'm':
opts->average_rate_window = pv_getnum_count(optarg);
opts->average_rate_window = pv_getnum_count(optarg, opts->decimal_units);
break;
#ifdef ENABLE_DEBUGGING
case '!':
+8 -1
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
@@ -84,6 +84,13 @@ static FILE *pv__control_file(char *filename, size_t bufsize, pid_t control_pid,
home_dir = getenv("HOME"); /* flawfinder: ignore */
if (NULL == home_dir)
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);
control_fd = open(filename, open_flags, open_mode); /* flawfinder: ignore */
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
+10 -8
View File
@@ -10,7 +10,7 @@
* terminal, so we try to use a lockfile if terminal locking doesn't work,
* 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'.
*/
@@ -95,14 +95,16 @@ static void pv_crs_open_lockfile(pvstate_t state, int fd)
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
* override the temporary directory, but this leads to less
* 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).
* flawfinder rationale: null and zero-size values of $TMPDIR and
* $TMP are rejected, and the destination buffer is bounded.
*/
tmpdir = "/tmp";
memset(state->cursor.lock_file, 0, PV_SIZEOF_CRS_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 */
ypos = (int) pv_getnum_count(cpr + 2);
ypos = (int) pv_getnum_count(cpr + 2, false);
if (0 != tcsetattr(terminalfd, TCSANOW | TCSAFLUSH, &old_tty)) {
debug("%s: %s", "tcsetattr (2) failed", strerror(errno));
+19 -12
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
@@ -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 {
PV_TRANSFERCOUNT_BYTES,
PV_TRANSFERCOUNT_DECBYTES,
PV_TRANSFERCOUNT_LINES
} pv__transfercount_t;
@@ -346,6 +347,9 @@ static void pv__sizestr(char *buffer, size_t bufsize, char *format,
if (count_type == PV_TRANSFERCOUNT_BYTES) {
suffix = suffix_bytes;
divider = 1024.0;
} else if (count_type == PV_TRANSFERCOUNT_DECBYTES) {
suffix = suffix_bytes;
divider = 1000.0;
} else {
suffix = suffix_basic;
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;
struct tm *time_ptr;
char *time_format;
pv__transfercount_t count_type;
if (!state->display.component[component_type].required)
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_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) {
case PV_COMPONENT_STRING:
@@ -842,11 +853,10 @@ static bool pv__format(pvstate_t state, long double elapsed_sec, off_t bytes_sin
/*@-mustfreefresh @ */
if (state->control.bits && !state->control.linemode) {
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 {
pv__sizestr(component_content, component_buf_size, "%s",
(long double) total_bytes, "", _("B"),
state->control.linemode ? PV_TRANSFERCOUNT_LINES : PV_TRANSFERCOUNT_BYTES);
(long double) total_bytes, "", _("B"), count_type);
}
/*@+mustfreefresh @ */
/* 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) {
/* bits per second */
pv__sizestr(component_content, component_buf_size, "[%s]", 8 * rate, "", _("b/s"),
PV_TRANSFERCOUNT_BYTES);
count_type);
} else {
/* bytes or lines per second */
pv__sizestr(component_content, component_buf_size,
"[%s]", rate, _("/s"), _("B/s"),
state->control.linemode ? PV_TRANSFERCOUNT_LINES : PV_TRANSFERCOUNT_BYTES);
"[%s]", rate, _("/s"), _("B/s"), count_type);
}
/*@+mustfreefresh @ *//* splint: see above. */
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) {
/* bits per second */
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 {
/* bytes or lines per second */
pv__sizestr(component_content,
component_buf_size,
"[%s]", average_rate, _("/s"), _("B/s"),
state->control.linemode ? PV_TRANSFERCOUNT_LINES : PV_TRANSFERCOUNT_BYTES);
component_buf_size, "[%s]", average_rate, _("/s"), _("B/s"), count_type);
}
/*@+mustfreefresh @ *//* splint: see above. */
break;
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
+39 -15
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
@@ -27,14 +27,16 @@ static bool pv__isdigit(char c)
* 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
* 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 fractional_part = 0;
unsigned int fractional_divisor = 1;
unsigned int shift = 0;
unsigned int binary_shift = 0;
off_t decimal_multiplier = 0;
if (NULL == str)
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,
* T=TiB=1024GiB).
* T=TiB=1024GiB; replace 1024 with 1000 if decimal_units is true).
*/
if (str[0] != '\0') {
/* Skip any spaces or tabs after the digits. */
@@ -83,19 +85,23 @@ off_t pv_getnum_size(const char *str)
switch (str[0]) {
case 'k':
case 'K':
shift = 10;
binary_shift = 10;
decimal_multiplier = 1000;
break;
case 'm':
case 'M':
shift = 20;
binary_shift = 20;
decimal_multiplier = 1000000;
break;
case 'g':
case 'G':
shift = 30;
binary_shift = 30;
decimal_multiplier = 1000000000;
break;
case 't':
case 'T':
shift = 40;
binary_shift = 40;
decimal_multiplier = 1000000000000;
break;
default:
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
* more than 30 at a time to avoid overflows.
*/
while (shift > 0) {
while (binary_shift > 0) {
unsigned int shiftby;
shiftby = shift;
shiftby = binary_shift;
if (shiftby > 30)
shiftby = 30;
@@ -124,7 +140,15 @@ off_t pv_getnum_size(const char *str)
fractional_part = (off_t) (fractional_part << shiftby);
/*@+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
* 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.
*
* 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'.
*/
@@ -244,6 +244,22 @@ bool pv_sigusr2_received(pvstate_t state, pid_t * pid)
#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.
*/
@@ -360,6 +376,15 @@ void pv_sig_init(pvstate_t state)
* while backgrounded (see the SIGTTOU handler above).
*/
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
(void) sigaction(SIGUSR2, &(pv_sig_state->signal.old_sigusr2), NULL);
#endif
(void) sigaction(SIGALRM, &(pv_sig_state->signal.old_sigalrm), NULL);
need_to_clear_tostop = pv_sig_state->signal.pv_tty_tostop_added;
+6 -1
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
@@ -234,6 +234,11 @@ void pv_state_bits_set(pvstate_t state, bool 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)
{
state->control.null_terminated_lines = val;
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
+57 -13
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/
@@ -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);
if (elapsed_seconds > TRANSFER_READ_TIMEOUT) {
debug("%s %d: %s (%lf %s)", "fd", fd,
"stopping read - timer expired", elapsed_seconds, "sec elapsed");
debug("%s %d: %s (%f %s)", "fd", fd,
"stopping read - timer expired", (double) elapsed_seconds, "sec elapsed");
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)) {
/*
* Interrupted by a signal - probably our
* alarm() - so just return what we've
* written so far.
* alarm or interval timer - so just return
* what we've written so far.
*/
return total_written;
} 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);
if (elapsed_seconds > TRANSFER_WRITE_TIMEOUT) {
debug("%s %d: %s (%lf %s)", "fd", fd,
"stopping write - timer expired", elapsed_seconds, "sec elapsed");
debug("%s %d: %s (%f %s)", "fd", fd,
"stopping write - timer expired", (double) elapsed_seconds, "sec elapsed");
return total_written;
}
/*
* Running the select() here seems to make PV eat a lot of
* CPU in some cases, so instead we just go round the loop
* again and rely on our alarm() to interrupt us if we run
* out of time - also on our elapsed time check.
* again and rely on our alarm or interval timer to
* interrupt us if we run out of time - also on our elapsed
* time check.
*/
if (count > 0) {
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) {
nwritten = state->transfer.to_write;
} 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 {
(void) alarm(1);
/*
* Set an interval timer or an alarm to interrupt the write
* 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,
state->transfer.transfer_buffer +
state->transfer.write_position,
(size_t) (state->transfer.to_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);
#endif /* HAVE_SETITIMER */
}
if (0 == nwritten) {
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* 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'.
*/