50 Commits
Author SHA1 Message Date
Andrew Wood 5f86aed17d Adjust the "configure" instructions. 2024-12-02 18:03:10 +00:00
Andrew Wood 99bd1fc8d5 Version bump and associated updates. 2024-12-02 17:57:34 +00:00
Andrew Wood 70f2f9f1b7 Minor wording update. 2024-12-02 17:46:26 +00:00
Andrew Wood cf9e33a4e4 Rename the installation section to reflect what it is for. 2024-12-02 17:40:14 +00:00
Andrew Wood c07d6f9c49 Reword the compilation instructions. 2024-12-02 17:39:32 +00:00
Andrew Wood 503a559b2a Move "--extra-display" and "--stats" to the "Output modifiers" section, since they are not really display switches that directly affect the terminal progress display. 2024-12-02 17:36:16 +00:00
Andrew Wood 2dac3d1128 Acknowledge the reporting of issue #118. 2024-12-02 17:31:46 +00:00
Andrew Wood d7d87fed76 Restructure and reformat the manual to be more in line with man-pages(7), with some small wording changes; move -8 and -k to the modifiers section rather than display switches; adjust "--help" output to report the options in the same order the manual lists them. 2024-12-02 00:02:18 +00:00
Andrew Wood c08349517b Acknowledge the submitters of issues #3 and #4. 2024-12-01 19:44:57 +00:00
Andrew Wood f3774b5987 Indentation update. 2024-12-01 19:40:33 +00:00
Andrew Wood dccc7345ab New option "--extra-display" (#3, #4). 2024-12-01 19:39:59 +00:00
Andrew Wood 7e51fb8371 Update line numbers. 2024-12-01 16:09:29 +00:00
Andrew Wood 0d7c9ac091 Address splint warnings. 2024-12-01 16:05:17 +00:00
Andrew Wood aee34fce32 Address splint warnings when debugging is turned off. 2024-12-01 15:55:48 +00:00
Andrew Wood c29d306d10 Additional configure.ac cleanups. 2024-12-01 15:42:59 +00:00
Andrew Wood a5edc8071c Note that we now test at compile time whether siginfo_t is usable for --remote (#119). 2024-12-01 15:28:18 +00:00
Andrew Wood 106a673ba8 Test at compile time whether siginfo_t is usable for --remote (#119). 2024-12-01 15:26:59 +00:00
Andrew Wood 99fe01a0d6 Note the test script shellcheck warnings cleanup. 2024-12-01 15:18:28 +00:00
Andrew Wood 94e496c77e Raise an error if variables are not defined. 2024-12-01 14:01:10 +00:00
Andrew Wood 5a9a694050 Acknowledge issue #97 2024-12-01 09:46:54 +00:00
Andrew Wood 68c8046a55 Record the sending PID before setting the flag saying we received a signal. 2024-12-01 01:27:48 +00:00
Andrew Wood c3fae61dda Include the control filename in the error message when a SIGUSR2 is received and the control file cannot be opened. 2024-12-01 01:10:47 +00:00
Andrew Wood b783e5fa63 Memory safety check for --watchfd. 2024-11-30 23:40:09 +00:00
Andrew Wood 869a4e68a4 Memory safety check for --watchfd. 2024-11-30 23:39:32 +00:00
Andrew Wood 2ad827dfb9 Note the watchfd tests. 2024-11-30 23:39:18 +00:00
Andrew Wood fa745f2cfe Test "--watchfd PID". 2024-11-30 22:55:00 +00:00
Andrew Wood e8cc443681 Note the fd leak false positive workaround. 2024-11-30 22:30:35 +00:00
Andrew Wood 97fc6a10a4 Work around issues with valgrind 3.23.0 treating inherited open file descriptors as an error with --track-fds=yes (#97). 2024-11-30 22:26:20 +00:00
Andrew Wood d0218bfe54 Skip this test where "-d" is not available. 2024-11-30 22:25:20 +00:00
Andrew Wood b8b7ff882d Position updates. 2024-11-30 17:46:17 +00:00
Andrew Wood c17b6a8821 Add the new test. 2024-11-30 17:46:01 +00:00
Andrew Wood 2b489bae26 Correction to the file and descriptor handling. 2024-11-30 17:32:42 +00:00
Andrew Wood a9d4bf4a25 Fix bug with "--watchfd" not reporting file positions (#118). 2024-11-30 17:25:12 +00:00
Andrew Wood 0d618efd0d Remove pointless EOF lines from all sources. 2024-11-30 16:40:50 +00:00
Andrew Wood 5b0697b68c Add a test for --watchfd with a single file descriptor. 2024-11-30 16:35:30 +00:00
Andrew Wood 725b5f7932 Line numbers update. 2024-11-03 01:40:34 +00:00
Andrew Wood 2945d4ce08 Update POTFILES.in. 2024-11-03 01:40:14 +00:00
Andrew Wood 14ff1451ce Translation acknowledgements update. 2024-10-22 22:18:36 +01:00
Andrew Wood 27716597d5 Merge pull request 'Translations update from Codeberg Translate' (#117) from translate/pv:weblate-pv-pv into main
Reviewed-on: https://codeberg.org/a-j-wood/pv/pulls/117
2024-10-22 21:17:04 +00:00
0koandCodeberg Translate fd86520e91 Translated using Weblate (Russian)
Currently translated at 91.2% (115 of 126 strings)

Translation: pv/pv
Translate-URL: https://translate.codeberg.org/projects/pv/pv/ru/
2024-10-22 18:07:48 +00:00
Andrew Wood 815ed8e768 Insights update from Weblate. 2024-10-20 16:38:17 +01:00
Andrew Wood 08f61b33f0 Merge pull request 'Translations update from Codeberg Translate' (#116) from translate/pv:weblate-pv-pv into main
Reviewed-on: https://codeberg.org/a-j-wood/pv/pulls/116
2024-10-20 15:37:09 +00:00
0koandCodeberg Translate cb8f37bd2a Translated using Weblate (Russian)
Currently translated at 88.8% (112 of 126 strings)

Translation: pv/pv
Translate-URL: https://translate.codeberg.org/projects/pv/pv/ru/
2024-10-20 14:07:50 +00:00
coralpinkandCodeberg Translate b13277c156 Translated using Weblate (Polish)
Currently translated at 100.0% (126 of 126 strings)

Translation: pv/pv
Translate-URL: https://translate.codeberg.org/projects/pv/pv/pl/
2024-10-20 14:07:50 +00:00
Andrew Wood b4438bbdfb Explain exactly what pv__write_pidfile is intended to do, in its header comment. As per reviewer suggestions, replace the unexplained constant buffer size padding with a static template string and an extra strlen(), and explain why the flawfinder check is being bypassed. 2024-10-20 13:40:37 +01:00
Andrew Wood 5af711465d Formatting typo fix. 2024-10-17 20:43:16 +01:00
Andrew Wood 32cbad389a Acknowledge Russian translations. 2024-10-17 20:42:51 +01:00
Andrew Wood 6022578901 Merge pull request 'Translations update from Codeberg Translate' (#115) from translate/pv:weblate-pv-pv into main
Reviewed-on: https://codeberg.org/a-j-wood/pv/pulls/115
2024-10-17 19:30:39 +00:00
0koandCodeberg Translate 740acf3664 Translated using Weblate (Russian)
Currently translated at 67.4% (85 of 126 strings)

Translation: pv/pv
Translate-URL: https://translate.codeberg.org/projects/pv/pv/ru/
2024-10-17 19:19:35 +00:00
Andrew Wood 46e07b2ec3 Added empty translation file for Russian. 2024-10-17 05:34:26 +01:00
90 changed files with 3285 additions and 2398 deletions
+6 -1
View File
@@ -24,6 +24,7 @@ src/pv/elapsedtime.c \
src/pv/file.c \ src/pv/file.c \
src/pv/loop.c \ src/pv/loop.c \
src/pv/number.c \ src/pv/number.c \
src/pv/proctitle.c \
src/pv/signal.c \ src/pv/signal.c \
src/pv/state.c \ src/pv/state.c \
src/pv/string.c \ src/pv/string.c \
@@ -70,8 +71,10 @@ tests/Integrity_-_Large_file_support.test \
tests/Integrity_-_On_output_pipe_close.test \ tests/Integrity_-_On_output_pipe_close.test \
tests/Integrity_-_When_adjusted_remotely.test \ tests/Integrity_-_When_adjusted_remotely.test \
tests/Memory_safety_-_Basic.test \ tests/Memory_safety_-_Basic.test \
tests/Memory_safety_-_Process_title.test \
tests/Memory_safety_-_Remote_control_receiver.test \ tests/Memory_safety_-_Remote_control_receiver.test \
tests/Memory_safety_-_Remote_control_sender.test \ tests/Memory_safety_-_Remote_control_sender.test \
tests/Memory_safety_-_Watchfd.test \
tests/Modifiers_-_--direct-io.test \ tests/Modifiers_-_--direct-io.test \
tests/Modifiers_-_--force.test \ tests/Modifiers_-_--force.test \
tests/Modifiers_-_--interval.test \ tests/Modifiers_-_--interval.test \
@@ -82,7 +85,9 @@ tests/Modifiers_-_--sync.test \
tests/Terminal_-_Detect_width.test \ tests/Terminal_-_Detect_width.test \
tests/Transfer_-_--rate-limit.test \ tests/Transfer_-_--rate-limit.test \
tests/Transfer_-_--remote.test \ tests/Transfer_-_--remote.test \
tests/Transfer_-_--stop-at-size.test tests/Transfer_-_--stop-at-size.test \
tests/Watchfd_-_Multiple_descriptors.test \
tests/Watchfd_-_Single_descriptor.test
EXTRA_DIST += $(TESTS) tests/run-valgrind.sh tests/test-env.sh EXTRA_DIST += $(TESTS) tests/run-valgrind.sh tests/test-env.sh
+16 -9
View File
@@ -25,18 +25,25 @@ If you don't see your language listed, raise an issue on the issue tracker
(or just email the maintainer) asking for it to be added. (or just email the maintainer) asking for it to be added.
# Compilation # Installation
To compile the package, type "`sh ./configure`", which should generate a See "[docs/INSTALL](./docs/INSTALL)" for more about the _configure_ script.
Makefile for your system. You may then type "`make`" to build everything,
and "`make install`" to install it.
See the file "[docs/INSTALL](./docs/INSTALL)" for more about the _configure_ script. The typical process for a system-wide install is:
If this is not a packaged release, you will need the GNU build system tools sh ./configure --prefix=/usr
(`autoconf`, `aclocal`, `autopoint`, `automake`) and the `gettext` make
development tools. You can then run "`autoreconf -is`" to generate the sudo make install
"`configure`" script.
This requires the build toolchain ("`sudo apt install build-essential`" on
Debian or Ubuntu systems).
If this is not a packaged release, the _configure_ script is not included.
It is generated with the GNU build system tools (_autoconf_, _aclocal_,
_autopoint_, _automake_); _gettext_ is also needed. On Debian or Ubuntu,
run "`sudo apt install automake autopoint gettext`". Once those tools are
in place, call "`autoreconf -is`" to generate the _configure_ script, and
run it as described above.
# Copyright, bug reporting, and acknowledgements # Copyright, bug reporting, and acknowledgements
+42 -2
View File
@@ -4,7 +4,7 @@ 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.9.0], [pv@ivarch.com], [pv], [https://www.ivarch.com/programs/pv.shtml]) AC_INIT([pv], [1.9.7], [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])
@@ -30,6 +30,7 @@ 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_FUNCS([setitimer])
AC_CHECK_FUNCS([setproctitle])
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])
@@ -48,7 +49,7 @@ dnl Libraries that may contain key functions.
AC_SEARCH_LIBS([clock_gettime],[rt]) AC_SEARCH_LIBS([clock_gettime],[rt])
dnl Items we can't do without. dnl Items we can't do without.
AC_CHECK_FUNCS([alarm basename clock_gettime dup2 getcwd memcpy memmove memset select setlocale strchr strerror strrchr strstr], [], [AC_MSG_ERROR([required function is missing])]) AC_CHECK_FUNCS([alarm basename clock_gettime dup2 getcwd memcpy memmove memset mkdir select setlocale strchr strerror strrchr strstr], [], [AC_MSG_ERROR([required function is missing])])
AC_CHECK_HEADERS([fcntl.h sys/file.h sys/time.h unistd.h], [], [AC_MSG_ERROR([required header file is missing])]) AC_CHECK_HEADERS([fcntl.h sys/file.h sys/time.h unistd.h], [], [AC_MSG_ERROR([required header file is missing])])
dnl Make sure all the types we use are defined. dnl Make sure all the types we use are defined.
@@ -60,6 +61,45 @@ AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T AC_TYPE_SSIZE_T
AC_TYPE_UID_T AC_TYPE_UID_T
AC_CHECK_MEMBERS([struct stat.st_rdev])
dnl Check whether a signal handler can see the PID of the sender.
AC_MSG_CHECKING([siginfo_t provides a signal sender's PID])
AC_RUN_IFELSE(
[AC_LANG_PROGRAM([[
#include <string.h>
#include <signal.h>
#include <unistd.h>
static pid_t signalSender = 0;
#ifdef SA_SIGINFO
static void receiveUSR2( __attribute__((unused))
int sig, siginfo_t * info, __attribute__((unused))
void *ucontext)
{
if (NULL != info)
signalSender = info->si_pid;
}
#endif
]], [[
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
#ifdef SA_SIGINFO
sa.sa_sigaction = receiveUSR2;
(void) sigemptyset(&(sa.sa_mask));
sa.sa_flags = SA_SIGINFO;
(void) sigaction(SIGUSR2, &sa, NULL);
raise(SIGUSR2);
#endif
return signalSender == 0 ? 1 : 0;
]])], [
AC_MSG_RESULT([yes])
AC_DEFINE([SIGINFO_PROVIDES_PID], [1], [Signal handlers can determine the sending PID])
], [
AC_MSG_RESULT([no])
])
AH_BOTTOM([#include "config-aux.h"]) AH_BOTTOM([#include "config-aux.h"])
AC_ARG_ENABLE([debugging], AC_ARG_ENABLE([debugging],
+7 -1
View File
@@ -99,6 +99,10 @@ is acknowledged and greatly appreciated:
* Venky.N.Iyer - suggested **--stats** ([#49](https://codeberg.org/a-j-wood/pv/issues/49)) * Venky.N.Iyer - suggested **--stats** ([#49](https://codeberg.org/a-j-wood/pv/issues/49))
* Roland Kletzing - suggested **--rate** with **--numeric** ([#17](https://codeberg.org/a-j-wood/pv/issues/17)) * Roland Kletzing - suggested **--rate** with **--numeric** ([#17](https://codeberg.org/a-j-wood/pv/issues/17))
* [Michael Mior](https://codeberg.org/michaelmior) - suggested **--store-and-forward** ([#100](https://codeberg.org/a-j-wood/pv/issues/100)) * [Michael Mior](https://codeberg.org/michaelmior) - suggested **--store-and-forward** ([#100](https://codeberg.org/a-j-wood/pv/issues/100))
* [dbungert](https://codeberg.org/dbungert) - reported issue with *valgrind* 3.23 misreporting leaking file descriptors ([#97](https://codeberg.org/a-j-wood/pv/issues/97))
* Joachim Haga - suggested showing progress in the window title ([#3](https://codeberg.org/a-j-wood/pv/issues/3))
* [Martin Sarsale](https://github.com/runa) - suggested showing progress in the process title ([#4](https://codeberg.org/a-j-wood/pv/issues/4))
* [2bits](https://github.com/2bits) - reported position sensing fault with **--watchfd** in 1.9.0 ([#118](https://codeberg.org/a-j-wood/pv/issues/118))
Translations provided through [Codeberg Weblate](https://translate.codeberg.org/projects/pv/): Translations provided through [Codeberg Weblate](https://translate.codeberg.org/projects/pv/):
@@ -112,7 +116,9 @@ Translations provided through [Codeberg Weblate](https://translate.codeberg.org/
* [kre](https://translate.codeberg.org/user/kre/) (2) * [kre](https://translate.codeberg.org/user/kre/) (2)
* [fnetX](https://translate.codeberg.org/user/fnetX/) (1) * [fnetX](https://translate.codeberg.org/user/fnetX/) (1)
* **Polish** * **Polish**
* [coralpink](https://translate.codeberg.org/user/coralpink/) (96) * [coralpink](https://translate.codeberg.org/user/coralpink/) (100)
* **Russian**
* [0ko](https://translate.codeberg.org/user/0ko/) (151)
* **Turkish** * **Turkish**
* [omerdduran](https://translate.codeberg.org/user/omerdduran/) (129) * [omerdduran](https://translate.codeberg.org/user/omerdduran/) (129)
+1
View File
@@ -146,6 +146,7 @@ The package maintainer should run through these steps for a new release:
* <https://cvsweb.openbsd.org/ports/sysutils/pv/> * <https://cvsweb.openbsd.org/ports/sysutils/pv/>
* <https://packages.fedoraproject.org/pkgs/pv/pv/> * <https://packages.fedoraproject.org/pkgs/pv/pv/>
* Run "`make indent; make indent indentclean check`" * Run "`make indent; make indent indentclean check`"
* Check that `po/POTFILES.in` is up to date
* Run "`make -C po update-po`" * Run "`make -C po update-po`"
* Run "`make analyse`" and see whether remaining warnings can be addressed * Run "`make analyse`" and see whether remaining warnings can be addressed
* Version bump and documentation checks: * Version bump and documentation checks:
+11 -1
View File
@@ -1,3 +1,13 @@
### 1.9.7 - 2 December 2024
* *feature:* new **--extra-display** option to update window and process titles ([#3](https://codeberg.org/a-j-wood/pv/issues/3), [#4](https://codeberg.org/a-j-wood/pv/issues/4))
* *fix:* correct failure to report file positions in **--watchfd** ([#118](https://codeberg.org/a-j-wood/pv/issues/118))
* *i18n:* Russian translations added
* *cleanup:* tests added for **--watchfd** ([#10](https://codeberg.org/a-j-wood/pv/issues/10))
* *cleanup:* worked around file descriptor leak false positives in valgrind 3.23 ([#97](https://codeberg.org/a-j-wood/pv/issues/97))
* *cleanup:* cleared all *shellcheck* warnings in the test scripts
* *cleanup:* check at compile-time whether **--remote** is going to be usable ([#119](https://codeberg.org/a-j-wood/pv/issues/119))
### 1.9.0 - 15 October 2024 ### 1.9.0 - 15 October 2024
* *feature:* new **--store-and-forward** option to read input to a file first, then write it to the output ([#100](https://codeberg.org/a-j-wood/pv/issues/100)) * *feature:* new **--store-and-forward** option to read input to a file first, then write it to the output ([#100](https://codeberg.org/a-j-wood/pv/issues/100))
@@ -10,7 +20,7 @@
* *i18n:* complete Czech translations added * *i18n:* complete Czech translations added
* *i18n:* updates to French translations * *i18n:* updates to French translations
* *fix:* resume stopped pipelines when running in the background (part of [#56](https://codeberg.org/a-j-wood/pv/issues/56)) * *fix:* resume stopped pipelines when running in the background (part of [#56](https://codeberg.org/a-j-wood/pv/issues/56))
* *fix*: inspect the output pipe buffer to give a more accurate progress indicator of how much the next command has consumed * *fix:* inspect the output pipe buffer to give a more accurate progress indicator of how much the next command has consumed
* *fix:* prefix completion time (**--fineta**) with *FIN* rather than *ETA* ([#43](https://codeberg.org/a-j-wood/pv/issues/43)) * *fix:* prefix completion time (**--fineta**) with *FIN* rather than *ETA* ([#43](https://codeberg.org/a-j-wood/pv/issues/43))
* *fix:* surround average rate (**--average-rate**) with brackets rather than square brackets * *fix:* surround average rate (**--average-rate**) with brackets rather than square brackets
* *fix:* correct a memory leak in **--watchfd PID** * *fix:* correct a memory leak in **--watchfd PID**
-2
View File
@@ -35,5 +35,3 @@ for ((buffer=100; buffer<=1000; buffer+=100)); do
echo -e "${buffer}\t${rate}\t${rdata}\t${wdata}" echo -e "${buffer}\t${rate}\t${rdata}\t${wdata}"
done done
done done
# EOF
+451 -661
View File
File diff suppressed because it is too large Load Diff
+524 -518
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -4,4 +4,5 @@ es
fr fr
pl pl
pt pt
ru
tr tr
+3
View File
@@ -4,11 +4,14 @@ src/main/main.c
src/main/options.c src/main/options.c
src/main/remote.c src/main/remote.c
src/main/version.c src/main/version.c
src/pv/calc.c
src/pv/cursor.c src/pv/cursor.c
src/pv/display.c src/pv/display.c
src/pv/elapsedtime.c
src/pv/file.c src/pv/file.c
src/pv/loop.c src/pv/loop.c
src/pv/number.c src/pv/number.c
src/pv/proctitle.c
src/pv/signal.c src/pv/signal.c
src/pv/state.c src/pv/state.c
src/pv/string.c src/pv/string.c
+121 -113
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: 2024-10-15 22:01+0100\n" "POT-Creation-Date: 2024-12-02 17:56+0000\n"
"PO-Revision-Date: 2024-10-13 20:43+0000\n" "PO-Revision-Date: 2024-10-13 20:43+0000\n"
"Last-Translator: mmatous <mmatous@users.noreply.translate.codeberg.org>\n" "Last-Translator: mmatous <mmatous@users.noreply.translate.codeberg.org>\n"
"Language-Team: Czech <https://translate.codeberg.org/projects/pv/pv/cs/>\n" "Language-Team: Czech <https://translate.codeberg.org/projects/pv/pv/cs/>\n"
@@ -36,294 +36,302 @@ msgstr "ukaž okamžitou rychlost přenosu dat"
msgid "show data transfer average rate counter" msgid "show data transfer average rate counter"
msgstr "ukaž průměrnou rychlost přenosu dat" msgstr "ukaž průměrnou rychlost přenosu dat"
#: src/main/help.c:301 src/main/help.c:335 src/main/help.c:350
msgid "SEC"
msgstr "SEK"
#: src/main/help.c:302 #: src/main/help.c:302
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr "počítej průměrnou rychlost za posledních SEK sekund (výchozí: 30)"
#: src/main/help.c:305
msgid "show number of bytes transferred" msgid "show number of bytes transferred"
msgstr "ukaž počet přenesených bajtů" msgstr "ukaž počet přenesených bajtů"
#: src/main/help.c:308 #: src/main/help.c:305
msgid "show number of bits transferred"
msgstr "ukaž počet přenesených bitů"
#: src/main/help.c:311
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "zacházej se suffixy jako s násobky 1000 namísto 1024"
#: src/main/help.c:314
msgid "show percentage of transfer buffer in use" msgid "show percentage of transfer buffer in use"
msgstr "ukaž procento využité vyrovnávací paměti" msgstr "ukaž procento využité vyrovnávací paměti"
#: src/main/help.c:316 #: src/main/help.c:307
msgid "NUM" msgid "NUM"
msgstr "ČÍS" msgstr "ČÍS"
#: src/main/help.c:317 #: src/main/help.c:308
msgid "show NUM bytes last written" msgid "show NUM bytes last written"
msgstr "zobraz ČÍS posledních zapsaných bajtů" msgstr "zobraz ČÍS posledních zapsaných bajtů"
#: src/main/help.c:319 #: src/main/help.c:310
msgid "FORMAT" msgid "FORMAT"
msgstr "FORMÁT" msgstr "FORMÁT"
#: src/main/help.c:320 #: src/main/help.c:311
msgid "set output format to FORMAT" msgid "set output format to FORMAT"
msgstr "nastav formát výstupu na FORMÁT" msgstr "nastav formát výstupu na FORMÁT"
#: src/main/help.c:323 #: src/main/help.c:314
msgid "output transfer statistics at the end"
msgstr "po dokončení vypiš údaje o přenosu"
#: src/main/help.c:326
msgid "output percentages, not visual information" msgid "output percentages, not visual information"
msgstr "vypisuj procenta, ne vizuální informace" msgstr "vypisuj procenta, ne vizuální informace"
#: src/main/help.c:329 #: src/main/help.c:317
msgid "do not output any transfer information at all" msgid "do not output any transfer information at all"
msgstr "nevypisuj žádné informace o přenosu" msgstr "nevypisuj žádné informace o přenosu"
#: src/main/help.c:333 #: src/main/help.c:321
msgid "show number of bits transferred"
msgstr "ukaž počet přenesených bitů"
#: src/main/help.c:324
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "zacházej se suffixy jako s násobky 1000 namísto 1024"
#: src/main/help.c:327
msgid "display nothing until first byte transferred" msgid "display nothing until first byte transferred"
msgstr "nic nevypisuj, dokud není přenesen první byte" msgstr "nic nevypisuj, dokud není přenesen první byte"
#: src/main/help.c:336 #: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
msgid "SEC"
msgstr "SEK"
#: src/main/help.c:330
msgid "display nothing until SEC seconds have passed" msgid "display nothing until SEC seconds have passed"
msgstr "nic nevypisuj, dokud neuplyne SEK sekund" msgstr "nic nevypisuj, dokud neuplyne SEK sekund"
#: src/main/help.c:338 #: src/main/help.c:332
msgid "SIZE" msgid "SIZE"
msgstr "VEL" msgstr "VEL"
#: src/main/help.c:339 #: src/main/help.c:333
msgid "set estimated data size to SIZE bytes" msgid "set estimated data size to SIZE bytes"
msgstr "nastav očekávanou velikost dat na VEL bajtů" msgstr "nastav očekávanou velikost dat na VEL bajtů"
#: src/main/help.c:342 #: src/main/help.c:336
msgid "if size unknown, show rate vs max rate" msgid "if size unknown, show rate vs max rate"
msgstr "pokud je velikost neznámá, ukaž rychlost vs maximální rychlost" msgstr "pokud je velikost neznámá, ukaž rychlost vs maximální rychlost"
#: src/main/help.c:345 #: src/main/help.c:339
msgid "count lines instead of bytes" msgid "count lines instead of bytes"
msgstr "počítej řádky místo bajtů" msgstr "počítej řádky místo bajtů"
#: src/main/help.c:348 #: src/main/help.c:342
msgid "lines are null-terminated" msgid "lines are null-terminated"
msgstr "řádky jsou zakončené nulovým znakem" msgstr "řádky jsou zakončené nulovým znakem"
#: src/main/help.c:351 #: src/main/help.c:345
msgid "update every SEC seconds" msgid "update every SEC seconds"
msgstr "aktualizuj každých SEK sekund" msgstr "aktualizuj každých SEK sekund"
#: src/main/help.c:353 #: src/main/help.c:348
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr "počítej průměrnou rychlost za posledních SEK sekund (výchozí: 30)"
#: src/main/help.c:350
msgid "WIDTH" msgid "WIDTH"
msgstr "ŠÍŘ" msgstr "ŠÍŘ"
#: src/main/help.c:354 #: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide" msgid "assume terminal is WIDTH characters wide"
msgstr "předpokládej šířku terminálu ŠÍŘ znaků" msgstr "předpokládej šířku terminálu ŠÍŘ znaků"
#: src/main/help.c:356 #: src/main/help.c:353
msgid "HEIGHT" msgid "HEIGHT"
msgstr "VÝŠ" msgstr "VÝŠ"
#: src/main/help.c:357 #: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high" msgid "assume terminal is HEIGHT rows high"
msgstr "předpokládej výšku terminálu VÝŠ znaků" msgstr "předpokládej výšku terminálu VÝŠ znaků"
#: src/main/help.c:359 #: src/main/help.c:356
msgid "NAME" msgid "NAME"
msgstr "JMÉNO" msgstr "JMÉNO"
#: src/main/help.c:360 #: src/main/help.c:357
msgid "prefix visual information with NAME" msgid "prefix visual information with NAME"
msgstr "přidej JMÉNO před vizuální informace" msgstr "přidej JMÉNO před vizuální informace"
#: src/main/help.c:359
msgid "SPEC"
msgstr ""
#: src/main/help.c:360
msgid "also send progress to SPEC"
msgstr ""
#: src/main/help.c:363 #: src/main/help.c:363
msgid "output transfer statistics at the end"
msgstr "po dokončení vypiš údaje o přenosu"
#: src/main/help.c:366
msgid "output even if standard error is not a terminal" msgid "output even if standard error is not a terminal"
msgstr "vypisuj výstup i pokud standardní chybový výstup není terminál" msgstr "vypisuj výstup i pokud standardní chybový výstup není terminál"
#: src/main/help.c:366 #: src/main/help.c:369
msgid "use cursor positioning escape sequences" msgid "use cursor positioning escape sequences"
msgstr "pozicuj kurzor pomocí řídících znaků" msgstr "pozicuj kurzor pomocí řídících znaků"
#: src/main/help.c:369 src/main/help.c:399 src/main/help.c:408 #: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:423 #: src/main/help.c:424
msgid "FILE" msgid "FILE"
msgstr "SOUBOR" msgstr "SOUBOR"
#: src/main/help.c:370 #: src/main/help.c:373
msgid "write output to FILE instead of stdout" msgid "write output to FILE instead of stdout"
msgstr "zapiš výstup do SOUBORu namísto standardního výstupu" msgstr "zapiš výstup do SOUBORu namísto standardního výstupu"
#: src/main/help.c:372 #: src/main/help.c:375
msgid "RATE" msgid "RATE"
msgstr "RYCH" msgstr "RYCH"
#: src/main/help.c:373 #: src/main/help.c:376
msgid "limit transfer to RATE bytes per second" msgid "limit transfer to RATE bytes per second"
msgstr "omez přenosovou rychlost na RYCH bajtů za sekundu" msgstr "omez přenosovou rychlost na RYCH bajtů za sekundu"
#: src/main/help.c:375 src/main/help.c:384 #: src/main/help.c:378 src/main/help.c:387
msgid "BYTES" msgid "BYTES"
msgstr "BAJT" msgstr "BAJT"
#: src/main/help.c:376 #: src/main/help.c:379
msgid "use a buffer size of BYTES" msgid "use a buffer size of BYTES"
msgstr "použij vyrovnávací pamět BAJT bajtů" msgstr "použij vyrovnávací pamět BAJT bajtů"
#: src/main/help.c:379 #: src/main/help.c:382
msgid "never use splice(), always use read/write" msgid "never use splice(), always use read/write"
msgstr "nepoužívej splice(), vždy použij read/write" msgstr "nepoužívej splice(), vždy použij read/write"
#: src/main/help.c:382 #: src/main/help.c:385
msgid "skip read errors in input" msgid "skip read errors in input"
msgstr "ignoruj chyby při čtení vstupu" msgstr "ignoruj chyby při čtení vstupu"
#: src/main/help.c:385 #: src/main/help.c:388
msgid "skip errors in BYTES blocks at a time" msgid "skip errors in BYTES blocks at a time"
msgstr "přeskakuj chyby v blocích BAJTů naráz" msgstr "přeskakuj chyby v blocích BAJTů naráz"
#: src/main/help.c:388 #: src/main/help.c:391
msgid "stop after --size bytes have been transferred" msgid "stop after --size bytes have been transferred"
msgstr "zastav po přenosu --size bajtů" msgstr "zastav po přenosu --size bajtů"
#: src/main/help.c:391 #: src/main/help.c:394
msgid "flush cache to disk after every write" msgid "flush cache to disk after every write"
msgstr "po každém zápisu vyprázdni cache na disk" msgstr "po každém zápisu vyprázdni cache na disk"
#: src/main/help.c:394 #: src/main/help.c:397
msgid "use direct I/O to bypass cache" msgid "use direct I/O to bypass cache"
msgstr "použij přímý V/V k obejítí cache" msgstr "použij přímý V/V k obejítí cache"
#: src/main/help.c:397 #: src/main/help.c:400
msgid "discard input instead of writing to output" msgid "discard input instead of writing to output"
msgstr "zahoď vstup namísto zápisu na výstup" msgstr "zahoď vstup namísto zápisu na výstup"
#: src/main/help.c:400 #: src/main/help.c:403
msgid "write all input to FILE before writing to output" msgid "write all input to FILE before writing to output"
msgstr "zapiš veškerý vstup do SOUBORu před výpisem na výstup" msgstr "zapiš veškerý vstup do SOUBORu před výpisem na výstup"
#: src/main/help.c:403 #: src/main/help.c:405
msgid "PID"
msgstr "PID"
#: src/main/help.c:404
msgid "update settings of process PID"
msgstr "aktualizuj nastavení procesu PID"
#: src/main/help.c:409
msgid "save process ID in FILE"
msgstr "ulož id procesu do SOUBORu"
#: src/main/help.c:412
msgid "PID[:FD]" msgid "PID[:FD]"
msgstr "PID[:DS]" msgstr "PID[:DS]"
#: src/main/help.c:413 #: src/main/help.c:406
msgid "watch file FD opened by process PID" msgid "watch file FD opened by process PID"
msgstr "sleduj soubor DS otevřený procesem PID" msgstr "sleduj soubor DS otevřený procesem PID"
#: src/main/help.c:417 #: src/main/help.c:409
msgid "PID"
msgstr "PID"
#: src/main/help.c:410
msgid "update settings of process PID"
msgstr "aktualizuj nastavení procesu PID"
#: src/main/help.c:415
msgid "save process ID in FILE"
msgstr "ulož id procesu do SOUBORu"
#: src/main/help.c:418
msgid "show this help and exit" msgid "show this help and exit"
msgstr "ukaž pomoc a skonči" msgstr "ukaž pomoc a skonči"
#: src/main/help.c:420 #: src/main/help.c:421
msgid "show version information and exit" msgid "show version information and exit"
msgstr "ukaž informace o verzi a skonči" msgstr "ukaž informace o verzi a skonči"
#: src/main/help.c:424 #: src/main/help.c:425
msgid "write debug logs to FILE" msgid "write debug logs to FILE"
msgstr "zapiš ladící záznamy do SOUBORu" msgstr "zapiš ladící záznamy do SOUBORu"
#: src/main/help.c:449 #: src/main/help.c:450
#, c-format #, c-format
msgid "Usage: %s [OPTION] [FILE]..." msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Použití: %s [VOLBY] [SOUBOR]..." msgstr "Použití: %s [VOLBY] [SOUBOR]..."
#: src/main/help.c:460 #: src/main/help.c:461
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 ""
"Spoj SOUBOR(y) nebo standardní vstup na standardního výstup, s monitoringem." "Spoj SOUBOR(y) nebo standardní vstup na standardního výstup, s monitoringem."
#: src/main/help.c:597 #: src/main/help.c:598
#, c-format #, c-format
msgid "Please report any bugs to: %s" msgid "Please report any bugs to: %s"
msgstr "Prosím, hlašte veškeré chyby na: %s" msgstr "Prosím, hlašte veškeré chyby na: %s"
#: src/main/main.c:214 #: src/main/main.c:230
msgid "(input)" msgid "(input)"
msgstr "(vstup)" msgstr "(vstup)"
#: src/main/main.c:299 #: src/main/main.c:319
msgid "state allocation failed" msgid "state allocation failed"
msgstr "selhala alokace stavu" msgstr "selhala alokace stavu"
#: src/main/options.c:140 src/pv/file.c:324 #: src/main/options.c:144 src/pv/file.c:324
msgid "failed to stat file" msgid "failed to stat file"
msgstr "nebylo možné zjistit informace o souboru" msgstr "nebylo možné zjistit informace o souboru"
#: src/main/options.c:154 #: src/main/options.c:158
msgid "is a directory" msgid "is a directory"
msgstr "je adresář" msgstr "je adresář"
#: src/main/options.c:183 #: src/main/options.c:187
msgid "failed to generate sysfs filename" msgid "failed to generate sysfs filename"
msgstr "selhalo vytváření jména pro soubor v sysfs" msgstr "selhalo vytváření jména pro soubor v sysfs"
#: src/main/options.c:205 #: src/main/options.c:209
msgid "failed to read sysfs size file" msgid "failed to read sysfs size file"
msgstr "selhalo čtení velikosti souboru v sysfs" msgstr "selhalo čtení velikosti souboru v sysfs"
#: src/main/options.c:225 #: src/main/options.c:229
msgid "failed to open block device" msgid "failed to open block device"
msgstr "selhalo otevření blokového zařízení" msgstr "selhalo otevření blokového zařízení"
#: src/main/options.c:235 #: src/main/options.c:239
msgid "failed to determine size of block device" msgid "failed to determine size of block device"
msgstr "selhalo zjištění velikosti blokového zařízení" msgstr "selhalo zjištění velikosti blokového zařízení"
#: src/main/options.c:339 #: src/main/options.c:344
msgid "option structure allocation failed" msgid "option structure allocation failed"
msgstr "selhala alokace struktury pro volby" msgstr "selhala alokace struktury pro volby"
#: src/main/options.c:358 #: src/main/options.c:363
msgid "option structure argv allocation failed" msgid "option structure argv allocation failed"
msgstr "selhala alokace struktury pro argv" msgstr "selhala alokace struktury pro argv"
#: src/main/options.c:420 #: src/main/options.c:425
msgid "integer argument expected" msgid "integer argument expected"
msgstr "očekáván celočíselný argument" msgstr "očekáván celočíselný argument"
#: src/main/options.c:431 #: src/main/options.c:436
msgid "numeric argument expected" msgid "numeric argument expected"
msgstr "očekáván číselný argument" msgstr "očekáván číselný argument"
#: src/main/options.c:442 #: src/main/options.c:447
msgid "process ID or pid:fd pair expected" msgid "process ID or pid:fd pair expected"
msgstr "očekáváno ID procesu nebo dvojice PID:DS" msgstr "očekáváno ID procesu nebo dvojice PID:DS"
#: src/main/options.c:449 #: src/main/options.c:454
msgid "invalid process ID" msgid "invalid process ID"
msgstr "neplatné ID procesu" msgstr "neplatné ID procesu"
#: src/main/options.c:666 #: src/main/options.c:679
#, c-format #, c-format
msgid "Try `%s --help' for more information." msgid "Try `%s --help' for more information."
msgstr "Zkuste `%s --help' pro více informací." msgstr "Zkuste `%s --help' pro více informací."
#: src/main/options.c:668 #: src/main/options.c:681
#, c-format #, c-format
msgid "Try `%s -h' for more information." msgid "Try `%s -h' for more information."
msgstr "Zkuste `%s --h' pro více informací." msgstr "Zkuste `%s --h' pro více informací."
#: src/main/options.c:699 #: src/main/options.c:712
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"
@@ -331,27 +339,27 @@ msgstr ""
"při sledování deskriptorů souborů nelze použít řádkový mód nebo volby pro " "při sledování deskriptorů souborů nelze použít řádkový mód nebo volby pro "
"modifikaci přenosu" "modifikaci přenosu"
#: src/main/options.c:708 #: src/main/options.c:721
msgid "cannot use cursor positioning when watching file descriptors" msgid "cannot use cursor positioning when watching file descriptors"
msgstr "při sledování deskriptorů souborů nelze pozicování kurzoru použít" msgstr "při sledování deskriptorů souborů nelze pozicování kurzoru použít"
#: src/main/options.c:717 #: src/main/options.c:730
msgid "cannot use remote control when watching file descriptors" msgid "cannot use remote control when watching file descriptors"
msgstr "při sledování deskriptorů souborů nelze použít vzdálené ovládání" msgstr "při sledování deskriptorů souborů nelze použít vzdálené ovládání"
#: src/main/options.c:726 #: src/main/options.c:739
msgid "cannot transfer files when watching file descriptors" msgid "cannot transfer files when watching file descriptors"
msgstr "při sledování deskriptorů souborů nelze použít přenos souborů" msgstr "při sledování deskriptorů souborů nelze použít přenos souborů"
#: src/main/options.c:741 #: src/main/options.c:754
msgid "not available on systems without /proc/self/fdinfo" msgid "not available on systems without /proc/self/fdinfo"
msgstr "není dostupné na systémech bez /proc/self/fdinfo" msgstr "není dostupné na systémech bez /proc/self/fdinfo"
#: src/main/remote.c:302 #: src/main/remote.c:304
msgid "message not received" msgid "message not received"
msgstr "zpráva nepřijata" msgstr "zpráva nepřijata"
#: src/main/remote.c:429 #: src/main/remote.c:431
msgid "SA_SIGINFO not supported on this system" msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO není na tomto systému podporováno" msgstr "SA_SIGINFO není na tomto systému podporováno"
@@ -395,37 +403,37 @@ msgstr "yzafpnum kMGTPEZY"
msgid "yzafpnum KMGTPEZY" msgid "yzafpnum KMGTPEZY"
msgstr "yzafpnum KMGTPEZY" msgstr "yzafpnum KMGTPEZY"
#: src/pv/display.c:678 src/pv/transfer.c:1011 #: src/pv/display.c:681 src/pv/transfer.c:1011
msgid "buffer allocation failed" msgid "buffer allocation failed"
msgstr "selhala alokace vyrovnávací paměti" msgstr "selhala alokace vyrovnávací paměti"
#: src/pv/display.c:807 #: src/pv/display.c:810
msgid "b" msgid "b"
msgstr "b" msgstr "b"
#: src/pv/display.c:810 src/pv/transfer.c:602 #: src/pv/display.c:813 src/pv/transfer.c:602
msgid "B" msgid "B"
msgstr "B" msgstr "B"
#: src/pv/display.c:854 src/pv/display.c:869 src/pv/display.c:1088 #: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "b/s" msgid "b/s"
msgstr "b/s" msgstr "b/s"
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
msgid "/s" msgid "/s"
msgstr "/s" msgstr "/s"
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "B/s" msgid "B/s"
msgstr "B/s" msgstr "B/s"
#: src/pv/display.c:901 src/pv/display.c:905 #: src/pv/display.c:904 src/pv/display.c:908
msgid "ETA" msgid "ETA"
msgstr "ETA" msgstr "ETA"
#: src/pv/display.c:971 #: src/pv/display.c:974
msgid "FIN" msgid "FIN"
msgstr "FIN" msgstr "FIN"
@@ -465,11 +473,11 @@ msgstr "rychlost min/avg/max/std"
msgid "rate not measured" msgid "rate not measured"
msgstr "rychlost neměřena" msgstr "rychlost neměřena"
#: src/pv/loop.c:766 src/pv/loop.c:817 src/pv/loop.c:858 src/pv/watchpid.c:99 #: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128 #: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192 #: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
#: src/pv/watchpid.c:202 src/pv/watchpid.c:293 src/pv/watchpid.c:301 #: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
#: src/pv/watchpid.c:377 src/pv/watchpid.c:398 #: src/pv/watchpid.c:384 src/pv/watchpid.c:405
msgid "pid" msgid "pid"
msgstr "pid" msgstr "pid"
@@ -477,7 +485,7 @@ msgstr "pid"
msgid "history structure allocation failed" msgid "history structure allocation failed"
msgstr "selhala alokace struktury historie" msgstr "selhala alokace struktury historie"
#: src/pv/state.c:509 src/pv/state.c:520 #: src/pv/state.c:572 src/pv/state.c:583
msgid "file list allocation failed" msgid "file list allocation failed"
msgstr "selhala alokace seznamu souborů" msgstr "selhala alokace seznamu souborů"
+164 -156
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: 2024-10-15 22:01+0100\n" "POT-Creation-Date: 2024-12-02 17:56+0000\n"
"PO-Revision-Date: 2024-10-13 20:43+0000\n" "PO-Revision-Date: 2024-10-13 20:43+0000\n"
"Last-Translator: fnetX <otto@codeberg.org>\n" "Last-Translator: fnetX <otto@codeberg.org>\n"
"Language-Team: German <https://translate.codeberg.org/projects/pv/pv/de/>\n" "Language-Team: German <https://translate.codeberg.org/projects/pv/pv/de/>\n"
@@ -50,298 +50,306 @@ msgstr "zeige die Datentransferrate an"
msgid "show data transfer average rate counter" msgid "show data transfer average rate counter"
msgstr "zeige die durchschnittliche Übertragungsrate" msgstr "zeige die durchschnittliche Übertragungsrate"
#: src/main/help.c:301 src/main/help.c:335 src/main/help.c:350 #: src/main/help.c:302
msgid "show number of bytes transferred"
msgstr "zeige die Anzahl der übertragenen Bytes"
#: src/main/help.c:305
msgid "show percentage of transfer buffer in use"
msgstr "zeige, wie viel Prozent des Übertragungsbuffers in Benutzung sind"
#: src/main/help.c:307
msgid "NUM"
msgstr "NUM"
#: src/main/help.c:308
msgid "show NUM bytes last written"
msgstr "NUM zeige die zuletzt geschriebenen NUM Bytes"
#: src/main/help.c:310
msgid "FORMAT"
msgstr "FORMAT"
#: src/main/help.c:311
msgid "set output format to FORMAT"
msgstr "setze das Ausgabeformat auf FORMAT"
#: src/main/help.c:314
msgid "output percentages, not visual information"
msgstr "Ausgabe von Prozent-Angaben statt visueller Darstellung"
#: src/main/help.c:317
msgid "do not output any transfer information at all"
msgstr "sämtliche Transferinformationen unterdrücken"
#: src/main/help.c:321
msgid "show number of bits transferred"
msgstr "zeige die Anzahl der übertragenen Bits"
#: src/main/help.c:324
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "behandle Endungen als Vielfache von 1000 statt von 1024"
#: src/main/help.c:327
msgid "display nothing until first byte transferred"
msgstr "keine Ausgabe bevor das erste Byte übertragen wurde"
#: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
msgid "SEC" msgid "SEC"
msgstr "SEK" msgstr "SEK"
#: src/main/help.c:302 #: src/main/help.c:330
msgid "display nothing until SEC seconds have passed"
msgstr "nichts anzeigen ehe SEK Sekunden vergangen sind"
#: src/main/help.c:332
msgid "SIZE"
msgstr "GRÖẞE"
#: src/main/help.c:333
msgid "set estimated data size to SIZE bytes"
msgstr "setze erwartete Datenlänge auf SIZE Byte"
#: src/main/help.c:336
msgid "if size unknown, show rate vs max rate"
msgstr "zeige Rate vs maximale Rate, falls die größe unbekannt ist"
#: src/main/help.c:339
msgid "count lines instead of bytes"
msgstr "zähle Zeilen anstelle von Bytes"
#: src/main/help.c:342
msgid "lines are null-terminated"
msgstr "Zeilen sind nullterminiert"
#: src/main/help.c:345
msgid "update every SEC seconds"
msgstr "aktualisiere Ausgabe nach SEK Sekunden Intervall"
#: src/main/help.c:348
msgid "compute average rate over past SEC seconds (default 30s)" msgid "compute average rate over past SEC seconds (default 30s)"
msgstr "" msgstr ""
"berechne die durchschnittliche Übertragungsrate über die letzten SEK " "berechne die durchschnittliche Übertragungsrate über die letzten SEK "
"Sekunden (Standard 30s)" "Sekunden (Standard 30s)"
#: src/main/help.c:305 #: src/main/help.c:350
msgid "show number of bytes transferred"
msgstr "zeige die Anzahl der übertragenen Bytes"
#: src/main/help.c:308
msgid "show number of bits transferred"
msgstr "zeige die Anzahl der übertragenen Bits"
#: src/main/help.c:311
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "behandle Endungen als Vielfache von 1000 statt von 1024"
#: src/main/help.c:314
msgid "show percentage of transfer buffer in use"
msgstr "zeige, wie viel Prozent des Übertragungsbuffers in Benutzung sind"
#: src/main/help.c:316
msgid "NUM"
msgstr "NUM"
#: 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 "FORMAT"
#: src/main/help.c:320
msgid "set output format to FORMAT"
msgstr "setze das Ausgabeformat auf FORMAT"
#: src/main/help.c:323
msgid "output transfer statistics at the end"
msgstr "Übertragungsstatistiken am Ende ausgeben"
#: src/main/help.c:326
msgid "output percentages, not visual information"
msgstr "Ausgabe von Prozent-Angaben statt visueller Darstellung"
#: src/main/help.c:329
msgid "do not output any transfer information at all"
msgstr "sämtliche Transferinformationen unterdrücken"
#: src/main/help.c:333
msgid "display nothing until first byte transferred"
msgstr "keine Ausgabe bevor das erste Byte übertragen wurde"
#: src/main/help.c:336
msgid "display nothing until SEC seconds have passed"
msgstr "nichts anzeigen ehe SEK Sekunden vergangen sind"
#: src/main/help.c:338
msgid "SIZE"
msgstr "GRÖẞE"
#: src/main/help.c:339
msgid "set estimated data size to SIZE bytes"
msgstr "setze erwartete Datenlänge auf SIZE Byte"
#: src/main/help.c:342
msgid "if size unknown, show rate vs max rate"
msgstr "zeige Rate vs maximale Rate, falls die größe unbekannt ist"
#: src/main/help.c:345
msgid "count lines instead of bytes"
msgstr "zähle Zeilen anstelle von Bytes"
#: src/main/help.c:348
msgid "lines are null-terminated"
msgstr "Zeilen sind nullterminiert"
#: src/main/help.c:351
msgid "update every SEC seconds"
msgstr "aktualisiere Ausgabe nach SEK Sekunden Intervall"
#: src/main/help.c:353
msgid "WIDTH" msgid "WIDTH"
msgstr "BREITE" msgstr "BREITE"
#: src/main/help.c:354 #: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide" msgid "assume terminal is WIDTH characters wide"
msgstr "setze Terminal-Breite auf BREITE Zeichen" msgstr "setze Terminal-Breite auf BREITE Zeichen"
#: src/main/help.c:356 #: src/main/help.c:353
msgid "HEIGHT" msgid "HEIGHT"
msgstr "HÖHE" msgstr "HÖHE"
#: src/main/help.c:357 #: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high" msgid "assume terminal is HEIGHT rows high"
msgstr "setze Terminal-Höhe auf HÖHE Zeichen" msgstr "setze Terminal-Höhe auf HÖHE Zeichen"
#: src/main/help.c:359 #: src/main/help.c:356
msgid "NAME" msgid "NAME"
msgstr "NAME" msgstr "NAME"
#: src/main/help.c:360 #: src/main/help.c:357
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:359
msgid "SPEC"
msgstr ""
#: src/main/help.c:360
msgid "also send progress to SPEC"
msgstr ""
#: src/main/help.c:363 #: src/main/help.c:363
msgid "output transfer statistics at the end"
msgstr "Übertragungsstatistiken am Ende ausgeben"
#: src/main/help.c:366
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:366 #: src/main/help.c:369
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:369 src/main/help.c:399 src/main/help.c:408 #: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:423 #: src/main/help.c:424
msgid "FILE" msgid "FILE"
msgstr "DATEI" msgstr "DATEI"
#: src/main/help.c:370 #: src/main/help.c:373
msgid "write output to FILE instead of stdout" msgid "write output to FILE instead of stdout"
msgstr "schreibe die Ausgabe in DATEI statt in die Standardausgabe" msgstr "schreibe die Ausgabe in DATEI statt in die Standardausgabe"
#: src/main/help.c:372 #: src/main/help.c:375
msgid "RATE" msgid "RATE"
msgstr "RATE" msgstr "RATE"
#: src/main/help.c:373 #: src/main/help.c:376
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:375 src/main/help.c:384 #: src/main/help.c:378 src/main/help.c:387
msgid "BYTES" msgid "BYTES"
msgstr "BYTES" msgstr "BYTES"
#: src/main/help.c:376 #: src/main/help.c:379
msgid "use a buffer size of BYTES" msgid "use a buffer size of BYTES"
msgstr "benutze einen Puffer in der Größe von BYTES" msgstr "benutze einen Puffer in der Größe von BYTES"
#: src/main/help.c:379 #: src/main/help.c:382
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:382 #: src/main/help.c:385
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:385 #: src/main/help.c:388
msgid "skip errors in BYTES blocks at a time" msgid "skip errors in BYTES blocks at a time"
msgstr "bei Fehlern BYTES am Stück überspringen" msgstr "bei Fehlern BYTES am Stück überspringen"
#: src/main/help.c:388 #: src/main/help.c:391
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:391 #: src/main/help.c:394
msgid "flush cache to disk after every write" msgid "flush cache to disk after every write"
msgstr "schreibe den Cache nach jedem Schreibvorgang auf die Festplatte" msgstr "schreibe den Cache nach jedem Schreibvorgang auf die Festplatte"
#: src/main/help.c:394 #: src/main/help.c:397
msgid "use direct I/O to bypass cache" msgid "use direct I/O to bypass cache"
msgstr "verwende direkte E/A, um den Cache zu umgehen" msgstr "verwende direkte E/A, um den Cache zu umgehen"
#: src/main/help.c:397 #: src/main/help.c:400
msgid "discard input instead of writing to output" msgid "discard input instead of writing to output"
msgstr "verwirf die Eingabe anstatt in die Ausgabe zu schreiben" msgstr "verwirf die Eingabe anstatt in die Ausgabe zu schreiben"
#: src/main/help.c:400 #: src/main/help.c:403
msgid "write all input to FILE before writing to output" msgid "write all input to FILE before writing to output"
msgstr "Ausgabe nach FILE schrieben bevor sie ausgegeben wird" msgstr "Ausgabe nach FILE schrieben bevor sie ausgegeben wird"
#: src/main/help.c:403 #: src/main/help.c:405
msgid "PID"
msgstr "PID"
#: src/main/help.c:404
msgid "update settings of process PID"
msgstr "Einstellungen der Prozess-PID updaten"
#: src/main/help.c:409
msgid "save process ID in FILE"
msgstr "Prozess-ID in DATEI speichern"
#: src/main/help.c:412
msgid "PID[:FD]" msgid "PID[:FD]"
msgstr "PID[:FD]" msgstr "PID[:FD]"
#: src/main/help.c:413 #: src/main/help.c:406
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:417 #: src/main/help.c:409
msgid "PID"
msgstr "PID"
#: src/main/help.c:410
msgid "update settings of process PID"
msgstr "Einstellungen der Prozess-PID updaten"
#: src/main/help.c:415
msgid "save process ID in FILE"
msgstr "Prozess-ID in DATEI speichern"
#: src/main/help.c:418
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:420 #: src/main/help.c:421
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:424 #: src/main/help.c:425
msgid "write debug logs to FILE" msgid "write debug logs to FILE"
msgstr "schreibe Debug-Protokolle in DATEI" msgstr "schreibe Debug-Protokolle in DATEI"
#: src/main/help.c:449 #: src/main/help.c:450
#, c-format #, c-format
msgid "Usage: %s [OPTION] [FILE]..." msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Aufruf: %s [OPTION] [DATEI]..." msgstr "Aufruf: %s [OPTION] [DATEI]..."
#: src/main/help.c:460 #: src/main/help.c:461
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:597 #: src/main/help.c:598
#, 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"
#: src/main/main.c:214 #: src/main/main.c:230
msgid "(input)" msgid "(input)"
msgstr "(eingabe)" msgstr "(eingabe)"
#: src/main/main.c:299 #: src/main/main.c:319
msgid "state allocation failed" msgid "state allocation failed"
msgstr "Speicherzuweisung für `state' fehlgeschlagen" msgstr "Speicherzuweisung für `state' fehlgeschlagen"
#: src/main/options.c:140 src/pv/file.c:324 #: src/main/options.c:144 src/pv/file.c:324
msgid "failed to stat file" msgid "failed to stat file"
msgstr "konnte Dateiinformationen nicht lesen" msgstr "konnte Dateiinformationen nicht lesen"
#: src/main/options.c:154 #: src/main/options.c:158
msgid "is a directory" msgid "is a directory"
msgstr "ist ein Verzeichnis" msgstr "ist ein Verzeichnis"
#: src/main/options.c:183 #: src/main/options.c:187
msgid "failed to generate sysfs filename" msgid "failed to generate sysfs filename"
msgstr "konnte Sysfs-Dateinamen nicht erzeugen" msgstr "konnte Sysfs-Dateinamen nicht erzeugen"
#: src/main/options.c:205 #: src/main/options.c:209
msgid "failed to read sysfs size file" msgid "failed to read sysfs size file"
msgstr "konnte Größe der Sysfs-Datei nicht lesen" msgstr "konnte Größe der Sysfs-Datei nicht lesen"
#: src/main/options.c:225 #: src/main/options.c:229
msgid "failed to open block device" msgid "failed to open block device"
msgstr "konnte Blockgerät nicht öffnen" msgstr "konnte Blockgerät nicht öffnen"
#: src/main/options.c:235 #: src/main/options.c:239
msgid "failed to determine size of block device" msgid "failed to determine size of block device"
msgstr "konnte Größe des Blockgeräts nicht ermitteln" msgstr "konnte Größe des Blockgeräts nicht ermitteln"
#: src/main/options.c:339 #: src/main/options.c:344
msgid "option structure allocation failed" msgid "option structure allocation failed"
msgstr "Speicherzuweisung für `option' fehlgeschlagen" msgstr "Speicherzuweisung für `option' fehlgeschlagen"
#: src/main/options.c:358 #: src/main/options.c:363
msgid "option structure argv allocation failed" msgid "option structure argv allocation failed"
msgstr "Speicherzuweisung für `argv' der Option fehlgeschlagen" msgstr "Speicherzuweisung für `argv' der Option fehlgeschlagen"
#: src/main/options.c:420 #: src/main/options.c:425
msgid "integer argument expected" msgid "integer argument expected"
msgstr "Ganzzahliges Argument erwartet" msgstr "Ganzzahliges Argument erwartet"
#: src/main/options.c:431 #: src/main/options.c:436
msgid "numeric argument expected" msgid "numeric argument expected"
msgstr "numerisches Argument erwartet" msgstr "numerisches Argument erwartet"
#: src/main/options.c:442 #: src/main/options.c:447
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:449 #: src/main/options.c:454
msgid "invalid process ID" msgid "invalid process ID"
msgstr "ungültige Prozess-ID" msgstr "ungültige Prozess-ID"
#: src/main/options.c:666 #: src/main/options.c:679
#, 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:668 #: src/main/options.c:681
#, 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:699 #: src/main/options.c:712
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"
@@ -349,32 +357,32 @@ msgstr ""
"Beim Beobachten von Dateideskriptoren können keine Optionen für den " "Beim Beobachten 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:708 #: src/main/options.c:721
msgid "cannot use cursor positioning when watching file descriptors" msgid "cannot use cursor positioning when watching file descriptors"
msgstr "" msgstr ""
"Beim Beobachten von Dateideskriptoren kann Cursor-Positionierung nicht " "Beim Beobachten von Dateideskriptoren kann Cursor-Positionierung nicht "
"verwendet werden" "verwendet werden"
#: src/main/options.c:717 #: src/main/options.c:730
msgid "cannot use remote control when watching file descriptors" msgid "cannot use remote control when watching file descriptors"
msgstr "" msgstr ""
"Beim Beobachten von Dateideskriptoren kann die Fernbedienung nicht verwenden " "Beim Beobachten von Dateideskriptoren kann die Fernbedienung nicht verwenden "
"werden" "werden"
#: src/main/options.c:726 #: src/main/options.c:739
msgid "cannot transfer files when watching file descriptors" msgid "cannot transfer files when watching file descriptors"
msgstr "" msgstr ""
"Beim Beobachten von Dateideskriptoren können Dateien nicht übertragen werden" "Beim Beobachten von Dateideskriptoren können Dateien nicht übertragen werden"
#: src/main/options.c:741 #: src/main/options.c:754
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:302 #: src/main/remote.c:304
msgid "message not received" msgid "message not received"
msgstr "Nachricht nicht empfangen" msgstr "Nachricht nicht empfangen"
#: src/main/remote.c:429 #: src/main/remote.c:431
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"
@@ -418,37 +426,37 @@ msgstr "yzafpnµm kMGTPEZY"
msgid "yzafpnum KMGTPEZY" msgid "yzafpnum KMGTPEZY"
msgstr "yzafpnµm KMGTPEZY" msgstr "yzafpnµm KMGTPEZY"
#: src/pv/display.c:678 src/pv/transfer.c:1011 #: src/pv/display.c:681 src/pv/transfer.c:1011
msgid "buffer allocation failed" msgid "buffer allocation failed"
msgstr "Speicherzuweisung für den Puffer fehlgeschlagen" msgstr "Speicherzuweisung für den Puffer fehlgeschlagen"
#: src/pv/display.c:807 #: src/pv/display.c:810
msgid "b" msgid "b"
msgstr "b" msgstr "b"
#: src/pv/display.c:810 src/pv/transfer.c:602 #: src/pv/display.c:813 src/pv/transfer.c:602
msgid "B" msgid "B"
msgstr "B" msgstr "B"
#: src/pv/display.c:854 src/pv/display.c:869 src/pv/display.c:1088 #: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "b/s" msgid "b/s"
msgstr "b/s" msgstr "b/s"
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
msgid "/s" msgid "/s"
msgstr "/s" msgstr "/s"
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "B/s" msgid "B/s"
msgstr "B/s" msgstr "B/s"
#: src/pv/display.c:901 src/pv/display.c:905 #: src/pv/display.c:904 src/pv/display.c:908
msgid "ETA" msgid "ETA"
msgstr "ETA" msgstr "ETA"
#: src/pv/display.c:971 #: src/pv/display.c:974
msgid "FIN" msgid "FIN"
msgstr "Endzeit" msgstr "Endzeit"
@@ -489,11 +497,11 @@ msgstr "Rate min/mittel/max/mdev"
msgid "rate not measured" msgid "rate not measured"
msgstr "Übertragungsrate nicht gemessen" msgstr "Übertragungsrate nicht gemessen"
#: src/pv/loop.c:766 src/pv/loop.c:817 src/pv/loop.c:858 src/pv/watchpid.c:99 #: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128 #: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192 #: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
#: src/pv/watchpid.c:202 src/pv/watchpid.c:293 src/pv/watchpid.c:301 #: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
#: src/pv/watchpid.c:377 src/pv/watchpid.c:398 #: src/pv/watchpid.c:384 src/pv/watchpid.c:405
msgid "pid" msgid "pid"
msgstr "pid" msgstr "pid"
@@ -501,7 +509,7 @@ msgstr "pid"
msgid "history structure allocation failed" msgid "history structure allocation failed"
msgstr "Speicherzuweisung für `history' fehlgeschlagen" msgstr "Speicherzuweisung für `history' fehlgeschlagen"
#: src/pv/state.c:509 src/pv/state.c:520 #: src/pv/state.c:572 src/pv/state.c:583
msgid "file list allocation failed" msgid "file list allocation failed"
msgstr "Speicherzuweisung für die Dateiliste fehlgeschlagen" msgstr "Speicherzuweisung für die Dateiliste fehlgeschlagen"
+121 -113
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: 2024-10-15 22:01+0100\n" "POT-Creation-Date: 2024-12-02 17:56+0000\n"
"Language: es\n" "Language: es\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -31,319 +31,327 @@ msgstr ""
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:335 src/main/help.c:350
msgid "SEC"
msgstr ""
#: src/main/help.c:302 #: src/main/help.c:302
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr ""
#: src/main/help.c:305
msgid "show number of bytes transferred" msgid "show number of bytes transferred"
msgstr "" msgstr ""
#: src/main/help.c:308 #: src/main/help.c:305
msgid "show number of bits transferred"
msgstr ""
#: src/main/help.c:311
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr ""
#: src/main/help.c:314
msgid "show percentage of transfer buffer in use" msgid "show percentage of transfer buffer in use"
msgstr "" msgstr ""
#: src/main/help.c:316 #: src/main/help.c:307
msgid "NUM" msgid "NUM"
msgstr "" msgstr ""
#: src/main/help.c:317 #: src/main/help.c:308
msgid "show NUM bytes last written" msgid "show NUM bytes last written"
msgstr "" msgstr ""
#: src/main/help.c:319 #: src/main/help.c:310
msgid "FORMAT" msgid "FORMAT"
msgstr "" msgstr ""
#: src/main/help.c:320 #: src/main/help.c:311
msgid "set output format to FORMAT" msgid "set output format to FORMAT"
msgstr "" msgstr ""
#: src/main/help.c:323 #: src/main/help.c:314
msgid "output transfer statistics at the end"
msgstr ""
#: src/main/help.c:326
msgid "output percentages, not visual information" msgid "output percentages, not visual information"
msgstr "" msgstr ""
#: src/main/help.c:329 #: src/main/help.c:317
msgid "do not output any transfer information at all" msgid "do not output any transfer information at all"
msgstr "" msgstr ""
#: src/main/help.c:333 #: src/main/help.c:321
msgid "show number of bits transferred"
msgstr ""
#: src/main/help.c:324
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr ""
#: src/main/help.c:327
msgid "display nothing until first byte transferred" msgid "display nothing until first byte transferred"
msgstr "" msgstr ""
#: src/main/help.c:336 #: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
msgid "SEC"
msgstr ""
#: src/main/help.c:330
msgid "display nothing until SEC seconds have passed" msgid "display nothing until SEC seconds have passed"
msgstr "" msgstr ""
#: src/main/help.c:338 #: src/main/help.c:332
msgid "SIZE" msgid "SIZE"
msgstr "" msgstr ""
#: src/main/help.c:339 #: src/main/help.c:333
msgid "set estimated data size to SIZE bytes" msgid "set estimated data size to SIZE bytes"
msgstr "" msgstr ""
#: src/main/help.c:342 #: src/main/help.c:336
msgid "if size unknown, show rate vs max rate" msgid "if size unknown, show rate vs max rate"
msgstr "" msgstr ""
#: src/main/help.c:345 #: src/main/help.c:339
msgid "count lines instead of bytes" msgid "count lines instead of bytes"
msgstr "" msgstr ""
#: src/main/help.c:348 #: src/main/help.c:342
msgid "lines are null-terminated" msgid "lines are null-terminated"
msgstr "" msgstr ""
#: src/main/help.c:351 #: src/main/help.c:345
msgid "update every SEC seconds" msgid "update every SEC seconds"
msgstr "" msgstr ""
#: src/main/help.c:353 #: src/main/help.c:348
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr ""
#: src/main/help.c:350
msgid "WIDTH" msgid "WIDTH"
msgstr "" msgstr ""
#: src/main/help.c:354 #: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide" msgid "assume terminal is WIDTH characters wide"
msgstr "" msgstr ""
#: src/main/help.c:356 #: src/main/help.c:353
msgid "HEIGHT" msgid "HEIGHT"
msgstr "" msgstr ""
#: src/main/help.c:357 #: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high" msgid "assume terminal is HEIGHT rows high"
msgstr "" msgstr ""
#: src/main/help.c:359 #: src/main/help.c:356
msgid "NAME" msgid "NAME"
msgstr "" msgstr ""
#: src/main/help.c:360 #: src/main/help.c:357
msgid "prefix visual information with NAME" msgid "prefix visual information with NAME"
msgstr "" msgstr ""
#: src/main/help.c:359
msgid "SPEC"
msgstr ""
#: src/main/help.c:360
msgid "also send progress to SPEC"
msgstr ""
#: src/main/help.c:363 #: src/main/help.c:363
msgid "output even if standard error is not a terminal" msgid "output transfer statistics at the end"
msgstr "" msgstr ""
#: src/main/help.c:366 #: src/main/help.c:366
msgid "output even if standard error is not a terminal"
msgstr ""
#: src/main/help.c:369
msgid "use cursor positioning escape sequences" msgid "use cursor positioning escape sequences"
msgstr "" msgstr ""
#: src/main/help.c:369 src/main/help.c:399 src/main/help.c:408 #: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:423 #: src/main/help.c:424
msgid "FILE" msgid "FILE"
msgstr "" msgstr ""
#: src/main/help.c:370 #: src/main/help.c:373
msgid "write output to FILE instead of stdout" msgid "write output to FILE instead of stdout"
msgstr "" msgstr ""
#: src/main/help.c:372 #: src/main/help.c:375
msgid "RATE" msgid "RATE"
msgstr "" msgstr ""
#: src/main/help.c:373 #: src/main/help.c:376
msgid "limit transfer to RATE bytes per second" msgid "limit transfer to RATE bytes per second"
msgstr "" msgstr ""
#: src/main/help.c:375 src/main/help.c:384 #: src/main/help.c:378 src/main/help.c:387
msgid "BYTES" msgid "BYTES"
msgstr "" msgstr ""
#: src/main/help.c:376 #: src/main/help.c:379
msgid "use a buffer size of BYTES" msgid "use a buffer size of BYTES"
msgstr "" msgstr ""
#: src/main/help.c:379 #: src/main/help.c:382
msgid "never use splice(), always use read/write" msgid "never use splice(), always use read/write"
msgstr "" msgstr ""
#: src/main/help.c:382 #: src/main/help.c:385
msgid "skip read errors in input" msgid "skip read errors in input"
msgstr "" msgstr ""
#: src/main/help.c:385 #: src/main/help.c:388
msgid "skip errors in BYTES blocks at a time" msgid "skip errors in BYTES blocks at a time"
msgstr "" msgstr ""
#: src/main/help.c:388 #: src/main/help.c:391
msgid "stop after --size bytes have been transferred" msgid "stop after --size bytes have been transferred"
msgstr "" msgstr ""
#: src/main/help.c:391 #: src/main/help.c:394
msgid "flush cache to disk after every write" msgid "flush cache to disk after every write"
msgstr "" msgstr ""
#: src/main/help.c:394 #: src/main/help.c:397
msgid "use direct I/O to bypass cache" msgid "use direct I/O to bypass cache"
msgstr "" msgstr ""
#: src/main/help.c:397 #: src/main/help.c:400
msgid "discard input instead of writing to output" msgid "discard input instead of writing to output"
msgstr "" msgstr ""
#: src/main/help.c:400 #: src/main/help.c:403
msgid "write all input to FILE before writing to output" msgid "write all input to FILE before writing to output"
msgstr "" msgstr ""
#: src/main/help.c:403 #: src/main/help.c:405
msgid "PID"
msgstr ""
#: src/main/help.c:404
msgid "update settings of process PID"
msgstr ""
#: src/main/help.c:409
msgid "save process ID in FILE"
msgstr ""
#: src/main/help.c:412
msgid "PID[:FD]" msgid "PID[:FD]"
msgstr "" msgstr ""
#: src/main/help.c:413 #: src/main/help.c:406
msgid "watch file FD opened by process PID" msgid "watch file FD opened by process PID"
msgstr "" msgstr ""
#: src/main/help.c:417 #: src/main/help.c:409
msgid "PID"
msgstr ""
#: src/main/help.c:410
msgid "update settings of process PID"
msgstr ""
#: src/main/help.c:415
msgid "save process ID in FILE"
msgstr ""
#: src/main/help.c:418
msgid "show this help and exit" msgid "show this help and exit"
msgstr "" msgstr ""
#: src/main/help.c:420 #: src/main/help.c:421
msgid "show version information and exit" msgid "show version information and exit"
msgstr "" msgstr ""
#: src/main/help.c:424 #: src/main/help.c:425
msgid "write debug logs to FILE" msgid "write debug logs to FILE"
msgstr "" msgstr ""
#: src/main/help.c:449 #: src/main/help.c:450
#, c-format #, c-format
msgid "Usage: %s [OPTION] [FILE]..." msgid "Usage: %s [OPTION] [FILE]..."
msgstr "" msgstr ""
#: src/main/help.c:460 #: src/main/help.c:461
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 ""
#: src/main/help.c:597 #: src/main/help.c:598
#, c-format #, c-format
msgid "Please report any bugs to: %s" msgid "Please report any bugs to: %s"
msgstr "" msgstr ""
#: src/main/main.c:214 #: src/main/main.c:230
msgid "(input)" msgid "(input)"
msgstr "" msgstr ""
#: src/main/main.c:299 #: src/main/main.c:319
msgid "state allocation failed" msgid "state allocation failed"
msgstr "" msgstr ""
#: src/main/options.c:140 src/pv/file.c:324 #: src/main/options.c:144 src/pv/file.c:324
msgid "failed to stat file" msgid "failed to stat file"
msgstr "" msgstr ""
#: src/main/options.c:154 #: src/main/options.c:158
msgid "is a directory" msgid "is a directory"
msgstr "" msgstr ""
#: src/main/options.c:183 #: src/main/options.c:187
msgid "failed to generate sysfs filename" msgid "failed to generate sysfs filename"
msgstr "" msgstr ""
#: src/main/options.c:205 #: src/main/options.c:209
msgid "failed to read sysfs size file" msgid "failed to read sysfs size file"
msgstr "" msgstr ""
#: src/main/options.c:225 #: src/main/options.c:229
msgid "failed to open block device" msgid "failed to open block device"
msgstr "" msgstr ""
#: src/main/options.c:235 #: src/main/options.c:239
msgid "failed to determine size of block device" msgid "failed to determine size of block device"
msgstr "" msgstr ""
#: src/main/options.c:339 #: src/main/options.c:344
msgid "option structure allocation failed" msgid "option structure allocation failed"
msgstr "" msgstr ""
#: src/main/options.c:358 #: src/main/options.c:363
msgid "option structure argv allocation failed" msgid "option structure argv allocation failed"
msgstr "" msgstr ""
#: src/main/options.c:420 #: src/main/options.c:425
msgid "integer argument expected" msgid "integer argument expected"
msgstr "" msgstr ""
#: src/main/options.c:431 #: src/main/options.c:436
msgid "numeric argument expected" msgid "numeric argument expected"
msgstr "" msgstr ""
#: src/main/options.c:442 #: src/main/options.c:447
msgid "process ID or pid:fd pair expected" msgid "process ID or pid:fd pair expected"
msgstr "" msgstr ""
#: src/main/options.c:449 #: src/main/options.c:454
msgid "invalid process ID" msgid "invalid process ID"
msgstr "" msgstr ""
#: src/main/options.c:666 #: src/main/options.c:679
#, c-format #, c-format
msgid "Try `%s --help' for more information." msgid "Try `%s --help' for more information."
msgstr "" msgstr ""
#: src/main/options.c:668 #: src/main/options.c:681
#, c-format #, c-format
msgid "Try `%s -h' for more information." msgid "Try `%s -h' for more information."
msgstr "" msgstr ""
#: src/main/options.c:699 #: src/main/options.c:712
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:708 #: src/main/options.c:721
msgid "cannot use cursor positioning when watching file descriptors" msgid "cannot use cursor positioning when watching file descriptors"
msgstr "" msgstr ""
#: src/main/options.c:717 #: src/main/options.c:730
msgid "cannot use remote control when watching file descriptors" msgid "cannot use remote control when watching file descriptors"
msgstr "" msgstr ""
#: src/main/options.c:726 #: src/main/options.c:739
msgid "cannot transfer files when watching file descriptors" msgid "cannot transfer files when watching file descriptors"
msgstr "" msgstr ""
#: src/main/options.c:741 #: src/main/options.c:754
msgid "not available on systems without /proc/self/fdinfo" msgid "not available on systems without /proc/self/fdinfo"
msgstr "" msgstr ""
#: src/main/remote.c:302 #: src/main/remote.c:304
msgid "message not received" msgid "message not received"
msgstr "" msgstr ""
#: src/main/remote.c:429 #: src/main/remote.c:431
msgid "SA_SIGINFO not supported on this system" msgid "SA_SIGINFO not supported on this system"
msgstr "" msgstr ""
@@ -387,37 +395,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY" msgid "yzafpnum KMGTPEZY"
msgstr "" msgstr ""
#: src/pv/display.c:678 src/pv/transfer.c:1011 #: src/pv/display.c:681 src/pv/transfer.c:1011
msgid "buffer allocation failed" msgid "buffer allocation failed"
msgstr "" msgstr ""
#: src/pv/display.c:807 #: src/pv/display.c:810
msgid "b" msgid "b"
msgstr "" msgstr ""
#: src/pv/display.c:810 src/pv/transfer.c:602 #: src/pv/display.c:813 src/pv/transfer.c:602
msgid "B" msgid "B"
msgstr "" msgstr ""
#: src/pv/display.c:854 src/pv/display.c:869 src/pv/display.c:1088 #: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "b/s" msgid "b/s"
msgstr "" msgstr ""
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
msgid "/s" msgid "/s"
msgstr "" msgstr ""
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "B/s" msgid "B/s"
msgstr "" msgstr ""
#: src/pv/display.c:901 src/pv/display.c:905 #: src/pv/display.c:904 src/pv/display.c:908
msgid "ETA" msgid "ETA"
msgstr "" msgstr ""
#: src/pv/display.c:971 #: src/pv/display.c:974
msgid "FIN" msgid "FIN"
msgstr "" msgstr ""
@@ -457,11 +465,11 @@ msgstr ""
msgid "rate not measured" msgid "rate not measured"
msgstr "" msgstr ""
#: src/pv/loop.c:766 src/pv/loop.c:817 src/pv/loop.c:858 src/pv/watchpid.c:99 #: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128 #: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192 #: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
#: src/pv/watchpid.c:202 src/pv/watchpid.c:293 src/pv/watchpid.c:301 #: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
#: src/pv/watchpid.c:377 src/pv/watchpid.c:398 #: src/pv/watchpid.c:384 src/pv/watchpid.c:405
msgid "pid" msgid "pid"
msgstr "" msgstr ""
@@ -469,7 +477,7 @@ msgstr ""
msgid "history structure allocation failed" msgid "history structure allocation failed"
msgstr "" msgstr ""
#: src/pv/state.c:509 src/pv/state.c:520 #: src/pv/state.c:572 src/pv/state.c:583
msgid "file list allocation failed" msgid "file list allocation failed"
msgstr "" msgstr ""
+122 -114
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: 2024-10-15 22:01+0100\n" "POT-Creation-Date: 2024-12-02 17:56+0000\n"
"PO-Revision-Date: 2024-10-12 11:13+0000\n" "PO-Revision-Date: 2024-10-12 11:13+0000\n"
"Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n" "Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n"
"Language-Team: French <https://translate.codeberg.org/projects/pv/pv/fr/>\n" "Language-Team: French <https://translate.codeberg.org/projects/pv/pv/fr/>\n"
@@ -50,299 +50,307 @@ msgstr "afficher le taux de tranfert des données"
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:335 src/main/help.c:350
msgid "SEC"
msgstr "SEC"
#: src/main/help.c:302 #: 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" msgid "show number of bytes transferred"
msgstr "afficher 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:305
msgid "show number of bits transferred"
msgstr "afficher le nombre de bits transférés"
#: src/main/help.c:311
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "traiter les suffixes comme des multiples de 1000 au lieu de 1024"
#: src/main/help.c:314
msgid "show percentage of transfer buffer in use" msgid "show percentage of transfer buffer in use"
msgstr "afficher le pourcentage de tampon de transfert utilisé" msgstr "afficher le pourcentage de tampon de transfert utilisé"
#: src/main/help.c:316 #: src/main/help.c:307
msgid "NUM" msgid "NUM"
msgstr "NUM" msgstr "NUM"
#: src/main/help.c:317 #: src/main/help.c:308
msgid "show NUM bytes last written" msgid "show NUM bytes last written"
msgstr "afficher les derniers NUM octets écrits" msgstr "afficher les derniers NUM octets écrits"
#: src/main/help.c:319 #: src/main/help.c:310
msgid "FORMAT" msgid "FORMAT"
msgstr "FORMAT" msgstr "FORMAT"
#: src/main/help.c:320 #: src/main/help.c:311
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:323 #: src/main/help.c:314
msgid "output transfer statistics at the end"
msgstr "afficher les statistiques de transfert à la fin"
#: src/main/help.c:326
msgid "output percentages, not visual information" msgid "output percentages, not visual information"
msgstr "imprimer en pourcentage plutôt que des informations visuelles" msgstr "imprimer en pourcentage plutôt que des informations visuelles"
#: src/main/help.c:329 #: src/main/help.c:317
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:333 #: src/main/help.c:321
msgid "show number of bits transferred"
msgstr "afficher le nombre de bits transférés"
#: src/main/help.c:324
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "traiter les suffixes comme des multiples de 1000 au lieu de 1024"
#: src/main/help.c:327
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:336 #: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
msgid "SEC"
msgstr "SEC"
#: src/main/help.c:330
msgid "display nothing until SEC seconds have passed" msgid "display nothing until SEC seconds have passed"
msgstr "ne rien afficher 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:338 #: src/main/help.c:332
msgid "SIZE" msgid "SIZE"
msgstr "TAILLE" msgstr "TAILLE"
#: src/main/help.c:339 #: src/main/help.c:333
msgid "set estimated data size to SIZE bytes" msgid "set estimated data size to SIZE bytes"
msgstr "ajuster la taille estimée des données à TAILLE octets" msgstr "ajuster la taille estimée des données à TAILLE octets"
#: src/main/help.c:342 #: src/main/help.c:336
msgid "if size unknown, show rate vs max rate" msgid "if size unknown, show rate vs max rate"
msgstr "" msgstr ""
"si la taille est inconnue, afficher le taux de transfert par rapport au taux " "si la taille est inconnue, afficher le taux de transfert par rapport au taux "
"de transfert max" "de transfert max"
#: src/main/help.c:345 #: src/main/help.c:339
msgid "count lines instead of bytes" msgid "count lines instead of bytes"
msgstr "compter les lignes au lieu des octets" msgstr "compter les lignes au lieu des octets"
#: src/main/help.c:348 #: src/main/help.c:342
msgid "lines are null-terminated" msgid "lines are null-terminated"
msgstr "les lignes sont terminées par un caractère nul" msgstr "les lignes sont terminées par un caractère nul"
#: src/main/help.c:351 #: src/main/help.c:345
msgid "update every SEC seconds" msgid "update every SEC seconds"
msgstr "mettre à jour toutes les SEC secondes" msgstr "mettre à jour toutes les SEC secondes"
#: src/main/help.c:353 #: src/main/help.c:348
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:350
msgid "WIDTH" msgid "WIDTH"
msgstr "LARGEUR" msgstr "LARGEUR"
#: src/main/help.c:354 #: src/main/help.c:351
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:356 #: src/main/help.c:353
msgid "HEIGHT" msgid "HEIGHT"
msgstr "HAUTEUR" msgstr "HAUTEUR"
#: src/main/help.c:357 #: src/main/help.c:354
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:359 #: src/main/help.c:356
msgid "NAME" msgid "NAME"
msgstr "NOM" msgstr "NOM"
#: src/main/help.c:360 #: src/main/help.c:357
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:359
msgid "SPEC"
msgstr ""
#: src/main/help.c:360
msgid "also send progress to SPEC"
msgstr ""
#: src/main/help.c:363 #: src/main/help.c:363
msgid "output transfer statistics at the end"
msgstr "afficher les statistiques de transfert à la fin"
#: src/main/help.c:366
msgid "output even if standard error is not a terminal" msgid "output even if standard error is not a terminal"
msgstr "" msgstr ""
"imprimer vers la sortie d'erreur standard même si ce n'est pas un terminal" "imprimer vers la sortie d'erreur standard même si ce n'est pas un terminal"
#: src/main/help.c:366 #: src/main/help.c:369
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:369 src/main/help.c:399 src/main/help.c:408 #: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:423 #: src/main/help.c:424
msgid "FILE" msgid "FILE"
msgstr "FICHIER" msgstr "FICHIER"
#: src/main/help.c:370 #: src/main/help.c:373
msgid "write output to FILE instead of stdout" msgid "write output to FILE instead of stdout"
msgstr "écrire la sortie dans FICHIER au lieu de la sortie standard" msgstr "écrire la sortie dans FICHIER au lieu de la sortie standard"
#: src/main/help.c:372 #: src/main/help.c:375
msgid "RATE" msgid "RATE"
msgstr "TAUX" msgstr "TAUX"
#: src/main/help.c:373 #: src/main/help.c:376
msgid "limit transfer to RATE bytes per second" msgid "limit transfer to RATE bytes per second"
msgstr "limite le taux de transfert à TAUX octets par seconde" msgstr "limite le taux de transfert à TAUX octets par seconde"
#: src/main/help.c:375 src/main/help.c:384 #: src/main/help.c:378 src/main/help.c:387
msgid "BYTES" msgid "BYTES"
msgstr "OCTETS" msgstr "OCTETS"
#: src/main/help.c:376 #: src/main/help.c:379
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:379 #: src/main/help.c:382
msgid "never use splice(), always use read/write" msgid "never use splice(), always use read/write"
msgstr "ne jamais utiliser splice(), toujours utiliser read/write" msgstr "ne jamais utiliser splice(), toujours utiliser read/write"
#: src/main/help.c:382 #: src/main/help.c:385
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:385 #: src/main/help.c:388
msgid "skip errors in BYTES blocks at a time" msgid "skip errors in BYTES blocks at a time"
msgstr "ignorer les erreurs dans OCTETS blocs à la fois" msgstr "ignorer les erreurs dans OCTETS blocs à la fois"
#: src/main/help.c:388 #: src/main/help.c:391
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:391 #: src/main/help.c:394
msgid "flush cache to disk after every write" msgid "flush cache to disk after every write"
msgstr "vider le cache sur le disque après chaque écriture" msgstr "vider le cache sur le disque après chaque écriture"
#: src/main/help.c:394 #: src/main/help.c:397
msgid "use direct I/O to bypass cache" msgid "use direct I/O to bypass cache"
msgstr "utiliser les E/S directes pour contourner le cache" msgstr "utiliser les E/S directes pour contourner le cache"
#: src/main/help.c:397 #: src/main/help.c:400
msgid "discard input instead of writing to output" msgid "discard input instead of writing to output"
msgstr "rejeter l'entrée au lieu de l'écrire vers la sortie" msgstr "rejeter l'entrée au lieu de l'écrire vers la sortie"
#: src/main/help.c:400 #: src/main/help.c:403
msgid "write all input to FILE before writing to output" msgid "write all input to FILE before writing to output"
msgstr "écrire toute l'entrée vers FICHIER avant de l'écrire vers la sortie" msgstr "écrire toute l'entrée vers FICHIER avant de l'écrire vers la sortie"
#: src/main/help.c:403 #: src/main/help.c:405
msgid "PID"
msgstr "PID"
#: src/main/help.c:404
msgid "update settings of process PID"
msgstr "mettre à jour la configuration du processus PID"
#: src/main/help.c:409
msgid "save process ID in FILE"
msgstr "enregistrer l'ID de processus dans FICHIER"
#: src/main/help.c:412
msgid "PID[:FD]" msgid "PID[:FD]"
msgstr "PID[:FD]" msgstr "PID[:FD]"
#: src/main/help.c:413 #: src/main/help.c:406
msgid "watch file FD opened by process PID" msgid "watch file FD opened by process PID"
msgstr "surveiller le fichier FD ouvert par le processus PID" msgstr "surveiller le fichier FD ouvert par le processus PID"
#: src/main/help.c:417 #: src/main/help.c:409
msgid "PID"
msgstr "PID"
#: src/main/help.c:410
msgid "update settings of process PID"
msgstr "mettre à jour la configuration du processus PID"
#: src/main/help.c:415
msgid "save process ID in FILE"
msgstr "enregistrer l'ID de processus dans FICHIER"
#: src/main/help.c:418
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:420 #: src/main/help.c:421
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:424 #: src/main/help.c:425
msgid "write debug logs to FILE" msgid "write debug logs to FILE"
msgstr "écrire les journaux de déboggage vers FICHIER" msgstr "écrire les journaux de déboggage vers FICHIER"
#: src/main/help.c:449 #: src/main/help.c:450
#, 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:460 #: src/main/help.c:461
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éner 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:597 #: src/main/help.c:598
#, c-format #, c-format
msgid "Please report any bugs to: %s" msgid "Please report any bugs to: %s"
msgstr "SVP rapporter tous bogues à %s" msgstr "SVP rapporter tous bogues à %s"
#: src/main/main.c:214 #: src/main/main.c:230
msgid "(input)" msgid "(input)"
msgstr "(entrée)" msgstr "(entrée)"
#: src/main/main.c:299 #: src/main/main.c:319
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:140 src/pv/file.c:324 #: src/main/options.c:144 src/pv/file.c:324
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:154 #: src/main/options.c:158
msgid "is a directory" msgid "is a directory"
msgstr "est un répertoire" msgstr "est un répertoire"
#: src/main/options.c:183 #: src/main/options.c:187
msgid "failed to generate sysfs filename" msgid "failed to generate sysfs filename"
msgstr "" msgstr ""
#: src/main/options.c:205 #: src/main/options.c:209
msgid "failed to read sysfs size file" msgid "failed to read sysfs size file"
msgstr "" msgstr ""
#: src/main/options.c:225 #: src/main/options.c:229
msgid "failed to open block device" msgid "failed to open block device"
msgstr "" msgstr ""
#: src/main/options.c:235 #: src/main/options.c:239
msgid "failed to determine size of block device" msgid "failed to determine size of block device"
msgstr "" msgstr ""
#: src/main/options.c:339 #: src/main/options.c:344
msgid "option structure allocation failed" msgid "option structure allocation failed"
msgstr "l'allocation pour la structure d'une option a échoué" msgstr "l'allocation pour la structure d'une option a échoué"
#: src/main/options.c:358 #: src/main/options.c:363
msgid "option structure argv allocation failed" msgid "option structure argv allocation failed"
msgstr "l'allocation pour la structure de l'option argv a échoué" msgstr "l'allocation pour la structure de l'option argv a échoué"
#: src/main/options.c:420 #: src/main/options.c:425
msgid "integer argument expected" msgid "integer argument expected"
msgstr "Valeur entière attendue" msgstr "Valeur entière attendue"
#: src/main/options.c:431 #: src/main/options.c:436
msgid "numeric argument expected" msgid "numeric argument expected"
msgstr "Valeur numérique attendue" msgstr "Valeur numérique attendue"
#: src/main/options.c:442 #: src/main/options.c:447
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:449 #: src/main/options.c:454
msgid "invalid process ID" msgid "invalid process ID"
msgstr "ID de processus non valide" msgstr "ID de processus non valide"
#: src/main/options.c:666 #: src/main/options.c:679
#, 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'informations." msgstr "Essayez `%s --help' pour plus d'informations."
#: src/main/options.c:668 #: src/main/options.c:681
#, 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'informations." msgstr "Essayez `%s -h' pour plus d'informations."
#: src/main/options.c:699 #: src/main/options.c:712
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"
@@ -350,33 +358,33 @@ 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:708 #: src/main/options.c:721
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:717 #: src/main/options.c:730
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:726 #: src/main/options.c:739
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:741 #: src/main/options.c:754
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:302 #: src/main/remote.c:304
msgid "message not received" msgid "message not received"
msgstr "message non reçu" msgstr "message non reçu"
#: src/main/remote.c:429 #: src/main/remote.c:431
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"
@@ -422,37 +430,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY" msgid "yzafpnum KMGTPEZY"
msgstr "" msgstr ""
#: src/pv/display.c:678 src/pv/transfer.c:1011 #: src/pv/display.c:681 src/pv/transfer.c:1011
msgid "buffer allocation failed" msgid "buffer allocation failed"
msgstr "échec de l'allocation de mémoire tampon" msgstr "échec de l'allocation de mémoire tampon"
#: src/pv/display.c:807 #: src/pv/display.c:810
msgid "b" msgid "b"
msgstr "" msgstr ""
#: src/pv/display.c:810 src/pv/transfer.c:602 #: src/pv/display.c:813 src/pv/transfer.c:602
msgid "B" msgid "B"
msgstr "O" msgstr "O"
#: src/pv/display.c:854 src/pv/display.c:869 src/pv/display.c:1088 #: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "b/s" msgid "b/s"
msgstr "" msgstr ""
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
msgid "/s" msgid "/s"
msgstr "/s" msgstr "/s"
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "B/s" msgid "B/s"
msgstr "O/s" msgstr "O/s"
#: src/pv/display.c:901 src/pv/display.c:905 #: src/pv/display.c:904 src/pv/display.c:908
msgid "ETA" msgid "ETA"
msgstr "ETA" msgstr "ETA"
#: src/pv/display.c:971 #: src/pv/display.c:974
msgid "FIN" msgid "FIN"
msgstr "" msgstr ""
@@ -492,11 +500,11 @@ msgstr ""
msgid "rate not measured" msgid "rate not measured"
msgstr "" msgstr ""
#: src/pv/loop.c:766 src/pv/loop.c:817 src/pv/loop.c:858 src/pv/watchpid.c:99 #: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128 #: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192 #: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
#: src/pv/watchpid.c:202 src/pv/watchpid.c:293 src/pv/watchpid.c:301 #: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
#: src/pv/watchpid.c:377 src/pv/watchpid.c:398 #: src/pv/watchpid.c:384 src/pv/watchpid.c:405
msgid "pid" msgid "pid"
msgstr "" msgstr ""
@@ -504,7 +512,7 @@ msgstr ""
msgid "history structure allocation failed" msgid "history structure allocation failed"
msgstr "l'allocation de la structure de l'historique a échoué" msgstr "l'allocation de la structure de l'historique a échoué"
#: src/pv/state.c:509 src/pv/state.c:520 #: src/pv/state.c:572 src/pv/state.c:583
msgid "file list allocation failed" msgid "file list allocation failed"
msgstr "échec de l'allocation de la liste de fichiers" msgstr "échec de l'allocation de la liste de fichiers"
+132 -120
View File
@@ -6,14 +6,17 @@ 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: 2024-10-15 22:01+0100\n" "POT-Creation-Date: 2024-12-02 17:56+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: 2024-10-20 14:07+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: coralpink <coralpink@users.noreply.translate.codeberg.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: Polish <https://translate.codeberg.org/projects/pv/pv/pl/>\n"
"Language: pl\n" "Language: pl\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.7.2\n"
#: src/main/help.c:284 #: src/main/help.c:284
msgid "show progress bar" msgid "show progress bar"
@@ -39,300 +42,309 @@ msgstr "pokaż licznik prędkości przesyłania"
msgid "show data transfer average rate counter" msgid "show data transfer average rate counter"
msgstr "pokaż licznik uśrednionej prędkości przesyłania" msgstr "pokaż licznik uśrednionej prędkości przesyłania"
#: src/main/help.c:301 src/main/help.c:335 src/main/help.c:350
msgid "SEC"
msgstr "SEKUNDY"
#: src/main/help.c:302 #: src/main/help.c:302
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr ""
"oblicz średnią prędkość transferu na podstawie poprzednich SEKUNDY sekund"
#: src/main/help.c:305
msgid "show number of bytes transferred" msgid "show number of bytes transferred"
msgstr "pokaż ilość przesłanych bajtów" msgstr "pokaż ilość przesłanych bajtów"
#: src/main/help.c:308 #: src/main/help.c:305
msgid "show number of bits transferred"
msgstr "pokaż ilość przesłanych bitów"
#: src/main/help.c:311
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "traktuj przyrostki jako wielokrotności 1000 zamiast 1024"
#: src/main/help.c:314
msgid "show percentage of transfer buffer in use" msgid "show percentage of transfer buffer in use"
msgstr "pokaż procentowe użycie bufora transferu" msgstr "pokaż procentowe użycie bufora transferu"
#: src/main/help.c:316 #: src/main/help.c:307
msgid "NUM" msgid "NUM"
msgstr "LICZBA" msgstr "LICZBA"
#: src/main/help.c:317 #: src/main/help.c:308
msgid "show NUM bytes last written" msgid "show NUM bytes last written"
msgstr "pokaż ostatnie LICZBA przesłanych bajtów" msgstr "pokaż ostatnie LICZBA przesłanych bajtów"
#: src/main/help.c:319 #: src/main/help.c:310
msgid "FORMAT" msgid "FORMAT"
msgstr "FORMAT" msgstr "FORMAT"
#: src/main/help.c:320 #: src/main/help.c:311
msgid "set output format to FORMAT" msgid "set output format to FORMAT"
msgstr "ustaw FORMAT jako format wyjściowy" msgstr "ustaw FORMAT jako format wyjściowy"
#: src/main/help.c:323 #: src/main/help.c:314
msgid "output transfer statistics at the end"
msgstr "wyświetl na końcu statystyki transferu"
#: src/main/help.c:326
msgid "output percentages, not visual information" msgid "output percentages, not visual information"
msgstr "wyświetl wyjście procentowo, bez graficznej prezentacji" msgstr "wyświetl wyjście procentowo, bez graficznej prezentacji"
#: src/main/help.c:329 #: src/main/help.c:317
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:333 #: src/main/help.c:321
msgid "show number of bits transferred"
msgstr "pokaż ilość przesłanych bitów"
#: src/main/help.c:324
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "traktuj przyrostki jako wielokrotności 1000 zamiast 1024"
#: src/main/help.c:327
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:336 #: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
msgid "SEC"
msgstr "SEKUNDY"
#: src/main/help.c:330
msgid "display nothing until SEC seconds have passed" msgid "display nothing until SEC seconds have passed"
msgstr "nie wyświetlaj nic do momentu upłynięcia SEKUNDY sekund" msgstr "nie wyświetlaj nic do momentu upłynięcia SEKUNDY sekund"
#: src/main/help.c:338 #: src/main/help.c:332
msgid "SIZE" msgid "SIZE"
msgstr "ROZMIAR" msgstr "ROZMIAR"
#: src/main/help.c:339 #: src/main/help.c:333
msgid "set estimated data size to SIZE bytes" msgid "set estimated data size to SIZE bytes"
msgstr "ustaw oczekiwany rozmiar danych na ROZMIAR bajtów" msgstr "ustaw oczekiwany rozmiar danych na ROZMIAR bajtów"
#: src/main/help.c:342 #: src/main/help.c:336
msgid "if size unknown, show rate vs max rate" msgid "if size unknown, show rate vs max rate"
msgstr "" msgstr ""
"jeśli rozmiar nie jest znany, wyświetl zestawienie prędkości do maksymalnej " "jeśli rozmiar nie jest znany, wyświetl zestawienie prędkości do maksymalnej "
"prędkości" "prędkości"
#: src/main/help.c:345 #: src/main/help.c:339
msgid "count lines instead of bytes" msgid "count lines instead of bytes"
msgstr "zliczaj linie zamiast bajty" msgstr "zliczaj linie zamiast bajty"
#: src/main/help.c:348 #: src/main/help.c:342
msgid "lines are null-terminated" msgid "lines are null-terminated"
msgstr "linie są zakończone znakiem NUL" msgstr "linie są zakończone znakiem NUL"
#: src/main/help.c:351 #: src/main/help.c:345
msgid "update every SEC seconds" msgid "update every SEC seconds"
msgstr "aktualizuj co każde SEKUNDY sekund" msgstr "aktualizuj co każde SEKUNDY sekund"
#: src/main/help.c:353 #: src/main/help.c:348
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr ""
"oblicz średnią prędkość transferu na podstawie poprzednich SEKUNDY sekund "
"(domyślnie 30 s)"
#: src/main/help.c:350
msgid "WIDTH" msgid "WIDTH"
msgstr "SZEROKOŚĆ" msgstr "SZEROKOŚĆ"
#: src/main/help.c:354 #: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide" msgid "assume terminal is WIDTH characters wide"
msgstr "przyjmij, że terminal ma szerokość SZEROKOŚĆ znaków" msgstr "przyjmij, że terminal ma szerokość SZEROKOŚĆ znaków"
#: src/main/help.c:356 #: src/main/help.c:353
msgid "HEIGHT" msgid "HEIGHT"
msgstr "WYSOKOŚĆ" msgstr "WYSOKOŚĆ"
#: src/main/help.c:357 #: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high" msgid "assume terminal is HEIGHT rows high"
msgstr "przyjmij, że terminal ma wysokość WYSOKOŚĆ linii" msgstr "przyjmij, że terminal ma wysokość WYSOKOŚĆ linii"
#: src/main/help.c:359 #: src/main/help.c:356
msgid "NAME" msgid "NAME"
msgstr "NAZWA" msgstr "NAZWA"
#: src/main/help.c:360 #: src/main/help.c:357
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:359
msgid "SPEC"
msgstr ""
#: src/main/help.c:360
msgid "also send progress to SPEC"
msgstr ""
#: src/main/help.c:363 #: src/main/help.c:363
msgid "output transfer statistics at the end"
msgstr "wyświetl na końcu statystyki transferu"
#: src/main/help.c:366
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 standardowe wyjście błędu nie jest terminalem" msgstr "pokaż wyjście nawet standardowe wyjście błędu nie jest terminalem"
#: src/main/help.c:366 #: src/main/help.c:369
msgid "use cursor positioning escape sequences" msgid "use cursor positioning escape sequences"
msgstr "używaj znaków ucieczki do pozycjonowania kursora" msgstr "używaj znaków ucieczki do pozycjonowania kursora"
#: src/main/help.c:369 src/main/help.c:399 src/main/help.c:408 #: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:423 #: src/main/help.c:424
msgid "FILE" msgid "FILE"
msgstr "PLIK" msgstr "PLIK"
#: src/main/help.c:370 #: src/main/help.c:373
msgid "write output to FILE instead of stdout" msgid "write output to FILE instead of stdout"
msgstr "zapisz wyjście do PLIK zamiast do wyjścia standardowego" msgstr "zapisz wyjście do PLIK zamiast do wyjścia standardowego"
#: src/main/help.c:372 #: src/main/help.c:375
msgid "RATE" msgid "RATE"
msgstr "PRĘDKOŚĆ" msgstr "PRĘDKOŚĆ"
#: src/main/help.c:373 #: src/main/help.c:376
msgid "limit transfer to RATE bytes per second" msgid "limit transfer to RATE bytes per second"
msgstr "ogranicz przesyłane dane do PRĘDKOŚĆ bajtów na sekundę" msgstr "ogranicz przesyłane dane do PRĘDKOŚĆ bajtów na sekundę"
#: src/main/help.c:375 src/main/help.c:384 #: src/main/help.c:378 src/main/help.c:387
msgid "BYTES" msgid "BYTES"
msgstr "BAJTY" msgstr "BAJTY"
#: src/main/help.c:376 #: src/main/help.c:379
msgid "use a buffer size of BYTES" msgid "use a buffer size of BYTES"
msgstr "użyj bufora o rozmiarze BAJTY" msgstr "użyj bufora o rozmiarze BAJTY"
#: src/main/help.c:379 #: src/main/help.c:382
msgid "never use splice(), always use read/write" msgid "never use splice(), always use read/write"
msgstr "nigdy nie używaj splice(), zawsze używaj read/write" msgstr "nigdy nie używaj splice(), zawsze używaj read/write"
#: src/main/help.c:382 #: src/main/help.c:385
msgid "skip read errors in input" msgid "skip read errors in input"
msgstr "pomijaj błędy odczytu wejścia" msgstr "pomijaj błędy odczytu wejścia"
#: src/main/help.c:385 #: src/main/help.c:388
msgid "skip errors in BYTES blocks at a time" msgid "skip errors in BYTES blocks at a time"
msgstr "pomijaj błędy w blokach po BAJTY bajtów na raz" msgstr "pomijaj błędy w blokach po BAJTY bajtów na raz"
#: src/main/help.c:388 #: src/main/help.c:391
msgid "stop after --size bytes have been transferred" msgid "stop after --size bytes have been transferred"
msgstr "zakończ po przesłaniu --size bajtów" msgstr "zakończ po przesłaniu --size bajtów"
#: src/main/help.c:391 #: src/main/help.c:394
msgid "flush cache to disk after every write" msgid "flush cache to disk after every write"
msgstr "wymuś zapis pamięci podręcznej na dysk po każdym zapisie" msgstr "wymuś zapis pamięci podręcznej na dysk po każdym zapisie"
#: src/main/help.c:394 #: src/main/help.c:397
msgid "use direct I/O to bypass cache" msgid "use direct I/O to bypass cache"
msgstr "" msgstr ""
"użyj bezpośredniego wejścia/wyjścia celem pominięcia pamięci podręcznej" "użyj bezpośredniego wejścia/wyjścia celem pominięcia pamięci podręcznej"
#: src/main/help.c:397 #: src/main/help.c:400
msgid "discard input instead of writing to output" msgid "discard input instead of writing to output"
msgstr "zignoruj dane wejściowe zamiast wyświetlić je na wyjściu standardowym" msgstr "zignoruj dane wejściowe zamiast wyświetlić je na wyjściu standardowym"
#: src/main/help.c:400 #: src/main/help.c:403
msgid "write all input to FILE before writing to output" msgid "write all input to FILE before writing to output"
msgstr "" msgstr ""
"zapisz wszystkie dane wejściowe do PLIK przed wyświetleniem ich na wyjściu" "zapisz wszystkie dane wejściowe do PLIK przed wyświetleniem ich na wyjściu"
#: src/main/help.c:403 #: src/main/help.c:405
msgid "PID"
msgstr "PID"
#: src/main/help.c:404
msgid "update settings of process PID"
msgstr "zaktualizuj ustawienia procesu PID"
#: src/main/help.c:409
msgid "save process ID in FILE"
msgstr "zapisz ID procesu do PLIK"
#: src/main/help.c:412
msgid "PID[:FD]" msgid "PID[:FD]"
msgstr "PID[:FD]" msgstr "PID[:FD]"
#: src/main/help.c:413 #: src/main/help.c:406
msgid "watch file FD opened by process PID" msgid "watch file FD opened by process PID"
msgstr "obserwuj plik FD otworzony przez proces PID" msgstr "obserwuj plik FD otworzony przez proces PID"
#: src/main/help.c:417 #: src/main/help.c:409
msgid "PID"
msgstr "PID"
#: src/main/help.c:410
msgid "update settings of process PID"
msgstr "zaktualizuj ustawienia procesu PID"
#: src/main/help.c:415
msgid "save process ID in FILE"
msgstr "zapisz ID procesu do PLIK"
#: src/main/help.c:418
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:420 #: src/main/help.c:421
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:424 #: src/main/help.c:425
msgid "write debug logs to FILE" msgid "write debug logs to FILE"
msgstr "zapisz logi debugujące do PLIK" msgstr "zapisz logi debugujące do PLIK"
#: src/main/help.c:449 #: src/main/help.c:450
#, 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:460 #: src/main/help.c:461
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:597 #: src/main/help.c:598
#, 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"
#: src/main/main.c:214 #: src/main/main.c:230
msgid "(input)" msgid "(input)"
msgstr "(wejście)" msgstr "(wejście)"
#: src/main/main.c:299 #: src/main/main.c:319
msgid "state allocation failed" msgid "state allocation failed"
msgstr "alokacja stanu programu nie powiodła się" msgstr "alokacja stanu programu nie powiodła się"
#: src/main/options.c:140 src/pv/file.c:324 #: src/main/options.c:144 src/pv/file.c:324
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:154 #: src/main/options.c:158
msgid "is a directory" msgid "is a directory"
msgstr "jest katalogiem" msgstr "jest katalogiem"
#: src/main/options.c:183 #: src/main/options.c:187
msgid "failed to generate sysfs filename" msgid "failed to generate sysfs filename"
msgstr "nie udało się wygenerować nazwy pliku dla sysfs" msgstr "nie udało się wygenerować nazwy pliku dla sysfs"
#: src/main/options.c:205 #: src/main/options.c:209
msgid "failed to read sysfs size file" msgid "failed to read sysfs size file"
msgstr "nie udało się odczytać rozmiaru pliku sysfs" msgstr "nie udało się odczytać rozmiaru pliku sysfs"
#: src/main/options.c:225 #: src/main/options.c:229
msgid "failed to open block device" msgid "failed to open block device"
msgstr "nie udało się otworzyć urządzenia blokowego" msgstr "nie udało się otworzyć urządzenia blokowego"
#: src/main/options.c:235 #: src/main/options.c:239
msgid "failed to determine size of block device" msgid "failed to determine size of block device"
msgstr "nie udało się ustalić rozmiaru urządzenia blokowego" msgstr "nie udało się ustalić rozmiaru urządzenia blokowego"
#: src/main/options.c:339 #: src/main/options.c:344
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:358 #: src/main/options.c:363
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:420 #: src/main/options.c:425
msgid "integer argument expected" msgid "integer argument expected"
msgstr "oczekiwany argument typu liczby całkowitej" msgstr "oczekiwany argument typu liczby całkowitej"
#: src/main/options.c:431 #: src/main/options.c:436
msgid "numeric argument expected" msgid "numeric argument expected"
msgstr "oczekiwany argument liczbowy" msgstr "oczekiwany argument liczbowy"
#: src/main/options.c:442 #: src/main/options.c:447
msgid "process ID or pid:fd pair expected" msgid "process ID or pid:fd pair expected"
msgstr "oczekiwany proces ID lub para PID:FD" msgstr "oczekiwany proces ID lub para PID:FD"
#: src/main/options.c:449 #: src/main/options.c:454
msgid "invalid process ID" msgid "invalid process ID"
msgstr "niepoprawne ID procesu" msgstr "niepoprawne ID procesu"
#: src/main/options.c:666 #: src/main/options.c:679
#, 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:668 #: src/main/options.c:681
#, 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:699 #: src/main/options.c:712
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"
@@ -340,31 +352,31 @@ msgstr ""
"nie można użyć trybu zliczania linii lub opcji modyfikujących przesył " "nie można użyć trybu zliczania linii lub opcji modyfikujących przesył "
"łącznie z opcją obserwowania deskryptorów plików" "łącznie z opcją obserwowania deskryptorów plików"
#: src/main/options.c:708 #: src/main/options.c:721
msgid "cannot use cursor positioning when watching file descriptors" msgid "cannot use cursor positioning when watching file descriptors"
msgstr "" msgstr ""
"nie można użyć pozycjonowania kursora łącznie z opcją obserwowania " "nie można użyć pozycjonowania kursora łącznie z opcją obserwowania "
"deskryptorów pluków" "deskryptorów plików"
#: src/main/options.c:717 #: src/main/options.c:730
msgid "cannot use remote control when watching file descriptors" msgid "cannot use remote control when watching file descriptors"
msgstr "" msgstr ""
"nie można użyć opcji zaktualizowania ustawień procesu łącznie z opcją " "nie można użyć opcji zaktualizowania ustawień procesu łącznie z opcją "
"obserwowania deskryptorów plików" "obserwowania deskryptorów plików"
#: src/main/options.c:726 #: src/main/options.c:739
msgid "cannot transfer files when watching file descriptors" msgid "cannot transfer files when watching file descriptors"
msgstr "nie można przesyłać plików z opcją obserwowania deskryptorów plików" msgstr "nie można przesyłać plików z opcją obserwowania deskryptorów plików"
#: src/main/options.c:741 #: src/main/options.c:754
msgid "not available on systems without /proc/self/fdinfo" msgid "not available on systems without /proc/self/fdinfo"
msgstr "niedostępne na systemach bez /proc/self/fdinfo" msgstr "niedostępne na systemach bez /proc/self/fdinfo"
#: src/main/remote.c:302 #: src/main/remote.c:304
msgid "message not received" msgid "message not received"
msgstr "wiadomość nieodebrana" msgstr "wiadomość nieodebrana"
#: src/main/remote.c:429 #: src/main/remote.c:431
msgid "SA_SIGINFO not supported on this system" msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO nie jest wspierane na tym systemie" msgstr "SA_SIGINFO nie jest wspierane na tym systemie"
@@ -407,39 +419,39 @@ msgstr "yzafpnum kMGTPEZY"
#: src/pv/display.c:251 #: src/pv/display.c:251
msgid "yzafpnum KMGTPEZY" msgid "yzafpnum KMGTPEZY"
msgstr "yzafpnum kMGTPEZY" msgstr "yzafpnum KMGTPEZY"
#: src/pv/display.c:678 src/pv/transfer.c:1011 #: src/pv/display.c:681 src/pv/transfer.c:1011
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:807 #: src/pv/display.c:810
msgid "b" msgid "b"
msgstr "b" msgstr "b"
#: src/pv/display.c:810 src/pv/transfer.c:602 #: src/pv/display.c:813 src/pv/transfer.c:602
msgid "B" msgid "B"
msgstr "B" msgstr "B"
#: src/pv/display.c:854 src/pv/display.c:869 src/pv/display.c:1088 #: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "b/s" msgid "b/s"
msgstr "b/s" msgstr "b/s"
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
msgid "/s" msgid "/s"
msgstr "/s" msgstr "/s"
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "B/s" msgid "B/s"
msgstr "B/s" msgstr "B/s"
#: src/pv/display.c:901 src/pv/display.c:905 #: src/pv/display.c:904 src/pv/display.c:908
msgid "ETA" msgid "ETA"
msgstr "ETA" msgstr "ETA"
#: src/pv/display.c:971 #: src/pv/display.c:974
msgid "FIN" msgid "FIN"
msgstr "FIN" msgstr "FIN"
@@ -480,11 +492,11 @@ msgstr "prędkość min/śr/max/odch"
msgid "rate not measured" msgid "rate not measured"
msgstr "prędkość niezmierzona" msgstr "prędkość niezmierzona"
#: src/pv/loop.c:766 src/pv/loop.c:817 src/pv/loop.c:858 src/pv/watchpid.c:99 #: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128 #: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192 #: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
#: src/pv/watchpid.c:202 src/pv/watchpid.c:293 src/pv/watchpid.c:301 #: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
#: src/pv/watchpid.c:377 src/pv/watchpid.c:398 #: src/pv/watchpid.c:384 src/pv/watchpid.c:405
msgid "pid" msgid "pid"
msgstr "pid" msgstr "pid"
@@ -492,7 +504,7 @@ msgstr "pid"
msgid "history structure allocation failed" msgid "history structure allocation failed"
msgstr "nie udało się zaalokować struktury historii" msgstr "nie udało się zaalokować struktury historii"
#: src/pv/state.c:509 src/pv/state.c:520 #: src/pv/state.c:572 src/pv/state.c:583
msgid "file list allocation failed" msgid "file list allocation failed"
msgstr "nie udało się zaalokować listy plików" msgstr "nie udało się zaalokować listy plików"
@@ -531,7 +543,7 @@ msgstr "nie udało się wyczyścić interwału czasowego"
#: src/pv/transfer.c:740 #: src/pv/transfer.c:740
msgid "line position buffer allocation failed" msgid "line position buffer allocation failed"
msgstr "" msgstr "alokacja buforu pozycji linii nie powiodła się"
#: src/pv/transfer.c:872 #: src/pv/transfer.c:872
msgid "write failed" msgid "write failed"
+121 -113
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: 2024-10-15 22:01+0100\n" "POT-Creation-Date: 2024-12-02 17:56+0000\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,295 +39,303 @@ 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:335 src/main/help.c:350
msgid "SEC"
msgstr ""
#: src/main/help.c:302 #: src/main/help.c:302
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr ""
#: src/main/help.c:305
msgid "show number of bytes transferred" msgid "show number of bytes transferred"
msgstr "exibe a quantidade de bytes transferidos" msgstr "exibe a quantidade de bytes transferidos"
#: src/main/help.c:308 #: src/main/help.c:305
msgid "show number of bits transferred"
msgstr ""
#: src/main/help.c:311
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr ""
#: src/main/help.c:314
msgid "show percentage of transfer buffer in use" msgid "show percentage of transfer buffer in use"
msgstr "exibe a porcentagem de buffer de transferência em uso" msgstr "exibe a porcentagem de buffer de transferência em uso"
#: src/main/help.c:316 #: src/main/help.c:307
msgid "NUM" msgid "NUM"
msgstr "" msgstr ""
#: src/main/help.c:317 #: src/main/help.c:308
msgid "show NUM bytes last written" msgid "show NUM bytes last written"
msgstr "exibe NUM bytes gravados pela última vez" msgstr "exibe NUM bytes gravados pela última vez"
#: src/main/help.c:319 #: src/main/help.c:310
msgid "FORMAT" msgid "FORMAT"
msgstr "" msgstr ""
#: src/main/help.c:320 #: src/main/help.c:311
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:323 #: src/main/help.c:314
msgid "output transfer statistics at the end"
msgstr ""
#: src/main/help.c:326
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:329 #: src/main/help.c:317
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:333 #: src/main/help.c:321
msgid "show number of bits transferred"
msgstr ""
#: src/main/help.c:324
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr ""
#: src/main/help.c:327
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:336 #: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
msgid "SEC"
msgstr ""
#: src/main/help.c:330
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:338 #: src/main/help.c:332
msgid "SIZE" msgid "SIZE"
msgstr "" msgstr ""
#: src/main/help.c:339 #: src/main/help.c:333
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:342 #: src/main/help.c:336
msgid "if size unknown, show rate vs max rate" msgid "if size unknown, show rate vs max rate"
msgstr "" msgstr ""
#: src/main/help.c:345 #: 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:348 #: 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:351 #: 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:353 #: src/main/help.c:348
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr ""
#: src/main/help.c:350
msgid "WIDTH" msgid "WIDTH"
msgstr "" msgstr ""
#: src/main/help.c:354 #: src/main/help.c:351
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:356 #: src/main/help.c:353
msgid "HEIGHT" msgid "HEIGHT"
msgstr "" msgstr ""
#: src/main/help.c:357 #: src/main/help.c:354
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:359 #: src/main/help.c:356
msgid "NAME" msgid "NAME"
msgstr "" msgstr ""
#: src/main/help.c:360 #: src/main/help.c:357
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:359
msgid "SPEC"
msgstr ""
#: src/main/help.c:360
msgid "also send progress to SPEC"
msgstr ""
#: src/main/help.c:363 #: src/main/help.c:363
msgid "output transfer statistics at the end"
msgstr ""
#: src/main/help.c:366
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:366 #: src/main/help.c:369
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:369 src/main/help.c:399 src/main/help.c:408 #: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:423 #: src/main/help.c:424
msgid "FILE" msgid "FILE"
msgstr "" msgstr ""
#: src/main/help.c:370 #: src/main/help.c:373
msgid "write output to FILE instead of stdout" msgid "write output to FILE instead of stdout"
msgstr "" msgstr ""
#: src/main/help.c:372 #: src/main/help.c:375
msgid "RATE" msgid "RATE"
msgstr "" msgstr ""
#: src/main/help.c:373 #: src/main/help.c:376
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:375 src/main/help.c:384 #: src/main/help.c:378 src/main/help.c:387
msgid "BYTES" msgid "BYTES"
msgstr "" msgstr ""
#: src/main/help.c:376 #: src/main/help.c:379
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:379 #: src/main/help.c:382
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:382 #: src/main/help.c:385
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:385 #: src/main/help.c:388
msgid "skip errors in BYTES blocks at a time" msgid "skip errors in BYTES blocks at a time"
msgstr "" msgstr ""
#: src/main/help.c:388 #: src/main/help.c:391
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:391 #: src/main/help.c:394
msgid "flush cache to disk after every write" msgid "flush cache to disk after every write"
msgstr "" msgstr ""
#: src/main/help.c:394 #: src/main/help.c:397
msgid "use direct I/O to bypass cache" msgid "use direct I/O to bypass cache"
msgstr "" msgstr ""
#: src/main/help.c:397 #: src/main/help.c:400
msgid "discard input instead of writing to output" msgid "discard input instead of writing to output"
msgstr "" msgstr ""
#: src/main/help.c:400 #: src/main/help.c:403
msgid "write all input to FILE before writing to output" msgid "write all input to FILE before writing to output"
msgstr "" msgstr ""
#: src/main/help.c:403 #: src/main/help.c:405
msgid "PID"
msgstr ""
#: src/main/help.c:404
msgid "update settings of process PID"
msgstr "atualizar as configurações do processo PID"
#: src/main/help.c:409
msgid "save process ID in FILE"
msgstr "salvar ID do processo em FILE"
#: src/main/help.c:412
msgid "PID[:FD]" msgid "PID[:FD]"
msgstr "" msgstr ""
#: src/main/help.c:413 #: src/main/help.c:406
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:417 #: src/main/help.c:409
msgid "PID"
msgstr ""
#: src/main/help.c:410
msgid "update settings of process PID"
msgstr "atualizar as configurações do processo PID"
#: src/main/help.c:415
msgid "save process ID in FILE"
msgstr "salvar ID do processo em FILE"
#: src/main/help.c:418
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:420 #: src/main/help.c:421
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:424 #: src/main/help.c:425
msgid "write debug logs to FILE" msgid "write debug logs to FILE"
msgstr "" msgstr ""
#: src/main/help.c:449 #: src/main/help.c:450
#, 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:460 #: src/main/help.c:461
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:597 #: src/main/help.c:598
#, 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"
#: src/main/main.c:214 #: src/main/main.c:230
msgid "(input)" msgid "(input)"
msgstr "" msgstr ""
#: src/main/main.c:299 #: src/main/main.c:319
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:140 src/pv/file.c:324 #: src/main/options.c:144 src/pv/file.c:324
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:154 #: src/main/options.c:158
msgid "is a directory" msgid "is a directory"
msgstr "" msgstr ""
#: src/main/options.c:183 #: src/main/options.c:187
msgid "failed to generate sysfs filename" msgid "failed to generate sysfs filename"
msgstr "" msgstr ""
#: src/main/options.c:205 #: src/main/options.c:209
msgid "failed to read sysfs size file" msgid "failed to read sysfs size file"
msgstr "" msgstr ""
#: src/main/options.c:225 #: src/main/options.c:229
msgid "failed to open block device" msgid "failed to open block device"
msgstr "" msgstr ""
#: src/main/options.c:235 #: src/main/options.c:239
msgid "failed to determine size of block device" msgid "failed to determine size of block device"
msgstr "" msgstr ""
#: src/main/options.c:339 #: src/main/options.c:344
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:358 #: src/main/options.c:363
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:420 #: src/main/options.c:425
msgid "integer argument expected" msgid "integer argument expected"
msgstr "argumento inteiro esperado" msgstr "argumento inteiro esperado"
#: src/main/options.c:431 #: src/main/options.c:436
msgid "numeric argument expected" msgid "numeric argument expected"
msgstr "argumento numérico esperado" msgstr "argumento numérico esperado"
#: src/main/options.c:442 #: src/main/options.c:447
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:449 #: src/main/options.c:454
msgid "invalid process ID" msgid "invalid process ID"
msgstr "ID de processo inválido" msgstr "ID de processo inválido"
#: src/main/options.c:666 #: src/main/options.c:679
#, 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:668 #: src/main/options.c:681
#, 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:699 #: src/main/options.c:712
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"
@@ -335,29 +343,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:708 #: src/main/options.c:721
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:717 #: src/main/options.c:730
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:726 #: src/main/options.c:739
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:741 #: src/main/options.c:754
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:302 #: src/main/remote.c:304
msgid "message not received" msgid "message not received"
msgstr "mensagem não recebida" msgstr "mensagem não recebida"
#: src/main/remote.c:429 #: src/main/remote.c:431
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"
@@ -401,37 +409,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY" msgid "yzafpnum KMGTPEZY"
msgstr "" msgstr ""
#: src/pv/display.c:678 src/pv/transfer.c:1011 #: src/pv/display.c:681 src/pv/transfer.c:1011
msgid "buffer allocation failed" msgid "buffer allocation failed"
msgstr "erro alocando o buffer" msgstr "erro alocando o buffer"
#: src/pv/display.c:807 #: src/pv/display.c:810
msgid "b" msgid "b"
msgstr "" msgstr ""
#: src/pv/display.c:810 src/pv/transfer.c:602 #: src/pv/display.c:813 src/pv/transfer.c:602
msgid "B" msgid "B"
msgstr "" msgstr ""
#: src/pv/display.c:854 src/pv/display.c:869 src/pv/display.c:1088 #: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "b/s" msgid "b/s"
msgstr "" msgstr ""
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
msgid "/s" msgid "/s"
msgstr "" msgstr ""
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "B/s" msgid "B/s"
msgstr "B/s" msgstr "B/s"
#: src/pv/display.c:901 src/pv/display.c:905 #: src/pv/display.c:904 src/pv/display.c:908
msgid "ETA" msgid "ETA"
msgstr "ETA" msgstr "ETA"
#: src/pv/display.c:971 #: src/pv/display.c:974
msgid "FIN" msgid "FIN"
msgstr "" msgstr ""
@@ -471,11 +479,11 @@ msgstr ""
msgid "rate not measured" msgid "rate not measured"
msgstr "" msgstr ""
#: src/pv/loop.c:766 src/pv/loop.c:817 src/pv/loop.c:858 src/pv/watchpid.c:99 #: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128 #: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192 #: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
#: src/pv/watchpid.c:202 src/pv/watchpid.c:293 src/pv/watchpid.c:301 #: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
#: src/pv/watchpid.c:377 src/pv/watchpid.c:398 #: src/pv/watchpid.c:384 src/pv/watchpid.c:405
msgid "pid" msgid "pid"
msgstr "" msgstr ""
@@ -483,7 +491,7 @@ msgstr ""
msgid "history structure allocation failed" msgid "history structure allocation failed"
msgstr "" msgstr ""
#: src/pv/state.c:509 src/pv/state.c:520 #: src/pv/state.c:572 src/pv/state.c:583
msgid "file list allocation failed" msgid "file list allocation failed"
msgstr "" msgstr ""
+544
View File
@@ -0,0 +1,544 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-12-02 17:56+0000\n"
"PO-Revision-Date: 2024-10-22 18:07+0000\n"
"Last-Translator: 0ko <0ko@users.noreply.translate.codeberg.org>\n"
"Language-Team: Russian <https://translate.codeberg.org/projects/pv/pv/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.8.1\n"
#: src/main/help.c:284
msgid "show progress bar"
msgstr "показать полосу прогресса"
#: src/main/help.c:287
msgid "show elapsed time"
msgstr "показать прошедшее время"
#: src/main/help.c:290
msgid "show estimated time of arrival (completion)"
msgstr "показать примерное время завершения"
#: src/main/help.c:293
msgid "show absolute estimated time of arrival (completion)"
msgstr "показать примерное абсолютное время завершения"
#: src/main/help.c:296
msgid "show data transfer rate counter"
msgstr "показать скорость передачи данных"
#: src/main/help.c:299
msgid "show data transfer average rate counter"
msgstr "показать среднюю скорость передачи данных"
#: src/main/help.c:302
msgid "show number of bytes transferred"
msgstr "показать объём переданных данных в байтах"
#: src/main/help.c:305
msgid "show percentage of transfer buffer in use"
msgstr "показать использование буфера передачи в процентах"
#: src/main/help.c:307
msgid "NUM"
msgstr "КОЛ"
#: src/main/help.c:308
msgid "show NUM bytes last written"
msgstr "показать КОЛ байт, переданных в последний раз"
#: src/main/help.c:310
msgid "FORMAT"
msgstr "ФОРМАТ"
#: src/main/help.c:311
msgid "set output format to FORMAT"
msgstr "указать формат вывода как ФОРМАТ"
#: src/main/help.c:314
msgid "output percentages, not visual information"
msgstr "показать проценты вместо визуальной информации"
#: src/main/help.c:317
msgid "do not output any transfer information at all"
msgstr "не отображать никакую информацию о передаче"
#: src/main/help.c:321
msgid "show number of bits transferred"
msgstr "показать объём переданных данных в битах"
#: src/main/help.c:324
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "считать суффиксы как умножители на 1000, а не на 1024"
#: src/main/help.c:327
msgid "display nothing until first byte transferred"
msgstr "ничего не показывать, пока не будет передан первый байт"
#: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
msgid "SEC"
msgstr "СЕК"
#: src/main/help.c:330
msgid "display nothing until SEC seconds have passed"
msgstr "ничего не показывать, пока не пройдёт СЕК секунд"
#: src/main/help.c:332
msgid "SIZE"
msgstr "РАЗМ"
#: src/main/help.c:333
msgid "set estimated data size to SIZE bytes"
msgstr "указать ожидаемый объём данных как РАЗМ байт"
#: src/main/help.c:336
msgid "if size unknown, show rate vs max rate"
msgstr "если объём неизвестен, показать скорость и макс. скорость"
#: src/main/help.c:339
msgid "count lines instead of bytes"
msgstr "считать линии вместо байт"
#: src/main/help.c:342
msgid "lines are null-terminated"
msgstr "строки прерываются нулями"
#: src/main/help.c:345
msgid "update every SEC seconds"
msgstr "обновлять каждые СЕК секунд"
#: src/main/help.c:348
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr "вычислять среднюю скорость за последние СЕК секунд (по умолчанию 30)"
#: src/main/help.c:350
msgid "WIDTH"
msgstr "ШИРИНА"
#: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide"
msgstr "считать, что в одной строке помещается ШИРИНА символов"
#: src/main/help.c:353
msgid "HEIGHT"
msgstr "ВЫСОТА"
#: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high"
msgstr "считать, что на экране помещается ВЫСОТА строк"
#: src/main/help.c:356
msgid "NAME"
msgstr "ИМЯ"
#: src/main/help.c:357
msgid "prefix visual information with NAME"
msgstr "писать ИМЯ до визуальной информации"
#: src/main/help.c:359
msgid "SPEC"
msgstr ""
#: src/main/help.c:360
msgid "also send progress to SPEC"
msgstr ""
#: src/main/help.c:363
msgid "output transfer statistics at the end"
msgstr "после завершения показать статистику"
#: src/main/help.c:366
msgid "output even if standard error is not a terminal"
msgstr "вевести, даже если стд. ошибка не является терминалом"
#: src/main/help.c:369
msgid "use cursor positioning escape sequences"
msgstr ""
"использовать символьные последовательности для позиционирования курсора"
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:424
msgid "FILE"
msgstr "ФАЙЛ"
#: src/main/help.c:373
msgid "write output to FILE instead of stdout"
msgstr "направить вывод в ФАЙЛ вместо стд. вывода"
#: src/main/help.c:375
msgid "RATE"
msgstr "СКОР"
#: src/main/help.c:376
msgid "limit transfer to RATE bytes per second"
msgstr "ограничить скорость передачи до СКОР байт/сек"
#: src/main/help.c:378 src/main/help.c:387
msgid "BYTES"
msgstr "БАЙТ"
#: src/main/help.c:379
msgid "use a buffer size of BYTES"
msgstr "использовать буфер размера БАЙТ"
#: src/main/help.c:382
msgid "never use splice(), always use read/write"
msgstr "использовать чтение/запись вместо splice()"
#: src/main/help.c:385
msgid "skip read errors in input"
msgstr "пропустить ошибки чтения во вводе"
#: src/main/help.c:388
msgid "skip errors in BYTES blocks at a time"
msgstr "пропускать ошибки в <БАЙТ> блоках за раз"
#: src/main/help.c:391
msgid "stop after --size bytes have been transferred"
msgstr "остановить после передачи --size байт"
#: src/main/help.c:394
msgid "flush cache to disk after every write"
msgstr "сбрасывать кеш на диск каждый раз"
#: src/main/help.c:397
msgid "use direct I/O to bypass cache"
msgstr "использовать прямой ввод/вывод для обхода кеша"
#: src/main/help.c:400
msgid "discard input instead of writing to output"
msgstr "отбрасывать ввод вместо записи в вывод"
#: src/main/help.c:403
msgid "write all input to FILE before writing to output"
msgstr "записывать весь ввод в ФАЙЛ прежде, чем отправлять на вывод"
#: src/main/help.c:405
msgid "PID[:FD]"
msgstr "ИДпр[:FD]"
#: src/main/help.c:406
msgid "watch file FD opened by process PID"
msgstr "следить за FD файла, открытого процессом ИДпр"
#: src/main/help.c:409
msgid "PID"
msgstr "ИДпр"
#: src/main/help.c:410
msgid "update settings of process PID"
msgstr "обновить настройки ИДпр процесса"
#: src/main/help.c:415
msgid "save process ID in FILE"
msgstr "сохранить ИД процесса в ФАЙЛ"
#: src/main/help.c:418
msgid "show this help and exit"
msgstr "показать справку и завершить работу"
#: src/main/help.c:421
msgid "show version information and exit"
msgstr "показать версию программы и завершить работу"
#: src/main/help.c:425
msgid "write debug logs to FILE"
msgstr "вести запись отладочного журнала в ФАЙЛ"
#: src/main/help.c:450
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Использование: %s [ОПЦИИ] [ФАЙЛ]..."
#: src/main/help.c:461
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr ""
#: src/main/help.c:598
#, c-format
msgid "Please report any bugs to: %s"
msgstr "Сообщайте о проблемах на: %s"
#: src/main/main.c:230
msgid "(input)"
msgstr "(ввод)"
#: src/main/main.c:319
msgid "state allocation failed"
msgstr ""
#: src/main/options.c:144 src/pv/file.c:324
msgid "failed to stat file"
msgstr "не удалось получить информацию о файле"
#: src/main/options.c:158
msgid "is a directory"
msgstr "является каталогом"
#: src/main/options.c:187
msgid "failed to generate sysfs filename"
msgstr "не удалось создать имя файла sysfs"
#: src/main/options.c:209
msgid "failed to read sysfs size file"
msgstr "не удалось узнать размер файла sysfs"
#: src/main/options.c:229
msgid "failed to open block device"
msgstr "не удалось открыть блочное устройство"
#: src/main/options.c:239
msgid "failed to determine size of block device"
msgstr "не удалось определить размер блочного устройства"
#: src/main/options.c:344
msgid "option structure allocation failed"
msgstr "не удалось выделить память для структуры опций"
#: src/main/options.c:363
msgid "option structure argv allocation failed"
msgstr "не удалось выделить память для структуры опций argv"
#: src/main/options.c:425
msgid "integer argument expected"
msgstr "ожидалось целое число"
#: src/main/options.c:436
msgid "numeric argument expected"
msgstr "ожидалось число"
#: src/main/options.c:447
msgid "process ID or pid:fd pair expected"
msgstr "ожидался ИД процесса или пара ИДпр:ДФ"
#: src/main/options.c:454
msgid "invalid process ID"
msgstr "неправильный ИД процесса"
#: src/main/options.c:679
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Выполните `%s --help' для получения подробностей."
#: src/main/options.c:681
#, c-format
msgid "Try `%s -h' for more information."
msgstr "Выполните `%s -h' для получения подробностей."
#: src/main/options.c:712
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
msgstr ""
#: src/main/options.c:721
msgid "cannot use cursor positioning when watching file descriptors"
msgstr ""
#: src/main/options.c:730
msgid "cannot use remote control when watching file descriptors"
msgstr "удалённое управление невозможно при отслеживании дескрипторов файлов"
#: src/main/options.c:739
msgid "cannot transfer files when watching file descriptors"
msgstr "передача файлов невозможна при отслеживании дескрипторов файлов"
#: src/main/options.c:754
msgid "not available on systems without /proc/self/fdinfo"
msgstr "невозможно на системах без /proc/self/fdinfo"
#: src/main/remote.c:304
msgid "message not received"
msgstr "сообщение не получено"
#: src/main/remote.c:431
msgid "SA_SIGINFO not supported on this system"
msgstr "Этой системой не поддерживается SA_SIGINFO"
#: src/main/version.c:28
msgid "License: GPLv3+ <https://www.gnu.org/licenses/gpl-3.0.html>"
msgstr "Лицензия: 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 "Это свободная программа. Вы можете изменять и распространять её."
#: src/main/version.c:30
msgid "There is NO WARRANTY, to the extent permitted by law."
msgstr ""
"Разработчики не дают никаких гарантий, связанных с работой этой программы, "
"насколько это юридически возможно."
#: src/main/version.c:32
msgid "Project web site"
msgstr "Веб-сайт проекта"
#: src/pv/cursor.c:61
msgid "failed to get terminal name"
msgstr "не удалось получить имя терминала"
#: src/pv/cursor.c:106
msgid "failed to open lock file"
msgstr "не удалось открыть блокирующий файл"
#: src/pv/cursor.c:139
msgid "lock attempt failed"
msgstr "попытка блокировки не удалась"
#: src/pv/cursor.c:400
msgid "failed to open terminal"
msgstr "не удалось открыть терминал"
#: src/pv/display.c:233
msgid "yzafpnum kMGTPEZY"
msgstr ""
#: src/pv/display.c:251
msgid "yzafpnum KMGTPEZY"
msgstr ""
#: src/pv/display.c:681 src/pv/transfer.c:1011
msgid "buffer allocation failed"
msgstr "не удалось выделить память для буфера"
#: src/pv/display.c:810
msgid "b"
msgstr "бит"
#: src/pv/display.c:813 src/pv/transfer.c:602
msgid "B"
msgstr "байт"
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/loop.c:549
msgid "b/s"
msgstr "бит/с"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
msgid "/s"
msgstr "/с"
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/loop.c:549
msgid "B/s"
msgstr "байт/с"
#: src/pv/display.c:904 src/pv/display.c:908
msgid "ETA"
msgstr "ОЖИД"
#: src/pv/display.c:974
msgid "FIN"
msgstr "ЗАВЕРШ"
#: src/pv/file.c:149
msgid "failed to seek to start of output"
msgstr ""
#: src/pv/file.c:294
msgid "failed to close file"
msgstr "не удалось закрыть файл"
#: src/pv/file.c:317
msgid "failed to read file"
msgstr "не удалось прочесть файл"
#: src/pv/file.c:332
msgid "failed to stat output file"
msgstr "не удалось получить информацию о выходном файле"
#: src/pv/file.c:354
msgid "input file is output file"
msgstr "пути исходного и выходного файлов одинаковы"
#: src/pv/file.c:412
msgid "(none)"
msgstr "(нет)"
#: src/pv/file.c:414
msgid "(stdin)"
msgstr "(стд. ввод)"
#: src/pv/loop.c:548
msgid "rate min/avg/max/mdev"
msgstr "скор. мин/сред/макс/дев"
#: src/pv/loop.c:560
msgid "rate not measured"
msgstr "скорость не изменяется"
#: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
#: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
#: src/pv/watchpid.c:384 src/pv/watchpid.c:405
msgid "pid"
msgstr "ИДпр"
#: src/pv/state.c:40
msgid "history structure allocation failed"
msgstr "не удалось выделить память для структуры истории"
#: src/pv/state.c:572 src/pv/state.c:583
msgid "file list allocation failed"
msgstr "не удалось выделить память для списка файлов"
#: src/pv/transfer.c:464
msgid "read failed"
msgstr "чтение не удалось"
#: src/pv/transfer.c:487
msgid "warning: read errors detected"
msgstr "внимание: замечены ошибки чтения"
#: src/pv/transfer.c:503
msgid "file is not seekable"
msgstr ""
#: src/pv/transfer.c:581
msgid "failed to seek past error"
msgstr ""
#: src/pv/transfer.c:601
msgid "skipped past read error"
msgstr ""
#: src/pv/transfer.c:642
msgid "no transfer buffer allocated"
msgstr "не выделена память для буфера передачи"
#: src/pv/transfer.c:684
msgid "failed to set interval timer"
msgstr "не удалось задать измеритель временного промежутка"
#: src/pv/transfer.c:710
msgid "failed to clear interval timer"
msgstr "не удалось очистить измеритель временного промежутка"
#: src/pv/transfer.c:740
msgid "line position buffer allocation failed"
msgstr ""
#: src/pv/transfer.c:872
msgid "write failed"
msgstr "запись не удалась"
#: src/pv/transfer.c:1109
msgid "select call failed"
msgstr "запрос выборки не удался"
#: 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
msgid "fd"
msgstr "дф"
#: src/pv/watchpid.c:130 src/pv/watchpid.c:204
msgid "not a regular file or block device"
msgstr "не является обычным файлом или блочным устройством"
+121 -113
View File
@@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: pv 1.8.14\n" "Project-Id-Version: pv 1.8.14\n"
"Report-Msgid-Bugs-To: pv@ivarch.com\n" "Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-10-15 22:01+0100\n" "POT-Creation-Date: 2024-12-02 17:56+0000\n"
"PO-Revision-Date: 2024-10-12 23:51+0000\n" "PO-Revision-Date: 2024-10-12 23:51+0000\n"
"Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n" "Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n"
"Language-Team: Turkish <https://translate.codeberg.org/projects/pv/pv/tr/>\n" "Language-Team: Turkish <https://translate.codeberg.org/projects/pv/pv/tr/>\n"
@@ -37,294 +37,302 @@ msgstr "veri aktarım oranı sayacını göster"
msgid "show data transfer average rate counter" msgid "show data transfer average rate counter"
msgstr "veri aktarımı ortalama hız sayacını göster" msgstr "veri aktarımı ortalama hız sayacını göster"
#: src/main/help.c:301 src/main/help.c:335 src/main/help.c:350
msgid "SEC"
msgstr "SEC"
#: src/main/help.c:302 #: src/main/help.c:302
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr "geçmiş SEC saniyeleri üzerinden ortalama hızı hesapla (varsayılan 30s)"
#: src/main/help.c:305
msgid "show number of bytes transferred" msgid "show number of bytes transferred"
msgstr "aktarılan bayt sayısını göster" msgstr "aktarılan bayt sayısını göster"
#: src/main/help.c:308 #: src/main/help.c:305
msgid "show number of bits transferred"
msgstr "aktarılan bit sayısını göster"
#: src/main/help.c:311
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "ekleri 1024 yerine 1000'in katları olarak değerlendir"
#: src/main/help.c:314
msgid "show percentage of transfer buffer in use" msgid "show percentage of transfer buffer in use"
msgstr "aktarım tamponunun kullanım yüzdesini göster" msgstr "aktarım tamponunun kullanım yüzdesini göster"
#: src/main/help.c:316 #: src/main/help.c:307
msgid "NUM" msgid "NUM"
msgstr "NUM" msgstr "NUM"
#: src/main/help.c:317 #: src/main/help.c:308
msgid "show NUM bytes last written" msgid "show NUM bytes last written"
msgstr "son yazılan NUM baytlarını göster" msgstr "son yazılan NUM baytlarını göster"
#: src/main/help.c:319 #: src/main/help.c:310
msgid "FORMAT" msgid "FORMAT"
msgstr "FORMAT" msgstr "FORMAT"
#: src/main/help.c:320 #: src/main/help.c:311
msgid "set output format to FORMAT" msgid "set output format to FORMAT"
msgstr "çıktı formatını FORMAT olarak ayarlayın" msgstr "çıktı formatını FORMAT olarak ayarlayın"
#: src/main/help.c:323 #: src/main/help.c:314
msgid "output transfer statistics at the end"
msgstr "transfer istatistiklerini sonda göster"
#: src/main/help.c:326
msgid "output percentages, not visual information" msgid "output percentages, not visual information"
msgstr "görsel bilgileri değil, yüzdeleri çıktı olarak yazdır" msgstr "görsel bilgileri değil, yüzdeleri çıktı olarak yazdır"
#: src/main/help.c:329 #: src/main/help.c:317
msgid "do not output any transfer information at all" msgid "do not output any transfer information at all"
msgstr "hiçbir transfer bilgisini yazdırma" msgstr "hiçbir transfer bilgisini yazdırma"
#: src/main/help.c:333 #: src/main/help.c:321
msgid "show number of bits transferred"
msgstr "aktarılan bit sayısını göster"
#: src/main/help.c:324
msgid "treat suffixes as multiples of 1000 rather than 1024"
msgstr "ekleri 1024 yerine 1000'in katları olarak değerlendir"
#: src/main/help.c:327
msgid "display nothing until first byte transferred" msgid "display nothing until first byte transferred"
msgstr "ilk bayt aktarılana kadar hiçbir şey gösterme" msgstr "ilk bayt aktarılana kadar hiçbir şey gösterme"
#: src/main/help.c:336 #: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
msgid "SEC"
msgstr "SEC"
#: src/main/help.c:330
msgid "display nothing until SEC seconds have passed" msgid "display nothing until SEC seconds have passed"
msgstr "SEC saniye geçene kadar hiçbir şey gösterme" msgstr "SEC saniye geçene kadar hiçbir şey gösterme"
#: src/main/help.c:338 #: src/main/help.c:332
msgid "SIZE" msgid "SIZE"
msgstr "BOYUT" msgstr "BOYUT"
#: src/main/help.c:339 #: src/main/help.c:333
msgid "set estimated data size to SIZE bytes" msgid "set estimated data size to SIZE bytes"
msgstr "tahmini veri boyutunu BOYUT bayt olarak ayarlayın" msgstr "tahmini veri boyutunu BOYUT bayt olarak ayarlayın"
#: src/main/help.c:342 #: src/main/help.c:336
msgid "if size unknown, show rate vs max rate" msgid "if size unknown, show rate vs max rate"
msgstr "boyut bilinmiyorsa, oranı maksimum oranla göster" msgstr "boyut bilinmiyorsa, oranı maksimum oranla göster"
#: src/main/help.c:345 #: src/main/help.c:339
msgid "count lines instead of bytes" msgid "count lines instead of bytes"
msgstr "bayt yerine satır say" msgstr "bayt yerine satır say"
#: src/main/help.c:348 #: src/main/help.c:342
msgid "lines are null-terminated" msgid "lines are null-terminated"
msgstr "satırlar boş sonlandırılır" msgstr "satırlar boş sonlandırılır"
#: src/main/help.c:351 #: src/main/help.c:345
msgid "update every SEC seconds" msgid "update every SEC seconds"
msgstr "her SEC saniyede bir güncelleme" msgstr "her SEC saniyede bir güncelleme"
#: src/main/help.c:353 #: src/main/help.c:348
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr "geçmiş SEC saniyeleri üzerinden ortalama hızı hesapla (varsayılan 30s)"
#: src/main/help.c:350
msgid "WIDTH" msgid "WIDTH"
msgstr "GENİŞLİK" msgstr "GENİŞLİK"
#: src/main/help.c:354 #: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide" msgid "assume terminal is WIDTH characters wide"
msgstr "terminalin GENİŞLİK karakter genişliğinde olduğunu varsayalım" msgstr "terminalin GENİŞLİK karakter genişliğinde olduğunu varsayalım"
#: src/main/help.c:356 #: src/main/help.c:353
msgid "HEIGHT" msgid "HEIGHT"
msgstr "YÜKSEKLİK" msgstr "YÜKSEKLİK"
#: src/main/help.c:357 #: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high" msgid "assume terminal is HEIGHT rows high"
msgstr "terminalin YÜKSEKLİK sıraları yüksekliğinde olduğunu varsayalım" msgstr "terminalin YÜKSEKLİK sıraları yüksekliğinde olduğunu varsayalım"
#: src/main/help.c:359 #: src/main/help.c:356
msgid "NAME" msgid "NAME"
msgstr "İSİM" msgstr "İSİM"
#: src/main/help.c:360 #: src/main/help.c:357
msgid "prefix visual information with NAME" msgid "prefix visual information with NAME"
msgstr "görsel bilgiyi İSİM ile öne ekle" msgstr "görsel bilgiyi İSİM ile öne ekle"
#: src/main/help.c:359
msgid "SPEC"
msgstr ""
#: src/main/help.c:360
msgid "also send progress to SPEC"
msgstr ""
#: src/main/help.c:363 #: src/main/help.c:363
msgid "output transfer statistics at the end"
msgstr "transfer istatistiklerini sonda göster"
#: src/main/help.c:366
msgid "output even if standard error is not a terminal" msgid "output even if standard error is not a terminal"
msgstr "standart hata bir terminal olmasa bile çıktı yazdır" msgstr "standart hata bir terminal olmasa bile çıktı yazdır"
#: src/main/help.c:366 #: src/main/help.c:369
msgid "use cursor positioning escape sequences" msgid "use cursor positioning escape sequences"
msgstr "imleç konumlandırma kaçış dizilerini kullan" msgstr "imleç konumlandırma kaçış dizilerini kullan"
#: src/main/help.c:369 src/main/help.c:399 src/main/help.c:408 #: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:423 #: src/main/help.c:424
msgid "FILE" msgid "FILE"
msgstr "DOSYA" msgstr "DOSYA"
#: src/main/help.c:370 #: src/main/help.c:373
msgid "write output to FILE instead of stdout" msgid "write output to FILE instead of stdout"
msgstr "çıktıyı stdout yerine DOSYA'ya yaz" msgstr "çıktıyı stdout yerine DOSYA'ya yaz"
#: src/main/help.c:372 #: src/main/help.c:375
msgid "RATE" msgid "RATE"
msgstr "ORAN" msgstr "ORAN"
#: src/main/help.c:373 #: src/main/help.c:376
msgid "limit transfer to RATE bytes per second" msgid "limit transfer to RATE bytes per second"
msgstr "aktarımı saniye başına ORAN bayt ile sınırlandırın" msgstr "aktarımı saniye başına ORAN bayt ile sınırlandırın"
#: src/main/help.c:375 src/main/help.c:384 #: src/main/help.c:378 src/main/help.c:387
msgid "BYTES" msgid "BYTES"
msgstr "BAYTLAR" msgstr "BAYTLAR"
#: src/main/help.c:376 #: src/main/help.c:379
msgid "use a buffer size of BYTES" msgid "use a buffer size of BYTES"
msgstr "BAYTLAR tampon boyutu kullanın" msgstr "BAYTLAR tampon boyutu kullanın"
#: src/main/help.c:379 #: src/main/help.c:382
msgid "never use splice(), always use read/write" msgid "never use splice(), always use read/write"
msgstr "splice() kullanma, her zaman read/write kullan" msgstr "splice() kullanma, her zaman read/write kullan"
#: src/main/help.c:382 #: src/main/help.c:385
msgid "skip read errors in input" msgid "skip read errors in input"
msgstr "girdideki okuma hatalarını atla" msgstr "girdideki okuma hatalarını atla"
#: src/main/help.c:385 #: src/main/help.c:388
msgid "skip errors in BYTES blocks at a time" msgid "skip errors in BYTES blocks at a time"
msgstr "BAYTLAR blokları halinde hataları atla" msgstr "BAYTLAR blokları halinde hataları atla"
#: src/main/help.c:388 #: src/main/help.c:391
msgid "stop after --size bytes have been transferred" msgid "stop after --size bytes have been transferred"
msgstr "--size bayt transfer edildikten sonra dur" msgstr "--size bayt transfer edildikten sonra dur"
#: src/main/help.c:391 #: src/main/help.c:394
msgid "flush cache to disk after every write" msgid "flush cache to disk after every write"
msgstr "her yazmadan sonra önbelleği diske boşalt" msgstr "her yazmadan sonra önbelleği diske boşalt"
#: src/main/help.c:394 #: src/main/help.c:397
msgid "use direct I/O to bypass cache" msgid "use direct I/O to bypass cache"
msgstr "Önbelleği atlamak için doğrudan I/O kullan" msgstr "Önbelleği atlamak için doğrudan I/O kullan"
#: src/main/help.c:397 #: src/main/help.c:400
msgid "discard input instead of writing to output" msgid "discard input instead of writing to output"
msgstr "Girdiyi çıktıya yazmak yerine yok say" msgstr "Girdiyi çıktıya yazmak yerine yok say"
#: src/main/help.c:400 #: src/main/help.c:403
msgid "write all input to FILE before writing to output" msgid "write all input to FILE before writing to output"
msgstr "çıktıya yazmadan önce tüm girdiyi DOSYA'ya yaz" msgstr "çıktıya yazmadan önce tüm girdiyi DOSYA'ya yaz"
#: src/main/help.c:403 #: src/main/help.c:405
msgid "PID"
msgstr "PID"
#: src/main/help.c:404
msgid "update settings of process PID"
msgstr "süreç PID ayarlarını güncelle"
#: src/main/help.c:409
msgid "save process ID in FILE"
msgstr "FILE'da işlem kimliğini (ID) kaydet"
#: src/main/help.c:412
msgid "PID[:FD]" msgid "PID[:FD]"
msgstr "PID[:FD]" msgstr "PID[:FD]"
#: src/main/help.c:413 #: src/main/help.c:406
msgid "watch file FD opened by process PID" msgid "watch file FD opened by process PID"
msgstr "FD izleme dosyası PID işlemi tarafından açıldı" msgstr "FD izleme dosyası PID işlemi tarafından açıldı"
#: src/main/help.c:417 #: src/main/help.c:409
msgid "PID"
msgstr "PID"
#: src/main/help.c:410
msgid "update settings of process PID"
msgstr "süreç PID ayarlarını güncelle"
#: src/main/help.c:415
msgid "save process ID in FILE"
msgstr "FILE'da işlem kimliğini (ID) kaydet"
#: src/main/help.c:418
msgid "show this help and exit" msgid "show this help and exit"
msgstr "bu yardımı göster ve çık" msgstr "bu yardımı göster ve çık"
#: src/main/help.c:420 #: src/main/help.c:421
msgid "show version information and exit" msgid "show version information and exit"
msgstr "sürüm bilgilerini göster ve çık" msgstr "sürüm bilgilerini göster ve çık"
#: src/main/help.c:424 #: src/main/help.c:425
msgid "write debug logs to FILE" msgid "write debug logs to FILE"
msgstr "Hata ayıklama kayıtlarını DOSYA'ya yaz" msgstr "Hata ayıklama kayıtlarını DOSYA'ya yaz"
#: src/main/help.c:449 #: src/main/help.c:450
#, c-format #, c-format
msgid "Usage: %s [OPTION] [FILE]..." msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Kullanım şekli: %s [AYAR] [DOSYA]..." msgstr "Kullanım şekli: %s [AYAR] [DOSYA]..."
#: src/main/help.c:460 #: src/main/help.c:461
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 ""
"İzleme ile DOSYA(lar)ı veya standart girdiyi standart çıktı ile birleştirin." "İzleme ile DOSYA(lar)ı veya standart girdiyi standart çıktı ile birleştirin."
#: src/main/help.c:597 #: src/main/help.c:598
#, c-format #, c-format
msgid "Please report any bugs to: %s" msgid "Please report any bugs to: %s"
msgstr "Lütfen hataları şu adrese bildirin: %s" msgstr "Lütfen hataları şu adrese bildirin: %s"
#: src/main/main.c:214 #: src/main/main.c:230
msgid "(input)" msgid "(input)"
msgstr "(giriş)" msgstr "(giriş)"
#: src/main/main.c:299 #: src/main/main.c:319
msgid "state allocation failed" msgid "state allocation failed"
msgstr "durum tahsisi başarısız oldu" msgstr "durum tahsisi başarısız oldu"
#: src/main/options.c:140 src/pv/file.c:324 #: src/main/options.c:144 src/pv/file.c:324
msgid "failed to stat file" msgid "failed to stat file"
msgstr "dosya statüsünde başarısız oldu" msgstr "dosya statüsünde başarısız oldu"
#: src/main/options.c:154 #: src/main/options.c:158
msgid "is a directory" msgid "is a directory"
msgstr "bir dizindir" msgstr "bir dizindir"
#: src/main/options.c:183 #: src/main/options.c:187
msgid "failed to generate sysfs filename" msgid "failed to generate sysfs filename"
msgstr "sysfs dosya adı oluşturulamadı" msgstr "sysfs dosya adı oluşturulamadı"
#: src/main/options.c:205 #: src/main/options.c:209
msgid "failed to read sysfs size file" msgid "failed to read sysfs size file"
msgstr "sysfs boyut dosyası okunamadı" msgstr "sysfs boyut dosyası okunamadı"
#: src/main/options.c:225 #: src/main/options.c:229
msgid "failed to open block device" msgid "failed to open block device"
msgstr "blok aygıtı açılamadı" msgstr "blok aygıtı açılamadı"
#: src/main/options.c:235 #: src/main/options.c:239
msgid "failed to determine size of block device" msgid "failed to determine size of block device"
msgstr "blok aygıtının boyutu belirlenemedi" msgstr "blok aygıtının boyutu belirlenemedi"
#: src/main/options.c:339 #: src/main/options.c:344
msgid "option structure allocation failed" msgid "option structure allocation failed"
msgstr "seçenek yapısı tahsisi başarısız oldu" msgstr "seçenek yapısı tahsisi başarısız oldu"
#: src/main/options.c:358 #: src/main/options.c:363
msgid "option structure argv allocation failed" msgid "option structure argv allocation failed"
msgstr "seçenek yapısı argv tahsisi başarısız oldu" msgstr "seçenek yapısı argv tahsisi başarısız oldu"
#: src/main/options.c:420 #: src/main/options.c:425
msgid "integer argument expected" msgid "integer argument expected"
msgstr "tamsayı bağımsız değişkeni bekleniyor" msgstr "tamsayı bağımsız değişkeni bekleniyor"
#: src/main/options.c:431 #: src/main/options.c:436
msgid "numeric argument expected" msgid "numeric argument expected"
msgstr "sayısal bağımsız değişken bekleniyor" msgstr "sayısal bağımsız değişken bekleniyor"
#: src/main/options.c:442 #: src/main/options.c:447
msgid "process ID or pid:fd pair expected" msgid "process ID or pid:fd pair expected"
msgstr "süreç kimliği (ID) veya pid:fd çifti bekleniyor" msgstr "süreç kimliği (ID) veya pid:fd çifti bekleniyor"
#: src/main/options.c:449 #: src/main/options.c:454
msgid "invalid process ID" msgid "invalid process ID"
msgstr "geçersiz süreç kimliği (ID)" msgstr "geçersiz süreç kimliği (ID)"
#: src/main/options.c:666 #: src/main/options.c:679
#, c-format #, c-format
msgid "Try `%s --help' for more information." msgid "Try `%s --help' for more information."
msgstr "Daha fazla bilgi için `%s --help' seçeneğini deneyin." msgstr "Daha fazla bilgi için `%s --help' seçeneğini deneyin."
#: src/main/options.c:668 #: src/main/options.c:681
#, c-format #, c-format
msgid "Try `%s -h' for more information." msgid "Try `%s -h' for more information."
msgstr "Daha fazla bilgi için `%s -h' seçeneğini deneyin." msgstr "Daha fazla bilgi için `%s -h' seçeneğini deneyin."
#: src/main/options.c:699 #: src/main/options.c:712
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"
@@ -332,27 +340,27 @@ msgstr ""
"dosya tanımlayıcılarını izlerken satır modu veya aktarım değiştirici " "dosya tanımlayıcılarını izlerken satır modu veya aktarım değiştirici "
"seçeneklerini kullanamaz" "seçeneklerini kullanamaz"
#: src/main/options.c:708 #: src/main/options.c:721
msgid "cannot use cursor positioning when watching file descriptors" msgid "cannot use cursor positioning when watching file descriptors"
msgstr "dosya tanımlayıcılarını izlerken imleç konumlandırmayı kullanamaz" msgstr "dosya tanımlayıcılarını izlerken imleç konumlandırmayı kullanamaz"
#: src/main/options.c:717 #: src/main/options.c:730
msgid "cannot use remote control when watching file descriptors" msgid "cannot use remote control when watching file descriptors"
msgstr "dosya tanımlayıcılarını izlerken uzaktan kumandayı kullanamaz" msgstr "dosya tanımlayıcılarını izlerken uzaktan kumandayı kullanamaz"
#: src/main/options.c:726 #: src/main/options.c:739
msgid "cannot transfer files when watching file descriptors" msgid "cannot transfer files when watching file descriptors"
msgstr "dosya tanımlayıcıları izlenirken dosya aktarılamıyor" msgstr "dosya tanımlayıcıları izlenirken dosya aktarılamıyor"
#: src/main/options.c:741 #: src/main/options.c:754
msgid "not available on systems without /proc/self/fdinfo" msgid "not available on systems without /proc/self/fdinfo"
msgstr "/proc/self/fdinfo olmayan sistemlerde kullanılamaz" msgstr "/proc/self/fdinfo olmayan sistemlerde kullanılamaz"
#: src/main/remote.c:302 #: src/main/remote.c:304
msgid "message not received" msgid "message not received"
msgstr "mesaj alınamadı" msgstr "mesaj alınamadı"
#: src/main/remote.c:429 #: src/main/remote.c:431
msgid "SA_SIGINFO not supported on this system" msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO bu sistemde desteklenmiyor" msgstr "SA_SIGINFO bu sistemde desteklenmiyor"
@@ -397,37 +405,37 @@ msgstr "yzafpnum kMGTPEZY"
msgid "yzafpnum KMGTPEZY" msgid "yzafpnum KMGTPEZY"
msgstr "yzafpnum KMGTPEZY" msgstr "yzafpnum KMGTPEZY"
#: src/pv/display.c:678 src/pv/transfer.c:1011 #: src/pv/display.c:681 src/pv/transfer.c:1011
msgid "buffer allocation failed" msgid "buffer allocation failed"
msgstr "arabellek tahsisi başarısız oldu" msgstr "arabellek tahsisi başarısız oldu"
#: src/pv/display.c:807 #: src/pv/display.c:810
msgid "b" msgid "b"
msgstr "b" msgstr "b"
#: src/pv/display.c:810 src/pv/transfer.c:602 #: src/pv/display.c:813 src/pv/transfer.c:602
msgid "B" msgid "B"
msgstr "B" msgstr "B"
#: src/pv/display.c:854 src/pv/display.c:869 src/pv/display.c:1088 #: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "b/s" msgid "b/s"
msgstr "b/s" msgstr "b/s"
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
msgid "/s" msgid "/s"
msgstr "/s" msgstr "/s"
#: src/pv/display.c:858 src/pv/display.c:873 src/pv/display.c:1092 #: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
#: src/pv/loop.c:549 #: src/pv/loop.c:549
msgid "B/s" msgid "B/s"
msgstr "B/s" msgstr "B/s"
#: src/pv/display.c:901 src/pv/display.c:905 #: src/pv/display.c:904 src/pv/display.c:908
msgid "ETA" msgid "ETA"
msgstr "ETA" msgstr "ETA"
#: src/pv/display.c:971 #: src/pv/display.c:974
msgid "FIN" msgid "FIN"
msgstr "FIN" msgstr "FIN"
@@ -467,11 +475,11 @@ msgstr "oran min/ortalama/maks/standart sapma"
msgid "rate not measured" msgid "rate not measured"
msgstr "oran ölçülmedi" msgstr "oran ölçülmedi"
#: src/pv/loop.c:766 src/pv/loop.c:817 src/pv/loop.c:858 src/pv/watchpid.c:99 #: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128 #: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192 #: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
#: src/pv/watchpid.c:202 src/pv/watchpid.c:293 src/pv/watchpid.c:301 #: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
#: src/pv/watchpid.c:377 src/pv/watchpid.c:398 #: src/pv/watchpid.c:384 src/pv/watchpid.c:405
msgid "pid" msgid "pid"
msgstr "pid" msgstr "pid"
@@ -479,7 +487,7 @@ msgstr "pid"
msgid "history structure allocation failed" msgid "history structure allocation failed"
msgstr "geçmiş yapısı tahsisi başarısız oldu" msgstr "geçmiş yapısı tahsisi başarısız oldu"
#: src/pv/state.c:509 src/pv/state.c:520 #: src/pv/state.c:572 src/pv/state.c:583
msgid "file list allocation failed" msgid "file list allocation failed"
msgstr "dosya listesi tahsisi başarısız oldu" msgstr "dosya listesi tahsisi başarısız oldu"
-2
View File
@@ -43,5 +43,3 @@ typedef bool _Bool;
# define true 1 # define true 1
# define __bool_true_false_are_defined 1 # define __bool_true_false_are_defined 1
#endif #endif
/* EOF */
+12
View File
@@ -91,6 +91,9 @@
/* Define to 1 if you have the <minix/config.h> header file. */ /* Define to 1 if you have the <minix/config.h> header file. */
#undef HAVE_MINIX_CONFIG_H #undef HAVE_MINIX_CONFIG_H
/* Define to 1 if you have the `mkdir' function. */
#undef HAVE_MKDIR
/* Define to 1 if you have the `nanosleep' function. */ /* Define to 1 if you have the `nanosleep' function. */
#undef HAVE_NANOSLEEP #undef HAVE_NANOSLEEP
@@ -109,6 +112,9 @@
/* Define to 1 if you have the `setlocale' function. */ /* Define to 1 if you have the `setlocale' function. */
#undef HAVE_SETLOCALE #undef HAVE_SETLOCALE
/* Define to 1 if you have the `setproctitle' function. */
#undef HAVE_SETPROCTITLE
/* Define to 1 if you have the `shmget' function. */ /* Define to 1 if you have the `shmget' function. */
#undef HAVE_SHMGET #undef HAVE_SHMGET
@@ -157,6 +163,9 @@
/* Define to 1 if `st_blksize' is a member of `struct stat'. */ /* Define to 1 if `st_blksize' is a member of `struct stat'. */
#undef HAVE_STRUCT_STAT_ST_BLKSIZE #undef HAVE_STRUCT_STAT_ST_BLKSIZE
/* Define to 1 if `st_rdev' is a member of `struct stat'. */
#undef HAVE_STRUCT_STAT_ST_RDEV
/* Define to 1 if you have the `sysconf' function. */ /* Define to 1 if you have the `sysconf' function. */
#undef HAVE_SYSCONF #undef HAVE_SYSCONF
@@ -223,6 +232,9 @@
/* Define to the version of this package. */ /* Define to the version of this package. */
#undef PACKAGE_VERSION #undef PACKAGE_VERSION
/* Signal handlers can determine the sending PID */
#undef SIGINFO_PROVIDES_PID
/* Define to 1 if all of the C90 standard headers exist (not just the ones /* Define to 1 if all of the C90 standard headers exist (not just the ones
required in a freestanding environment). This macro is provided for required in a freestanding environment). This macro is provided for
backward compatibility; new code need not use it. */ backward compatibility; new code need not use it. */
+2 -3
View File
@@ -37,13 +37,14 @@ struct opts_s {
/*@keep@*/ /*@null@*/ char *format; /* output format, if any */ /*@keep@*/ /*@null@*/ char *format; /* output format, if any */
/*@keep@*/ /*@null@*/ char *pidfile; /* PID file, if any */ /*@keep@*/ /*@null@*/ char *pidfile; /* PID file, if any */
/*@keep@*/ /*@null@*/ char *store_and_forward_file; /* store and forward file, if any */ /*@keep@*/ /*@null@*/ char *store_and_forward_file; /* store and forward file, if any */
/*@keep@*/ /*@null@*/ char *extra_display; /* extra display specifier, if any */
/*@keep@*/ /*@null@*/ const char **argv; /* array of non-option arguments */ /*@keep@*/ /*@null@*/ const char **argv; /* array of non-option arguments */
size_t lastwritten; /* show N bytes last written */ size_t lastwritten; /* show N bytes last written */
off_t rate_limit; /* rate limit, in bytes per second */ off_t rate_limit; /* rate limit, in bytes per second */
size_t buffer_size; /* buffer size, in bytes (0=default) */ size_t buffer_size; /* buffer size, in bytes (0=default) */
off_t size; /* total size of data */ off_t size; /* total size of data */
off_t error_skip_block; /* skip block size, 0 for adaptive */ off_t error_skip_block; /* skip block size, 0 for adaptive */
unsigned int remote; /* PID of pv to update settings of */ pid_t remote; /* PID of pv to update settings of */
unsigned int skip_errors; /* skip read errors counter */ unsigned int skip_errors; /* skip read errors counter */
pid_t watch_pid; /* process to watch fds of */ pid_t watch_pid; /* process to watch fds of */
int watch_fd; /* fd to watch */ int watch_fd; /* fd to watch */
@@ -93,5 +94,3 @@ extern bool opts_add_file(opts_t, const char *);
#endif #endif
#endif /* _OPTIONS_H */ #endif /* _OPTIONS_H */
/* EOF */
+14 -6
View File
@@ -64,6 +64,9 @@ typedef enum {
#define PV_SIZEOF_FILE_FDPATH 4096 #define PV_SIZEOF_FILE_FDPATH 4096
#define PV_SIZEOF_DISPLAY_NAME 512 #define PV_SIZEOF_DISPLAY_NAME 512
#define PV_DISPLAY_WINDOWTITLE 1
#define PV_DISPLAY_PROCESSTITLE 2
/* /*
* Structure for data shared between multiple "pv -c" instances. * Structure for data shared between multiple "pv -c" instances.
@@ -107,6 +110,7 @@ struct pvstate_s {
double delay_start; /* delay before first display */ double delay_start; /* delay before first display */
/*@only@*/ /*@null@*/ char *name; /* display name */ /*@only@*/ /*@null@*/ char *name; /* display name */
/*@only@*/ /*@null@*/ char *format_string; /* output format string */ /*@only@*/ /*@null@*/ char *format_string; /* output format string */
/*@only@*/ /*@null@*/ char *extra_format_string; /* extra format string */
/*@null@*/ char *output_name; /* name of the output, for diagnostics */ /*@null@*/ char *output_name; /* name of the output, for diagnostics */
off_t error_skip_block; /* skip block size, 0 for adaptive */ off_t error_skip_block; /* skip block size, 0 for adaptive */
off_t rate_limit; /* rate limit, in bytes per second */ off_t rate_limit; /* rate limit, in bytes per second */
@@ -120,6 +124,7 @@ struct pvstate_s {
unsigned int history_interval; /* seconds between each average rate calc history entry */ unsigned int history_interval; /* seconds between each average rate calc history entry */
unsigned int width; /* screen width */ unsigned int width; /* screen width */
unsigned int height; /* screen height */ unsigned int height; /* screen height */
unsigned int extra_displays; /* bitmask of extra display destinations */
bool force; /* display even if not on terminal */ bool force; /* display even if not on terminal */
bool cursor; /* use cursor positioning */ bool cursor; /* use cursor positioning */
bool numeric; /* numeric output only */ bool numeric; /* numeric output only */
@@ -154,13 +159,13 @@ struct pvstate_s {
struct sigaction old_sigint; struct sigaction old_sigint;
struct sigaction old_sighup; struct sigaction old_sighup;
struct sigaction old_sigterm; struct sigaction old_sigterm;
#ifdef SA_SIGINFO #ifdef SIGINFO_PROVIDES_PID
struct sigaction old_sigusr2; struct sigaction old_sigusr2;
#endif #endif
struct sigaction old_sigalrm; struct sigaction old_sigalrm;
struct timespec tstp_time; /* see pv_sig_tstp() / __cont() */ struct timespec tstp_time; /* see pv_sig_tstp() / __cont() */
struct timespec toffset; /* total time spent stopped */ struct timespec toffset; /* total time spent stopped */
#ifdef SA_SIGINFO #ifdef SIGINFO_PROVIDES_PID
volatile sig_atomic_t rxusr2; /* whether SIGUSR2 was received */ volatile sig_atomic_t rxusr2; /* whether SIGUSR2 was received */
volatile pid_t sender; /* PID of sending process for SIGUSR2 */ volatile pid_t sender; /* PID of sending process for SIGUSR2 */
#endif #endif
@@ -182,7 +187,7 @@ struct pvstate_s {
/***************** /*****************
* Display state * * Display state *
*****************/ *****************/
struct { struct pvdisplay_s {
struct { /* format string broken into display components */ struct { /* format string broken into display components */
size_t str_start; /* for strings: start offset */ size_t str_start; /* for strings: start offset */
@@ -211,6 +216,9 @@ struct pvstate_s {
} display; } display;
/* Extra display for alternate outputs like a window title. */
struct pvdisplay_s extra_display;
/************************************ /************************************
* Calculated state of the transfer * * Calculated state of the transfer *
************************************/ ************************************/
@@ -358,11 +366,13 @@ struct pvwatchfd_s {
}; };
typedef struct pvwatchfd_s *pvwatchfd_t; typedef struct pvwatchfd_s *pvwatchfd_t;
typedef struct pvdisplay_s *pvdisplay_t;
void pv_error(pvstate_t, char *, ...); void pv_error(pvstate_t, char *, ...);
int pv_main_loop(pvstate_t); int pv_main_loop(pvstate_t);
void pv_calculate_transfer_rate(pvstate_t, bool); void pv_calculate_transfer_rate(pvstate_t, bool);
bool pv_format(pvstate_t, bool); bool pv_format(pvstate_t, /*@null@*/ const char *, pvdisplay_t, bool, bool);
void pv_display(pvstate_t, bool); void pv_display(pvstate_t, bool);
ssize_t pv_transfer(pvstate_t, int, bool *, bool *, off_t, long *); ssize_t pv_transfer(pvstate_t, int, bool *, bool *, off_t, long *);
int pv_next_file(pvstate_t, unsigned int, int); int pv_next_file(pvstate_t, unsigned int, int);
@@ -398,5 +408,3 @@ void pv_watchpid_setname(pvstate_t, pvwatchfd_t);
#endif #endif
#endif /* _PV_INTERNAL_H */ #endif /* _PV_INTERNAL_H */
/* EOF */
+7 -4
View File
@@ -210,6 +210,7 @@ extern void pv_state_width_set(pvstate_t, unsigned int, bool);
extern void pv_state_height_set(pvstate_t, unsigned int, bool); extern void pv_state_height_set(pvstate_t, unsigned int, bool);
extern void pv_state_name_set(pvstate_t, /*@null@*/ const char *); extern void pv_state_name_set(pvstate_t, /*@null@*/ const char *);
extern void pv_state_format_string_set(pvstate_t, /*@null@*/ const char *); extern void pv_state_format_string_set(pvstate_t, /*@null@*/ const char *);
extern void pv_state_extra_display_set(pvstate_t, /*@null@*/ const char *);
extern void pv_state_watch_pid_set(pvstate_t, pid_t); extern void pv_state_watch_pid_set(pvstate_t, pid_t);
extern void pv_state_watch_fd_set(pvstate_t, int); extern void pv_state_watch_fd_set(pvstate_t, int);
extern void pv_state_output_set(pvstate_t, int, const char *); extern void pv_state_output_set(pvstate_t, int, const char *);
@@ -237,7 +238,7 @@ extern off_t pv_calc_total_size(pvstate_t);
*/ */
extern void pv_sig_init(pvstate_t); extern void pv_sig_init(pvstate_t);
#ifdef SA_SIGINFO #ifdef SIGINFO_PROVIDES_PID
/* /*
* Return true if SIGUSR2 has been received, and indicate the sender. * Return true if SIGUSR2 has been received, and indicate the sender.
*/ */
@@ -269,6 +270,10 @@ extern void pv_sig_fini(pvstate_t);
*/ */
extern void pv_state_free(/*@only@*/ pvstate_t); extern void pv_state_free(/*@only@*/ pvstate_t);
#if ! HAVE_SETPROCTITLE
void initproctitle(int, char **);
void setproctitle(const char *, ...);
#endif
#ifdef ENABLE_DEBUGGING #ifdef ENABLE_DEBUGGING
# if __STDC_VERSION__ < 199901L && !defined(__func__) # if __STDC_VERSION__ < 199901L && !defined(__func__)
@@ -280,7 +285,7 @@ extern void pv_state_free(/*@only@*/ pvstate_t);
# endif # endif
# define debug(x,...) debugging_output(__func__, __FILE__, __LINE__, x, __VA_ARGS__) # define debug(x,...) debugging_output(__func__, __FILE__, __LINE__, x, __VA_ARGS__)
#else #else
# define debug(x,...) do { } while (0) # define debug(x,...) /*@-noeffect@*/ do { } while (0) /*@+noeffect@*/
#endif #endif
/* /*
@@ -299,5 +304,3 @@ void debugging_output(const char *, const char *, int, const char *, ...);
#endif #endif
#endif /* _PV_H */ #endif /* _PV_H */
/* EOF */
+5 -7
View File
@@ -101,7 +101,7 @@ void debugging_output(const char *function, const char *file, int line, const ch
/* /*
* Stub debugging destination function. * Stub debugging destination function.
*/ */
void debugging_output_destination( __attribute__((unused)) void debugging_output_destination( /*@unused@ */ __attribute__((unused))
const char *filename) const char *filename)
{ {
} }
@@ -109,14 +109,12 @@ void debugging_output_destination( __attribute__((unused))
/* /*
* Stub debugging output function. * Stub debugging output function.
*/ */
void debugging_output( __attribute__((unused)) void debugging_output( /*@unused@ */ __attribute__((unused))
const char *function, __attribute__((unused)) const char *function, /*@unused@ */ __attribute__((unused))
const char *file, __attribute__((unused)) const char *file, /*@unused@ */ __attribute__((unused))
int line, __attribute__((unused)) int line, /*@unused@ */ __attribute__((unused))
const char *format, ...) const char *format, ...)
{ {
} }
#endif /* ENABLE_DEBUGGING */ #endif /* ENABLE_DEBUGGING */
/* EOF */
+20 -21
View File
@@ -298,18 +298,9 @@ void display_help(void)
{ "-a", "--average-rate", NULL, { "-a", "--average-rate", NULL,
N_("show data transfer average rate counter"), N_("show data transfer average rate counter"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
{ "-m", "--average-rate-window", N_("SEC"),
N_("compute average rate over past SEC seconds (default 30s)"),
{ 0, 0, 0, 0} },
{ "-b", "--bytes", NULL, { "-b", "--bytes", NULL,
N_("show number of bytes transferred"), N_("show number of bytes transferred"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
{ "-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, { "-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} },
@@ -319,9 +310,6 @@ void display_help(void)
{ "-F", "--format", N_("FORMAT"), { "-F", "--format", N_("FORMAT"),
N_("set output format to FORMAT"), N_("set output format to FORMAT"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
{ "-v", "--stats", NULL,
N_("output transfer statistics at the end"),
{ 0, 0, 0, 0} },
{ "-n", "--numeric", NULL, { "-n", "--numeric", NULL,
N_("output percentages, not visual information"), N_("output percentages, not visual information"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
@@ -329,6 +317,12 @@ void display_help(void)
N_("do not output any transfer information at all"), N_("do not output any transfer information at all"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
{ "", NULL, NULL, NULL, { 0, 0, 0, 0} }, { "", NULL, NULL, NULL, { 0, 0, 0, 0} },
{ "-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} },
{ "-W", "--wait", NULL, { "-W", "--wait", NULL,
N_("display nothing until first byte transferred"), N_("display nothing until first byte transferred"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
@@ -350,6 +344,9 @@ void display_help(void)
{ "-i", "--interval", N_("SEC"), { "-i", "--interval", N_("SEC"),
N_("update every SEC seconds"), N_("update every SEC seconds"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
{ "-m", "--average-rate-window", N_("SEC"),
N_("compute average rate over past SEC seconds (default 30s)"),
{ 0, 0, 0, 0} },
{ "-w", "--width", N_("WIDTH"), { "-w", "--width", N_("WIDTH"),
N_("assume terminal is WIDTH characters wide"), N_("assume terminal is WIDTH characters wide"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
@@ -359,6 +356,12 @@ void display_help(void)
{ "-N", "--name", N_("NAME"), { "-N", "--name", N_("NAME"),
N_("prefix visual information with NAME"), N_("prefix visual information with NAME"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
{ "-x", "--extra-display", N_("SPEC"),
N_("also send progress to SPEC"),
{ 0, 0, 0, 0} },
{ "-v", "--stats", NULL,
N_("output transfer statistics at the end"),
{ 0, 0, 0, 0} },
{ "-f", "--force", NULL, { "-f", "--force", NULL,
N_("output even if standard error is not a terminal"), N_("output even if standard error is not a terminal"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
@@ -399,20 +402,18 @@ void display_help(void)
{ "-U", "--store-and-forward", N_("FILE"), { "-U", "--store-and-forward", N_("FILE"),
N_("write all input to FILE before writing to output"), N_("write all input to FILE before writing to output"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
#ifdef SA_SIGINFO { "-d", "--watchfd", N_("PID[:FD]"),
N_("watch file FD opened by process PID"),
{ 0, 0, 0, 0} },
#ifdef SIGINFO_PROVIDES_PID
{ "-R", "--remote", N_("PID"), { "-R", "--remote", N_("PID"),
N_("update settings of process PID"), N_("update settings of process PID"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
#endif /* SA_SIGINFO */ #endif /* SIGINFO_PROVIDES_PID */
{ "", NULL, NULL, NULL, { 0, 0, 0, 0} }, { "", NULL, NULL, NULL, { 0, 0, 0, 0} },
{ "-P", "--pidfile", N_("FILE"), { "-P", "--pidfile", N_("FILE"),
N_("save process ID in FILE"), N_("save process ID in FILE"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
{ "", NULL, NULL, NULL, { 0, 0, 0, 0} },
{ "-d", "--watchfd", N_("PID[:FD]"),
N_("watch file FD opened by process PID"),
{ 0, 0, 0, 0} },
{ "", NULL, NULL, NULL, { 0, 0, 0, 0} },
{ "-h", "--help", NULL, { "-h", "--help", NULL,
N_("show this help and exit"), N_("show this help and exit"),
{ 0, 0, 0, 0} }, { 0, 0, 0, 0} },
@@ -607,5 +608,3 @@ void display_help(void)
printf("\n"); printf("\n");
} }
/* EOF */
+26 -7
View File
@@ -26,7 +26,10 @@ void pv_remote_init(void);
void pv_remote_fini(void); void pv_remote_fini(void);
/* /*
* Write a PID file, returning nonzero on error. * Write a PID file, returning nonzero on error. Write it atomically, such
* that the file either exists and contains the PID, or is not updated at
* all. This is done by writing to a temporary file in the same directory
* first, and then renaming the temporary file to the target name.
*/ */
static int pv__write_pidfile(opts_t opts) static int pv__write_pidfile(opts_t opts)
{ {
@@ -35,14 +38,27 @@ static int pv__write_pidfile(opts_t opts)
int pidfile_tmp_fd; int pidfile_tmp_fd;
FILE *pidfile_tmp_fptr; FILE *pidfile_tmp_fptr;
mode_t prev_umask; mode_t prev_umask;
const char *pidfile_template = "%s.XXXXXX";
if (NULL == opts->pidfile) if (NULL == opts->pidfile)
return 0; return 0;
pidfile_tmp_bufsize = 16 + strlen(opts->pidfile); /* flawfinder: ignore */
/* /*
* flawfinder rationale: pidfile was supplied as an argument * The buffer needs to be long enough to hold the pidfile with the
* so we have to assume it is \0 terminated. * mkstemp template ".XXXXXX" after it. The "%s" of our
* pidfile_template adds 2 extra bytes to the length, of which we
* need 1 byte for the terminating \0, so we subtract 1 byte more to
* get the exact amount of space we need.
*/
pidfile_tmp_bufsize = strlen(pidfile_template) + strlen(opts->pidfile) - 1; /* flawfinder: ignore */
/*
* flawfinder rationale: flawfinder never likes strlen() in case
* it's called on a string that isn't \0 terminated. We have to use
* strlen() to find the length of opts->pidfile, so have to trust
* that the arguments in argv[] were \0 terminated. We can be sure
* that pidfile_template is \0 terminated because we've set it to a
* constant value. So we tell flawfinder to skip this check here.
*/ */
pidfile_tmp_name = malloc(pidfile_tmp_bufsize); pidfile_tmp_name = malloc(pidfile_tmp_bufsize);
if (NULL == pidfile_tmp_name) { if (NULL == pidfile_tmp_name) {
@@ -50,7 +66,7 @@ static int pv__write_pidfile(opts_t opts)
return PV_ERROREXIT_REMOTE_OR_PID; return PV_ERROREXIT_REMOTE_OR_PID;
} }
memset(pidfile_tmp_name, 0, pidfile_tmp_bufsize); memset(pidfile_tmp_name, 0, pidfile_tmp_bufsize);
(void) pv_snprintf(pidfile_tmp_name, pidfile_tmp_bufsize, "%s.XXXXXX", opts->pidfile); (void) pv_snprintf(pidfile_tmp_name, pidfile_tmp_bufsize, pidfile_template, opts->pidfile);
/*@-type@ *//* splint doesn't like mode_t */ /*@-type@ *//* splint doesn't like mode_t */
prev_umask = umask(0000); /* flawfinder: ignore */ prev_umask = umask(0000); /* flawfinder: ignore */
@@ -264,6 +280,10 @@ int main(int argc, char **argv)
int retcode = 0; int retcode = 0;
bool can_have_eta = true; bool can_have_eta = true;
#if ! HAVE_SETPROCTITLE
initproctitle(argc, argv);
#endif
#ifdef ENABLE_NLS #ifdef ENABLE_NLS
/* Initialise language translation. */ /* Initialise language translation. */
(void) setlocale(LC_ALL, ""); (void) setlocale(LC_ALL, "");
@@ -474,6 +494,7 @@ int main(int argc, char **argv)
pv_state_size_set(state, opts->size); pv_state_size_set(state, opts->size);
pv_state_name_set(state, opts->name); pv_state_name_set(state, opts->name);
pv_state_format_string_set(state, opts->format); pv_state_format_string_set(state, opts->format);
pv_state_extra_display_set(state, opts->extra_display);
pv_state_watch_pid_set(state, opts->watch_pid); pv_state_watch_pid_set(state, opts->watch_pid);
pv_state_watch_fd_set(state, opts->watch_fd); pv_state_watch_fd_set(state, opts->watch_fd);
pv_state_average_rate_window_set(state, opts->average_rate_window); pv_state_average_rate_window_set(state, opts->average_rate_window);
@@ -524,5 +545,3 @@ int main(int argc, char **argv)
return retcode; return retcode;
} }
/* EOF */
+15 -4
View File
@@ -19,10 +19,12 @@
#include <sys/sysmacros.h> #include <sys/sysmacros.h>
#ifdef major #ifdef major
#ifdef minor #ifdef minor
#ifdef HAVE_STRUCT_STAT_ST_RDEV
#define CAN_BUILD_SYSFS_FILENAME 1 #define CAN_BUILD_SYSFS_FILENAME 1
#endif #endif
#endif #endif
#endif #endif
#endif
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#ifdef HAVE_GETOPT_H #ifdef HAVE_GETOPT_H
@@ -57,6 +59,8 @@ void opts_free( /*@only@ */ opts_t opts)
free(opts->output); free(opts->output);
if (NULL != opts->store_and_forward_file) if (NULL != opts->store_and_forward_file)
free(opts->store_and_forward_file); free(opts->store_and_forward_file);
if (NULL != opts->extra_display)
free(opts->extra_display);
if (NULL != opts->argv) if (NULL != opts->argv)
free(opts->argv); free(opts->argv);
/*@+keeptrans@ */ /*@+keeptrans@ */
@@ -293,6 +297,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
{ "height", 1, NULL, (int) 'H' }, { "height", 1, NULL, (int) 'H' },
{ "name", 1, NULL, (int) 'N' }, { "name", 1, NULL, (int) 'N' },
{ "format", 1, NULL, (int) 'F' }, { "format", 1, NULL, (int) 'F' },
{ "extra-display", 1, NULL, (int) 'x' },
{ "stats", 0, NULL, (int) 'v' }, { "stats", 0, NULL, (int) 'v' },
{ "rate-limit", 1, NULL, (int) 'L' }, { "rate-limit", 1, NULL, (int) 'L' },
{ "buffer-size", 1, NULL, (int) 'B' }, { "buffer-size", 1, NULL, (int) 'B' },
@@ -317,7 +322,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 = "hVpteIrab8kTA:fvnqcWD:s:gl0i:w:H:N:F:L:B:CEZ:SYKXU:R:P:d:m:o:" char *short_options = "hVpteIrab8kTA:fvnqcWD:s:gl0i:w:H:N:F:x:L:B:CEZ:SYKXU:R:P:d:m:o:"
#ifdef ENABLE_DEBUGGING #ifdef ENABLE_DEBUGGING
"!:" "!:"
#endif #endif
@@ -617,7 +622,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
} }
break; break;
case 'R': case 'R':
opts->remote = pv_getnum_count(optarg, false); opts->remote = (pid_t) pv_getnum_count(optarg, false);
break; break;
case 'P': case 'P':
opts->pidfile = pv_strdup(optarg); opts->pidfile = pv_strdup(optarg);
@@ -635,6 +640,14 @@ opts_t opts_parse(unsigned int argc, char **argv)
return NULL; return NULL;
} }
break; break;
case 'x':
opts->extra_display = pv_strdup(optarg);
if (NULL == opts->extra_display) {
fprintf(stderr, "%s: -x: %s\n", opts->program_name, strerror(errno));
opts_free(opts);
return NULL;
}
break;
case 'd': case 'd':
parse_pid = 0; parse_pid = 0;
parse_fd = -1; parse_fd = -1;
@@ -773,5 +786,3 @@ opts_t opts_parse(unsigned int argc, char **argv)
return opts; return opts;
} }
/* EOF */
+8 -8
View File
@@ -21,7 +21,7 @@
#include <sys/time.h> #include <sys/time.h>
#include <sys/stat.h> #include <sys/stat.h>
#ifdef SA_SIGINFO #ifdef SIGINFO_PROVIDES_PID
void pv_error(pvstate_t, char *, ...); void pv_error(pvstate_t, char *, ...);
struct remote_msg { struct remote_msg {
@@ -57,10 +57,12 @@ struct remote_msg {
* file associated with a particular process ID; it will be opened for * file associated with a particular process ID; it will be opened for
* writing if "sender" is true. Returns NULL on error. * writing if "sender" is true. Returns NULL on error.
*/ */
/*@null@ */
/*@dependent@ */
static FILE *pv__control_file(char *filename, size_t bufsize, pid_t control_pid, bool sender) static FILE *pv__control_file(char *filename, size_t bufsize, pid_t control_pid, bool sender)
{ {
int open_flags, open_mode, control_fd; int open_flags, open_mode, control_fd;
FILE *control_fptr; /*@dependent@ */ FILE *control_fptr = NULL;
open_flags = O_RDONLY; open_flags = O_RDONLY;
#ifdef O_NOFOLLOW #ifdef O_NOFOLLOW
@@ -216,7 +218,7 @@ int pv_remote_set(opts_t opts, pvstate_t state)
* Get the filename and file stream to use for remote control. * Get the filename and file stream to use for remote control.
*/ */
memset(control_filename, 0, sizeof(control_filename)); memset(control_filename, 0, sizeof(control_filename));
control_fptr = pv__control_file(control_filename, sizeof(control_filename), getpid(), true); control_fptr = pv__control_file(control_filename, sizeof(control_filename), (pid_t) getpid(), true);
if (NULL == control_fptr) { if (NULL == control_fptr) {
pv_error(state, "%s", strerror(errno)); pv_error(state, "%s", strerror(errno));
return PV_ERROREXIT_REMOTE_OR_PID; return PV_ERROREXIT_REMOTE_OR_PID;
@@ -331,7 +333,7 @@ void pv_remote_check(pvstate_t state)
memset(control_filename, 0, sizeof(control_filename)); memset(control_filename, 0, sizeof(control_filename));
control_fptr = pv__control_file(control_filename, sizeof(control_filename), signal_sender, false); control_fptr = pv__control_file(control_filename, sizeof(control_filename), signal_sender, false);
if (NULL == control_fptr) { if (NULL == control_fptr) {
pv_error(state, "%s", strerror(errno)); pv_error(state, "%s: %s", control_filename, strerror(errno));
return; return;
} }
@@ -405,10 +407,10 @@ void pv_remote_fini(void)
{ {
} }
#else /* !SA_SIGINFO */ #else /* !SIGINFO_PROVIDES_PID */
/* /*
* Dummy stubs for remote control when we don't have SA_SIGINFO. * Dummy stubs for remote control when we don't have SIGINFO_PROVIDES_PID.
*/ */
void pv_remote_init(void) void pv_remote_init(void)
{ {
@@ -432,5 +434,3 @@ int pv_remote_set( /*@unused@ */
} }
#endif /* SA_SIGINFO */ #endif /* SA_SIGINFO */
/* EOF */
-2
View File
@@ -31,5 +31,3 @@ void display_version(void)
/* Project web site link */ /* Project web site link */
printf("\n%s: <%s>\n", _("Project web site"), PACKAGE_URL); printf("\n%s: <%s>\n", _("Project web site"), PACKAGE_URL);
} }
/* EOF */
-2
View File
@@ -169,5 +169,3 @@ void pv_calculate_transfer_rate(pvstate_t state, bool final)
if (state->calc.percentage > 100000) if (state->calc.percentage > 100000)
state->calc.percentage = 100000; state->calc.percentage = 100000;
} }
/* EOF */
-2
View File
@@ -689,5 +689,3 @@ void pv_crs_fini(pvstate_t state)
(void) remove(state->cursor.lock_file); (void) remove(state->cursor.lock_file);
} }
} }
/* EOF */
+136 -100
View File
@@ -428,29 +428,31 @@ static void pv__sizestr(char *buffer, size_t bufsize, char *format,
/* /*
* Initialise the output format structure, based on the current options. * Initialise the output format structure, based on the current options.
*/ */
static void pv__format_init(pvstate_t state) static void pv__format_init(pvstate_t state, /*@null@ */ const char *format_supplied, pvdisplay_t display)
{ {
const char *formatstr; const char *format_used;
size_t strpos; size_t strpos;
size_t segment; size_t segment;
if (NULL == state) if (NULL == state)
return; return;
if (NULL == display)
return;
state->display.format_segment_count = 0; display->format_segment_count = 0;
memset(state->display.format, 0, PV_FORMAT_ARRAY_MAX * sizeof(state->display.format[0])); memset(display->format, 0, PV_FORMAT_ARRAY_MAX * sizeof(display->format[0]));
memset(state->display.component, 0, PV_COMPONENT__MAX * sizeof(state->display.component[0])); memset(display->component, 0, PV_COMPONENT__MAX * sizeof(display->component[0]));
if (state->control.name) { if (state->control.name) {
(void) pv_snprintf(state->display.component[PV_COMPONENT_NAME].content, PV_SIZEOF_COMPONENT_STR, (void) pv_snprintf(display->component[PV_COMPONENT_NAME].content, PV_SIZEOF_COMPONENT_STR,
"%9.500s:", state->control.name); "%9.500s:", state->control.name);
state->display.component[PV_COMPONENT_NAME].length = strlen(state->display.component[PV_COMPONENT_NAME].content); /* flawfinder: ignore */ display->component[PV_COMPONENT_NAME].length = strlen(display->component[PV_COMPONENT_NAME].content); /* flawfinder: ignore */
/* flawfinder: content always bounded thanks to pv_snprintf(). */ /* flawfinder: content always bounded thanks to pv_snprintf(). */
} }
formatstr = state->control.format_string ? state->control.format_string : state->control.default_format; format_used = NULL == format_supplied ? state->control.default_format : format_supplied;
if (NULL == formatstr) if (NULL == format_used)
return; return;
/* /*
@@ -473,11 +475,11 @@ static void pv__format_init(pvstate_t state)
* of these segments together. * of these segments together.
*/ */
segment = 0; segment = 0;
for (strpos = 0; formatstr[strpos] != '\0' && segment < PV_FORMAT_ARRAY_MAX; strpos++, segment++) { for (strpos = 0; format_used[strpos] != '\0' && segment < PV_FORMAT_ARRAY_MAX; strpos++, segment++) {
pv_display_component seg_type; pv_display_component seg_type;
size_t str_start, str_length; size_t str_start, str_length;
if ('%' == formatstr[strpos]) { if ('%' == format_used[strpos]) {
unsigned long number_prefix; unsigned long number_prefix;
#if HAVE_STRTOUL #if HAVE_STRTOUL
char *number_end_ptr; char *number_end_ptr;
@@ -491,15 +493,15 @@ static void pv__format_init(pvstate_t state)
*/ */
#if HAVE_STRTOUL #if HAVE_STRTOUL
number_end_ptr = NULL; number_end_ptr = NULL;
number_prefix = strtoul(&(formatstr[strpos]), &number_end_ptr, 10); number_prefix = strtoul(&(format_used[strpos]), &number_end_ptr, 10);
if ((NULL == number_end_ptr) || (number_end_ptr[0] == '\0')) if ((NULL == number_end_ptr) || (number_end_ptr[0] == '\0'))
break; break;
if (number_end_ptr > &(formatstr[strpos])) if (number_end_ptr > &(format_used[strpos]))
strpos += (number_end_ptr - &(formatstr[strpos])); strpos += (number_end_ptr - &(format_used[strpos]));
#else /* !HAVE_STRTOUL */ #else /* !HAVE_STRTOUL */
while (isdigit((int) (formatstr[strpos]))) { while (isdigit((int) (format_used[strpos]))) {
number_prefix = number_prefix * 10; number_prefix = number_prefix * 10;
number_prefix += formatstr[strpos] - '0'; number_prefix += format_used[strpos] - '0';
strpos++; strpos++;
} }
#endif /* !HAVE_STRTOUL */ #endif /* !HAVE_STRTOUL */
@@ -508,7 +510,7 @@ static void pv__format_init(pvstate_t state)
str_start = 0; str_start = 0;
str_length = 0; str_length = 0;
switch (formatstr[strpos]) { switch (format_used[strpos]) {
case 'p': case 'p':
seg_type = PV_COMPONENT_PROGRESS; seg_type = PV_COMPONENT_PROGRESS;
break; break;
@@ -527,7 +529,7 @@ static void pv__format_init(pvstate_t state)
number_prefix = PV_SIZEOF_LASTOUTPUT_BUFFER; number_prefix = PV_SIZEOF_LASTOUTPUT_BUFFER;
if (number_prefix < 1) if (number_prefix < 1)
number_prefix = 1; number_prefix = 1;
state->display.lastoutput_length = (size_t) number_prefix; display->lastoutput_length = (size_t) number_prefix;
break; break;
case 'r': case 'r':
seg_type = PV_COMPONENT_RATE; seg_type = PV_COMPONENT_RATE;
@@ -567,12 +569,12 @@ static void pv__format_init(pvstate_t state)
const char *searchptr; const char *searchptr;
int foundlength; int foundlength;
searchptr = strchr(&(formatstr[strpos]), '%'); searchptr = strchr(&(format_used[strpos]), '%');
if (NULL == searchptr) { if (NULL == searchptr) {
foundlength = (int) strlen(&(formatstr[strpos])); /* flawfinder: ignore */ foundlength = (int) strlen(&(format_used[strpos])); /* flawfinder: ignore */
/* flawfinder: formatstr is explicitly \0-terminated. */ /* flawfinder: format_used is explicitly \0-terminated. */
} else { } else {
foundlength = searchptr - &(formatstr[strpos]); foundlength = searchptr - &(format_used[strpos]);
} }
seg_type = PV_COMPONENT_STRING; seg_type = PV_COMPONENT_STRING;
@@ -583,12 +585,12 @@ static void pv__format_init(pvstate_t state)
} }
if (seg_type != PV_COMPONENT_STRING) if (seg_type != PV_COMPONENT_STRING)
state->display.component[seg_type].required = true; display->component[seg_type].required = true;
state->display.format[segment].type = seg_type; display->format[segment].type = seg_type;
state->display.format[segment].str_start = str_start; display->format[segment].str_start = str_start;
state->display.format[segment].str_length = str_length; display->format[segment].str_length = str_length;
state->display.format_segment_count++; display->format_segment_count++;
} }
} }
@@ -604,44 +606,46 @@ static long bound_long(long x, long min, long max)
/* /*
* Update state->display.display_buffer with status information formatted * Update display->display_buffer with status information formatted
* according to the state held within the given structure. * according to the state held within the given structure.
* *
* If "reinitialise" is true, the format string is reparsed first. This
* should be true for the first call, and true whenever the format is
* changed.
*
* If "final" is true, this is the final update so the rate is given as an * If "final" is true, this is the final update so the rate is given as an
* an average over the whole transfer; otherwise the current rate is shown. * an average over the whole transfer; otherwise the current rate is shown.
* *
* Returns true if the display buffer can be used, false if not. * Returns true if the display buffer can be used, false if not.
* *
* When returning true, this function will have also set * When returning true, this function will have also set
* state->display.display_string_len to the length of the string in * display->display_string_len to the length of the string in
* state->display.display_buffer, in bytes. * display->display_buffer, in bytes.
*/ */
bool pv_format(pvstate_t state, bool final) bool pv_format(pvstate_t state, /*@null@ */ const char *format_supplied, pvdisplay_t display, bool reinitialise,
bool final)
{ {
long eta; long eta;
int static_portion_size; int static_portion_size;
pv_display_component component_type; pv_display_component component_type;
size_t segment; size_t segment;
size_t new_display_string_len; size_t new_display_string_len;
const char *formatstr; const char *format_used;
pv__transfercount_t count_type; pv__transfercount_t count_type;
/* Quick safety check - state must exist. */ /* Quick safety check - state and display must exist. */
if (NULL == state) if (NULL == state)
return false; return false;
if (NULL == display)
return false;
/* /* Reinitialise if we were asked to. */
* If the display options need reparsing, do so to generate new if (reinitialise)
* formatting parameters. pv__format_init(state, format_supplied, display);
*/
if (0 != state->flag.reparse_display) {
pv__format_init(state);
state->flag.reparse_display = 0;
}
/* The format string is needed for the static segments. */ /* The format string is needed for the static segments. */
formatstr = state->control.format_string ? state->control.format_string : state->control.default_format; format_used = NULL == format_supplied ? state->control.default_format : format_supplied;
if (NULL == formatstr) if (NULL == format_used)
return false; return false;
/* Determine the type of thing being counted for transfer, rate, etc. */ /* Determine the type of thing being counted for transfer, rate, etc. */
@@ -654,17 +658,16 @@ bool pv_format(pvstate_t state, bool final)
/* /*
* Reallocate output buffer if width changes. * Reallocate output buffer if width changes.
*/ */
if (state->display.display_buffer != NULL if (display->display_buffer != NULL && display->display_buffer_size < (size_t) ((state->control.width * 2))) {
&& state->display.display_buffer_size < (size_t) ((state->control.width * 2))) { free(display->display_buffer);
free(state->display.display_buffer); display->display_buffer = NULL;
state->display.display_buffer = NULL; display->display_buffer_size = 0;
state->display.display_buffer_size = 0;
} }
/* /*
* Allocate output buffer if there isn't one. * Allocate output buffer if there isn't one.
*/ */
if (NULL == state->display.display_buffer) { if (NULL == display->display_buffer) {
char *new_buffer; char *new_buffer;
size_t new_size; size_t new_size;
@@ -677,13 +680,13 @@ bool pv_format(pvstate_t state, bool final)
if (NULL == new_buffer) { if (NULL == new_buffer) {
pv_error(state, "%s: %s", _("buffer allocation failed"), strerror(errno)); pv_error(state, "%s: %s", _("buffer allocation failed"), strerror(errno));
state->status.exit_status |= PV_ERROREXIT_MEMORY; state->status.exit_status |= PV_ERROREXIT_MEMORY;
state->display.display_buffer = NULL; display->display_buffer = NULL;
return false; return false;
} }
state->display.display_buffer = new_buffer; display->display_buffer = new_buffer;
state->display.display_buffer_size = new_size; display->display_buffer_size = new_size;
state->display.display_buffer[0] = '\0'; display->display_buffer[0] = '\0';
} }
/* /*
@@ -713,14 +716,14 @@ bool pv_format(pvstate_t state, bool final)
show_percentage = true; show_percentage = true;
msg_timer[0] = '\0'; msg_timer[0] = '\0';
if (state->display.component[PV_COMPONENT_TIMER].required) { if (display->component[PV_COMPONENT_TIMER].required) {
(void) pv_snprintf(msg_timer, sizeof(msg_timer), "%s%.4Lf", first_item ? "" : " ", (void) pv_snprintf(msg_timer, sizeof(msg_timer), "%s%.4Lf", first_item ? "" : " ",
state->transfer.elapsed_seconds); state->transfer.elapsed_seconds);
first_item = false; first_item = false;
} }
msg_bytes[0] = '\0'; msg_bytes[0] = '\0';
if (state->display.component[PV_COMPONENT_BYTES].required) { if (display->component[PV_COMPONENT_BYTES].required) {
(void) pv_snprintf(msg_bytes, sizeof(msg_bytes), (void) pv_snprintf(msg_bytes, sizeof(msg_bytes),
"%s%lld", first_item ? "" : " ", "%s%lld", first_item ? "" : " ",
(long long) ((state->control.bits ? 8 : 1) * state->transfer.transferred)); (long long) ((state->control.bits ? 8 : 1) * state->transfer.transferred));
@@ -729,7 +732,7 @@ bool pv_format(pvstate_t state, bool final)
} }
msg_rate[0] = '\0'; msg_rate[0] = '\0';
if (state->display.component[PV_COMPONENT_RATE].required) { if (display->component[PV_COMPONENT_RATE].required) {
(void) pv_snprintf(msg_rate, sizeof(msg_rate), (void) pv_snprintf(msg_rate, sizeof(msg_rate),
"%s%.4Lf", first_item ? "" : " ", "%s%.4Lf", first_item ? "" : " ",
((state->control.bits ? 8.0 : 1.0) * state->calc.transfer_rate)); ((state->control.bits ? 8.0 : 1.0) * state->calc.transfer_rate));
@@ -744,11 +747,11 @@ bool pv_format(pvstate_t state, bool final)
first_item = false; first_item = false;
} }
(void) pv_snprintf(state->display.display_buffer, (void) pv_snprintf(display->display_buffer,
state->display.display_buffer_size, "%.39s%.39s%.39s%.39s\n", msg_timer, msg_bytes, display->display_buffer_size, "%.39s%.39s%.39s%.39s\n", msg_timer, msg_bytes,
msg_rate, msg_percent); msg_rate, msg_percent);
state->display.display_string_len = strlen(state->display.display_buffer); /* flawfinder: ignore */ display->display_string_len = strlen(display->display_buffer); /* flawfinder: ignore */
/* flawfinder: always \0 terminated by pv_snprintf(). */ /* flawfinder: always \0 terminated by pv_snprintf(). */
return true; return true;
@@ -771,7 +774,7 @@ bool pv_format(pvstate_t state, bool final)
struct tm *time_ptr; struct tm *time_ptr;
char *time_format; char *time_format;
if (!state->display.component[component_type].required) if (!display->component[component_type].required)
continue; continue;
/* /*
@@ -781,12 +784,12 @@ bool pv_format(pvstate_t state, bool final)
*/ */
if (state->control.size < 1 if (state->control.size < 1
&& ((component_type == PV_COMPONENT_ETA) || (component_type == PV_COMPONENT_FINETA))) { && ((component_type == PV_COMPONENT_ETA) || (component_type == PV_COMPONENT_FINETA))) {
state->display.component[component_type].content[0] = '\0'; display->component[component_type].content[0] = '\0';
state->display.component[component_type].length = 0; display->component[component_type].length = 0;
continue; continue;
} }
component_content = state->display.component[component_type].content; component_content = display->component[component_type].content;
component_content[0] = '\0'; component_content[0] = '\0';
component_buf_size = PV_SIZEOF_COMPONENT_STR; component_buf_size = PV_SIZEOF_COMPONENT_STR;
@@ -879,8 +882,8 @@ bool pv_format(pvstate_t state, bool final)
case PV_COMPONENT_ETA: case PV_COMPONENT_ETA:
/* Estimated time remaining until completion - if size is known. */ /* Estimated time remaining until completion - if size is known. */
eta = eta =
pv__seconds_remaining((state->transfer.transferred - state->display.initial_offset), pv__seconds_remaining((state->transfer.transferred - display->initial_offset),
state->control.size - state->display.initial_offset, state->control.size - display->initial_offset,
state->calc.current_avg_rate); state->calc.current_avg_rate);
/* /*
@@ -934,8 +937,8 @@ bool pv_format(pvstate_t state, bool final)
*/ */
eta = eta =
pv__seconds_remaining(state->transfer.transferred - state->display.initial_offset, pv__seconds_remaining(state->transfer.transferred - display->initial_offset,
state->control.size - state->display.initial_offset, state->control.size - display->initial_offset,
state->calc.current_avg_rate); state->calc.current_avg_rate);
/* /*
@@ -1012,9 +1015,9 @@ bool pv_format(pvstate_t state, bool final)
case PV_COMPONENT_OUTPUTBUF: case PV_COMPONENT_OUTPUTBUF:
/* Recently transferred bytes. */ /* Recently transferred bytes. */
for (buf_idx = 0; buf_idx < state->display.lastoutput_length; buf_idx++) { for (buf_idx = 0; buf_idx < display->lastoutput_length; buf_idx++) {
int display_char; int display_char;
display_char = (int) (state->display.lastoutput_buffer[buf_idx]); display_char = (int) (display->lastoutput_buffer[buf_idx]);
component_content[buf_idx] = isprint(display_char) ? (char) display_char : '.'; component_content[buf_idx] = isprint(display_char) ? (char) display_char : '.';
} }
component_content[buf_idx] = '\0'; component_content[buf_idx] = '\0';
@@ -1025,7 +1028,7 @@ bool pv_format(pvstate_t state, bool final)
} }
/* Record the string length for this component. */ /* Record the string length for this component. */
state->display.component[component_type].length = strlen(component_content); /* flawfinder: ignore */ display->component[component_type].length = strlen(component_content); /* flawfinder: ignore */
/* flawfinder: always bounded by \0 either explicitly or by pv_snprintf(). */ /* flawfinder: always bounded by \0 either explicitly or by pv_snprintf(). */
} }
@@ -1036,11 +1039,11 @@ bool pv_format(pvstate_t state, bool final)
* (i.e. the progress bar). * (i.e. the progress bar).
*/ */
static_portion_size = 0; static_portion_size = 0;
for (segment = 0; segment < state->display.format_segment_count; segment++) { for (segment = 0; segment < display->format_segment_count; segment++) {
if (state->display.format[segment].type == PV_COMPONENT_STRING) { if (display->format[segment].type == PV_COMPONENT_STRING) {
static_portion_size += state->display.format[segment].str_length; static_portion_size += display->format[segment].str_length;
} else if (state->display.format[segment].type != PV_COMPONENT_PROGRESS) { } else if (display->format[segment].type != PV_COMPONENT_PROGRESS) {
static_portion_size += state->display.component[state->display.format[segment].type].length; static_portion_size += display->component[display->format[segment].type].length;
} }
} }
@@ -1049,13 +1052,13 @@ bool pv_format(pvstate_t state, bool final)
/* /*
* Assemble the progress bar now we know how big it should be. * Assemble the progress bar now we know how big it should be.
*/ */
if (state->display.component[PV_COMPONENT_PROGRESS].required) { if (display->component[PV_COMPONENT_PROGRESS].required) {
char *component_content; char *component_content;
size_t component_buf_size; size_t component_buf_size;
char after_bar[32]; /* flawfinder: ignore - only populated by pv_snprintf(). */ char after_bar[32]; /* flawfinder: ignore - only populated by pv_snprintf(). */
int available_width, bar_length, pad_count; int available_width, bar_length, pad_count;
component_content = state->display.component[PV_COMPONENT_PROGRESS].content; component_content = display->component[PV_COMPONENT_PROGRESS].content;
component_content[0] = '\0'; component_content[0] = '\0';
component_buf_size = PV_SIZEOF_COMPONENT_STR; component_buf_size = PV_SIZEOF_COMPONENT_STR;
@@ -1179,16 +1182,16 @@ bool pv_format(pvstate_t state, bool final)
} }
/* Record the string length for this component. */ /* Record the string length for this component. */
state->display.component[PV_COMPONENT_PROGRESS].length = strlen(component_content); /* flawfinder: ignore */ display->component[PV_COMPONENT_PROGRESS].length = strlen(component_content); /* flawfinder: ignore */
/* flawfinder: always bounded with \0 by pv_strlcat(). */ /* flawfinder: always bounded with \0 by pv_strlcat(). */
/* /*
* If the progress bar won't fit, drop it. * If the progress bar won't fit, drop it.
*/ */
if ((unsigned int) (state->display.component[PV_COMPONENT_PROGRESS].length + static_portion_size) > if ((unsigned int) (display->component[PV_COMPONENT_PROGRESS].length + static_portion_size) >
state->control.width) { state->control.width) {
component_content[0] = '\0'; component_content[0] = '\0';
state->display.component[PV_COMPONENT_PROGRESS].length = 0; display->component[PV_COMPONENT_PROGRESS].length = 0;
} }
} }
@@ -1196,18 +1199,18 @@ bool pv_format(pvstate_t state, bool final)
* We can now build the output string using the format structure. * We can now build the output string using the format structure.
*/ */
memset(state->display.display_buffer, 0, state->display.display_buffer_size); memset(display->display_buffer, 0, display->display_buffer_size);
new_display_string_len = 0; new_display_string_len = 0;
for (segment = 0; segment < state->display.format_segment_count; segment++) { for (segment = 0; segment < display->format_segment_count; segment++) {
const char *segment_content; const char *segment_content;
size_t segment_length; size_t segment_length;
if (state->display.format[segment].type == PV_COMPONENT_STRING) { if (display->format[segment].type == PV_COMPONENT_STRING) {
segment_content = &(formatstr[state->display.format[segment].str_start]); segment_content = &(format_used[display->format[segment].str_start]);
segment_length = state->display.format[segment].str_length; segment_length = display->format[segment].str_length;
} else { } else {
segment_content = state->display.component[state->display.format[segment].type].content; segment_content = display->component[display->format[segment].type].content;
segment_length = state->display.component[state->display.format[segment].type].length; segment_length = display->component[display->format[segment].type].length;
} }
/* Skip empty segments. */ /* Skip empty segments. */
@@ -1218,8 +1221,8 @@ bool pv_format(pvstate_t state, bool final)
* Truncate the segment if it would make the display string * Truncate the segment if it would make the display string
* overflow the buffer. * overflow the buffer.
*/ */
if (segment_length + new_display_string_len > state->display.display_buffer_size - 2) if (segment_length + new_display_string_len > display->display_buffer_size - 2)
segment_length = state->display.display_buffer_size - new_display_string_len - 2; segment_length = display->display_buffer_size - new_display_string_len - 2;
if (segment_length < 1) if (segment_length < 1)
break; break;
@@ -1228,7 +1231,7 @@ bool pv_format(pvstate_t state, bool final)
break; break;
/* Append the segment to the output string. */ /* Append the segment to the output string. */
strncat(state->display.display_buffer, segment_content, segment_length); /* flawfinder: ignore */ strncat(display->display_buffer, segment_content, segment_length); /* flawfinder: ignore */
/* flawfinder: length is checked above, and buffer is \0 terminated already. */ /* flawfinder: length is checked above, and buffer is \0 terminated already. */
new_display_string_len += segment_length; new_display_string_len += segment_length;
@@ -1237,7 +1240,7 @@ bool pv_format(pvstate_t state, bool final)
debug("%s: %d", "display string length counted by format segments", (int) new_display_string_len); debug("%s: %d", "display string length counted by format segments", (int) new_display_string_len);
/* Recalculate display string length with strlen() in case of miscounting. */ /* Recalculate display string length with strlen() in case of miscounting. */
new_display_string_len = strlen(state->display.display_buffer); /* flawfinder: ignore */ new_display_string_len = strlen(display->display_buffer); /* flawfinder: ignore */
/* flawfinder: \0 terminated by memset() above and then by segment bounds checking. */ /* flawfinder: \0 terminated by memset() above and then by segment bounds checking. */
debug("%s: %d", "display string length from strlen()", (int) new_display_string_len); debug("%s: %d", "display string length from strlen()", (int) new_display_string_len);
@@ -1245,12 +1248,12 @@ bool pv_format(pvstate_t state, bool final)
* If the size of our output shrinks, we need to keep appending * If the size of our output shrinks, we need to keep appending
* spaces at the end, so that we don't leave dangling bits behind. * spaces at the end, so that we don't leave dangling bits behind.
*/ */
if ((new_display_string_len < state->display.display_string_len) if ((new_display_string_len < display->display_string_len)
&& (state->control.width >= state->display.prev_screen_width)) { && (state->control.width >= display->prev_screen_width)) {
char spaces[32]; /* flawfinder: ignore - terminated, bounded */ char spaces[32]; /* flawfinder: ignore - terminated, bounded */
int spaces_to_add; int spaces_to_add;
spaces_to_add = (int) (state->display.display_string_len - new_display_string_len); spaces_to_add = (int) (display->display_string_len - new_display_string_len);
/* Upper boundary on number of spaces */ /* Upper boundary on number of spaces */
if (spaces_to_add > 15) { if (spaces_to_add > 15) {
spaces_to_add = 15; spaces_to_add = 15;
@@ -1260,11 +1263,11 @@ bool pv_format(pvstate_t state, bool final)
while (--spaces_to_add >= 0) { while (--spaces_to_add >= 0) {
spaces[spaces_to_add] = ' '; spaces[spaces_to_add] = ' ';
} }
(void) pv_strlcat(state->display.display_buffer, spaces, state->display.display_buffer_size); (void) pv_strlcat(display->display_buffer, spaces, display->display_buffer_size);
} }
state->display.display_string_len = new_display_string_len; display->display_string_len = new_display_string_len;
state->display.prev_screen_width = state->control.width; display->prev_screen_width = state->control.width;
return true; return true;
} }
@@ -1278,6 +1281,8 @@ bool pv_format(pvstate_t state, bool final)
*/ */
void pv_display(pvstate_t state, bool final) void pv_display(pvstate_t state, bool final)
{ {
bool reinitialise = false;
if (NULL == state) if (NULL == state)
return; return;
@@ -1285,9 +1290,23 @@ void pv_display(pvstate_t state, bool final)
pv_calculate_transfer_rate(state, final); pv_calculate_transfer_rate(state, final);
if (!pv_format(state, final)) /*
* If the display options need reparsing, do so to generate new
* formatting parameters.
*/
if (0 != state->flag.reparse_display) {
reinitialise = true;
state->flag.reparse_display = 0;
}
if (!pv_format(state, state->control.format_string, &(state->display), reinitialise, final))
return; return;
if (0 != state->control.extra_displays) {
if (!pv_format(state, state->control.extra_format_string, &(state->extra_display), reinitialise, final))
return;
}
if (NULL == state->display.display_buffer) if (NULL == state->display.display_buffer)
return; return;
@@ -1307,6 +1326,23 @@ void pv_display(pvstate_t state, bool final)
} }
debug("%s: [%s]", "display", state->display.display_buffer); debug("%s: [%s]", "display", state->display.display_buffer);
}
/* EOF */ if ((0 != (PV_DISPLAY_WINDOWTITLE & state->control.extra_displays))
&& (state->control.force || pv_in_foreground())
&& (NULL != state->extra_display.display_buffer)
) {
pv_tty_write(state, "\e]2;", 4);
pv_tty_write(state, state->extra_display.display_buffer, state->extra_display.display_string_len);
pv_tty_write(state, "\e\\", 2);
state->extra_display.display_visible = true;
debug("%s: [%s]", "windowtitle display", state->extra_display.display_buffer);
}
if ((0 != (PV_DISPLAY_PROCESSTITLE & state->control.extra_displays))
&& (NULL != state->extra_display.display_buffer)
) {
setproctitle("%s", state->extra_display.display_buffer);
state->extra_display.display_visible = true;
debug("%s: [%s]", "processtitle display", state->extra_display.display_buffer);
}
}
-2
View File
@@ -251,5 +251,3 @@ void pv_nanosleep(long long nanoseconds)
/*@+null@ *//* splint doesn't know about select() */ /*@+null@ *//* splint doesn't know about select() */
#endif #endif
} }
/* EOF */
-2
View File
@@ -447,5 +447,3 @@ int pv_next_file(pvstate_t state, unsigned int filenum, int oldfd)
/*@+onlytrans@ */ /*@+onlytrans@ */
/*@+observertrans@ */ /*@+observertrans@ */
} }
/* EOF */
+2 -2
View File
@@ -649,6 +649,7 @@ int pv_watchfd_loop(pvstate_t state)
state->display.initial_offset = position_now; state->display.initial_offset = position_now;
first_check = false; first_check = false;
} }
state->transfer.transferred = position_now;
state->transfer.total_written = position_now; state->transfer.total_written = position_now;
} }
@@ -955,6 +956,7 @@ int pv_watchpid_loop(pvstate_t state)
} }
if (NULL != info_array[idx].state) { if (NULL != info_array[idx].state) {
info_array[idx].state->transfer.transferred = position_now;
info_array[idx].state->transfer.total_written = position_now; info_array[idx].state->transfer.total_written = position_now;
pv_display(info_array[idx].state, false); pv_display(info_array[idx].state, false);
displayed_lines++; displayed_lines++;
@@ -1023,5 +1025,3 @@ int pv_watchpid_loop(pvstate_t state)
return 0; return 0;
} }
/* EOF */
-2
View File
@@ -295,5 +295,3 @@ int pv_percentage(off_t amount, const off_t total)
return (int) amount; return (int) amount;
} }
/* EOF */
+118
View File
@@ -0,0 +1,118 @@
/*
* Functions for setting the process title.
*
* Copyright 2024 Andrew Wood
*
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
*/
#include "config.h"
#include "pv.h"
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <unistd.h>
#if ! HAVE_SETPROCTITLE
extern char **environ;
/*@null@*/ static char **base_argv = NULL;
static size_t space_available = 0;
/*
* Assuming the environment comes after the command line arguments, we make
* a duplicate of the environment array and all its values, so we can use
* the space the environment used to occupy for the process title.
*
* The logic for this was derived from util-linux-ng.
*/
/*@-mustfreefresh@ */
/*@-nullstate@ */
void initproctitle(int argc, char **argv)
{
char **original_environment = environ;
char **new_environment;
size_t env_array_size, env_index;
/* Find the number of entries in the environment array. */
for (env_array_size = 0; environ[env_array_size] != NULL; env_array_size++)
continue;
/* Allocate a new environment array. */
new_environment = (char **) malloc(sizeof(char *) * (env_array_size + 1));
if (NULL == new_environment)
return;
/* Duplicate the strings in the environment. */
for (env_index = 0; original_environment[env_index] != NULL; env_index++) {
new_environment[env_index] = pv_strdup(original_environment[env_index]);
if (NULL == new_environment[env_index])
return;
}
new_environment[env_index] = NULL;
base_argv = argv;
/* Work out how much room we have. */
if (env_index > 0) {
/* From argv[0] to the end of the last environment value. */
space_available = (size_t)
(original_environment[env_index - 1] + strlen(original_environment[env_index - 1]) - argv[0]); /* flawfinder: ignore */
} else if (argc > 0) {
/* No environment; from argv[0] to the end of the last argument. */
space_available = (size_t) (argv[argc - 1] + strlen(argv[argc - 1]) - argv[0]); /* flawfinder: ignore */
}
/*
* flawfinder - we have to trust that the environment and argument
* strings are null-terminated, since that's what the OS is supposed
* to guarantee.
*/
environ = new_environment;
}
/*@+nullstate@ */
/*@+mustfreefresh@ */
/*
* Set the process title visible to ps(1), by overwriting argv[0] with the
* given printf() format string.
*/
void setproctitle(const char *format, ...)
{
char title[1024]; /* flawfinder: ignore */
size_t length;
va_list ap;
/* flawfinder - buffer is zeroed and users of it are bounded. */
if (NULL == base_argv)
return;
memset(title, 0, sizeof(title));
va_start(ap, format);
(void) vsnprintf(title, sizeof(title) - 1, format, ap); /* flawfinder: ignore */
va_end(ap);
/*
* flawfinder - the format is explicitly caller-supplied. Callers
* of this function are all passing fixed format strings and not
* user-supplied formats.
*/
length = strlen(title); /* flawfinder: ignore */
/* flawfinder - we left a byte at the end to force null-termination. */
if (length > space_available - 2)
length = space_available - 2;
(void) pv_snprintf(base_argv[0], space_available, "%s -- %s", PACKAGE_NAME, title);
if (space_available > length)
memset(base_argv[0] + length, 0, space_available - length);
}
#endif
+4 -6
View File
@@ -226,7 +226,7 @@ static void pv_sig_term( /*@unused@ */ __attribute__((unused))
} }
#ifdef SA_SIGINFO #ifdef SIGINFO_PROVIDES_PID
/* /*
* Handle a SIGUSR2 by setting a flag to say we received it, after recording * Handle a SIGUSR2 by setting a flag to say we received it, after recording
* the sending PID. * the sending PID.
@@ -239,8 +239,8 @@ static void pv_sig_usr2( /*@unused@ */ __attribute__((unused))
return; return;
if (NULL == info) if (NULL == info)
return; return;
pv_sig_state->signal.rxusr2 = 1;
pv_sig_state->signal.sender = info->si_pid; pv_sig_state->signal.sender = info->si_pid;
pv_sig_state->signal.rxusr2 = 1;
} }
@@ -375,7 +375,7 @@ void pv_sig_init(pvstate_t state)
sa.sa_flags = 0; sa.sa_flags = 0;
(void) sigaction(SIGTERM, &sa, &(pv_sig_state->signal.old_sigterm)); (void) sigaction(SIGTERM, &sa, &(pv_sig_state->signal.old_sigterm));
#ifdef SA_SIGINFO #ifdef SIGINFO_PROVIDES_PID
/* /*
* Handle SIGUSR2 by setting a flag to say the signal has been * Handle SIGUSR2 by setting a flag to say the signal has been
* received, and storing the sending process's PID. * received, and storing the sending process's PID.
@@ -431,7 +431,7 @@ void pv_sig_fini( /*@unused@ */ __attribute__((unused)) pvstate_t state)
(void) sigaction(SIGINT, &(pv_sig_state->signal.old_sigint), NULL); (void) sigaction(SIGINT, &(pv_sig_state->signal.old_sigint), NULL);
(void) sigaction(SIGHUP, &(pv_sig_state->signal.old_sighup), NULL); (void) sigaction(SIGHUP, &(pv_sig_state->signal.old_sighup), NULL);
(void) sigaction(SIGTERM, &(pv_sig_state->signal.old_sigterm), NULL); (void) sigaction(SIGTERM, &(pv_sig_state->signal.old_sigterm), NULL);
#ifdef SA_SIGINFO #ifdef SIGINFO_PROVIDES_PID
(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); (void) sigaction(SIGALRM, &(pv_sig_state->signal.old_sigalrm), NULL);
@@ -551,5 +551,3 @@ void pv_sig_checkbg(void)
pv_crs_needreinit(pv_sig_state); pv_crs_needreinit(pv_sig_state);
#endif #endif
} }
/* EOF */
+63 -2
View File
@@ -61,6 +61,9 @@ void pv_state_reset(pvstate_t state)
state->display.initial_offset = 0; state->display.initial_offset = 0;
state->display.display_visible = false; state->display.display_visible = false;
state->extra_display.initial_offset = 0;
state->extra_display.display_visible = false;
/* /*
* Explicitly set important floating point values to 0, as memset() * Explicitly set important floating point values to 0, as memset()
* is not recommended for this. * is not recommended for this.
@@ -190,6 +193,10 @@ void pv_state_free(pvstate_t state)
free(state->display.display_buffer); free(state->display.display_buffer);
state->display.display_buffer = NULL; state->display.display_buffer = NULL;
if (NULL != state->extra_display.display_buffer)
free(state->extra_display.display_buffer);
state->extra_display.display_buffer = NULL;
if (NULL != state->control.name) { if (NULL != state->control.name) {
free(state->control.name); free(state->control.name);
state->control.name = NULL; state->control.name = NULL;
@@ -200,6 +207,11 @@ void pv_state_free(pvstate_t state)
state->control.format_string = NULL; state->control.format_string = NULL;
} }
if (NULL != state->control.extra_format_string) {
free(state->control.extra_format_string);
state->control.extra_format_string = NULL;
}
/*@-keeptrans@ */ /*@-keeptrans@ */
if (NULL != state->transfer.transfer_buffer) if (NULL != state->transfer.transfer_buffer)
free(state->transfer.transfer_buffer); free(state->transfer.transfer_buffer);
@@ -427,6 +439,57 @@ void pv_state_format_string_set(pvstate_t state, /*@null@ */ const char *val)
state->control.format_string = pv_strdup(val); state->control.format_string = pv_strdup(val);
} }
void pv_state_extra_display_set(pvstate_t state, /*@null@ */ const char *val)
{
const char *word_start;
size_t offset;
if (NULL != state->control.extra_format_string) {
free(state->control.extra_format_string);
state->control.extra_format_string = NULL;
}
state->control.extra_displays = 0;
if (NULL == val)
return;
word_start = val;
while (NULL != word_start && '\0' != word_start[0]) {
offset = 0;
while ('\0' != word_start[offset] && ',' != word_start[offset] && ':' != word_start[offset])
offset++;
if (((11 == offset) && (0 == strncmp(word_start, "windowtitle", 11)))
|| ((6 == offset) && (0 == strncmp(word_start, "window", 6)))
) {
debug("%s", "enabling windowtitle");
state->control.extra_displays |= PV_DISPLAY_WINDOWTITLE;
} else if (((12 == offset) && (0 == strncmp(word_start, "processtitle", 12)))
|| ((9 == offset) && (0 == strncmp(word_start, "proctitle", 9)))
|| ((7 == offset) && (0 == strncmp(word_start, "process", 7)))
|| ((4 == offset) && (0 == strncmp(word_start, "proc", 4)))
) {
debug("%s", "enabling processtitle");
state->control.extra_displays |= PV_DISPLAY_PROCESSTITLE;
}
switch (word_start[offset]) {
case ',':
offset++;
break;
case ':':
offset++;
debug("%s: [%s]", "setting extra_format_string", word_start + offset);
state->control.extra_format_string = pv_strdup(word_start + offset);
word_start = NULL;
break;
default:
word_start = NULL;
break;
}
if (NULL != word_start)
word_start += offset;
}
}
void pv_state_watch_pid_set(pvstate_t state, pid_t val) void pv_state_watch_pid_set(pvstate_t state, pid_t val)
{ {
state->control.watch_pid = val; state->control.watch_pid = val;
@@ -527,5 +590,3 @@ void pv_state_inputfiles(pvstate_t state, unsigned int input_file_count, const c
/*@+nullstate@*/ /*@+nullstate@*/
/* splint: see unqualifiedtrans note by free() above. */ /* splint: see unqualifiedtrans note by free() above. */
/* EOF */
-2
View File
@@ -179,5 +179,3 @@ void *pv_memrchr(const void *buffer, int match, size_t length)
return NULL; return NULL;
#endif #endif
} }
/* EOF */
-2
View File
@@ -1182,5 +1182,3 @@ ssize_t pv_transfer(pvstate_t state, int fd, bool *eof_in, bool *eof_out, off_t
return state->transfer.written; return state->transfer.written;
} }
/* EOF */
+7 -2
View File
@@ -281,6 +281,13 @@ off_t pv_watchfd_position(pvwatchfd_t info)
(void) fclose(fptr); (void) fclose(fptr);
#endif #endif
/*
* This debugging line can be quite noisy - turned off for now,
* uncomment if needed.
*
* debug("pid:%d fd:%d position:%lld", (int) (info->watch_pid), info->watch_fd, position);
*/
return position; return position;
} }
@@ -645,5 +652,3 @@ void pv_watchpid_setname(pvstate_t state, pvwatchfd_t info)
debug("%s: %d: [%s]", "set name for fd", info->watch_fd, info->display_name); debug("%s: %d: [%s]", "set name for fd", info->watch_fd, info->display_name);
} }
/* EOF */
@@ -4,8 +4,8 @@
# 1MiB, described here: # 1MiB, described here:
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=586763 # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=586763
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
# Transfer 1500kB of data in a bursty fashion. # Transfer 1500kB of data in a bursty fashion.
# #
@@ -28,5 +28,3 @@ test "${lineLengthCount}" = "1" && exit 0
echo "variable line lengths detected" echo "variable line lengths detected"
tr '\r' '\n' < "${workFile1}" tr '\r' '\n' < "${workFile1}"
exit 1 exit 1
# EOF
@@ -4,7 +4,8 @@
# but for rate, not bytes transferred. # but for rate, not bytes transferred.
# Dummy assignments for "shellcheck". # Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${testSubject:?not set - call this from 'make check'}"
true "${workFile1:?not set - call this from 'make check'}"
# Transfer 1500kB of data in a bursty fashion. # Transfer 1500kB of data in a bursty fashion.
# #
@@ -29,5 +30,3 @@ test "${lineLengthCount}" = "1" && exit 0
echo "variable line lengths detected" echo "variable line lengths detected"
tr '\r' '\n' < "${workFile1}" tr '\r' '\n' < "${workFile1}"
exit 1 exit 1
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
# #
# Test that "make install" installs the expected minimum set of files. # Test that "make install" installs the expected minimum set of files.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
makeDir="${testSubject%/*}" makeDir="${testSubject%/*}"
if ! test -d "${makeDir}"; then if ! test -d "${makeDir}"; then
@@ -39,5 +39,3 @@ fi
rm -rf "${testInstallDir}" rm -rf "${testInstallDir}"
exit "${exitStatus}" exit "${exitStatus}"
# EOF
+2 -4
View File
@@ -3,8 +3,8 @@
# Check that the average transfer rate counter changes, but not more than it # Check that the average transfer rate counter changes, but not more than it
# should. # should.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
# Transfer 210 bytes as 100 bytes, a 1 second gap, 110 bytes, and another 1 # Transfer 210 bytes as 100 bytes, a 1 second gap, 110 bytes, and another 1
# second gap. # second gap.
@@ -27,5 +27,3 @@ test "${lineCount}" -lt 2 && exit 0
echo "average rate varied more than expected" echo "average rate varied more than expected"
tr '\r' '\n' < "${workFile1}" tr '\r' '\n' < "${workFile1}"
exit 1 exit 1
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
# #
# Check that the byte counter counts in bits when --bits is selected. # Check that the byte counter counts in bits when --bits is selected.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
dd if=/dev/zero bs=100 count=1 2>/dev/null \ dd if=/dev/zero bs=100 count=1 2>/dev/null \
| "${testSubject}" -f -b -8 >/dev/null 2>"${workFile1}" | "${testSubject}" -f -b -8 >/dev/null 2>"${workFile1}"
@@ -13,5 +13,3 @@ test "${counterValue}" = "800b" && exit 0
echo "unexpected bit counter value: ${counterValue}" echo "unexpected bit counter value: ${counterValue}"
exit 1 exit 1
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
# #
# Check that "--buffer-percent" displays correctly. # Check that "--buffer-percent" displays correctly.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
# The output should show 100% and 0% as the buffer initially fills up due to # The output should show 100% and 0% as the buffer initially fills up due to
# there being nowhere to write it to, and then empties. # there being nowhere to write it to, and then empties.
@@ -17,5 +17,3 @@ test "${differentLines}" -gt 1 && exit 0
echo "expected output changes not seen" echo "expected output changes not seen"
tr '\r' '\n' < "${workFile1}" | sed 's/^ *$/d' | sort | uniq tr '\r' '\n' < "${workFile1}" | sed 's/^ *$/d' | sort | uniq
exit 1 exit 1
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
# #
# Check that the byte counter counts. # Check that the byte counter counts.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
dd if=/dev/zero bs=100 count=1 2>/dev/null \ dd if=/dev/zero bs=100 count=1 2>/dev/null \
| "${testSubject}" -f -b >/dev/null 2>"${workFile1}" | "${testSubject}" -f -b >/dev/null 2>"${workFile1}"
@@ -13,5 +13,3 @@ test "${counterValue}" = "100B" && exit 0
echo "unexpected byte counter value: ${counterValue}" echo "unexpected byte counter value: ${counterValue}"
exit 1 exit 1
# EOF
@@ -2,8 +2,8 @@
# #
# Check that the estimated time counter counts. # Check that the estimated time counter counts.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
dd if=/dev/zero bs=100 count=1 2>/dev/null \ dd if=/dev/zero bs=100 count=1 2>/dev/null \
| "${testSubject}" -f -e -s 100 -i 0.1 -L 25 >/dev/null 2>"${workFile1}" | "${testSubject}" -f -e -s 100 -i 0.1 -L 25 >/dev/null 2>"${workFile1}"
@@ -29,5 +29,3 @@ if ! test "${valueCount}" -lt 12; then
fi fi
exit 0 exit 0
# EOF
@@ -2,8 +2,8 @@
# #
# Check that the estimated time counter can show the end time of day. # Check that the estimated time counter can show the end time of day.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
dd if=/dev/zero bs=100 count=1 2>/dev/null \ dd if=/dev/zero bs=100 count=1 2>/dev/null \
| "${testSubject}" -f -I -s 100 -i 0.1 -L 25 >/dev/null 2>"${workFile1}" | "${testSubject}" -f -I -s 100 -i 0.1 -L 25 >/dev/null 2>"${workFile1}"
@@ -28,5 +28,3 @@ if ! test "${valueCount}" -lt 8; then
fi fi
exit 0 exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
# #
# Check that "--last-written" works. # Check that "--last-written" works.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
# Slowly write a sequence of numbers (rate-limited by another `pv' instance) # Slowly write a sequence of numbers (rate-limited by another `pv' instance)
# and watch the "--last-written" output of a second `pv' instance to make # and watch the "--last-written" output of a second `pv' instance to make
@@ -30,5 +30,3 @@ if ! test "${lastLine}" = "${expectedLastLine}"; then
fi fi
exit 0 exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
# #
# Check that numeric output outputs some percentages. # Check that numeric output outputs some percentages.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
# Process 100 bytes at 100 bytes per second, updating every 0.1 seconds for # Process 100 bytes at 100 bytes per second, updating every 0.1 seconds for
# around 10 output lines. # around 10 output lines.
@@ -31,5 +31,3 @@ if ! test "${finalLine}" = "100"; then
fi fi
exit 0 exit 0
# EOF
+2 -4
View File
@@ -3,8 +3,8 @@
# Check that numeric output gives a byte count instead of a percentage when # Check that numeric output gives a byte count instead of a percentage when
# used with -b. # used with -b.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
# Process 500 bytes at 500 bytes per second, updating every 0.1 seconds for # Process 500 bytes at 500 bytes per second, updating every 0.1 seconds for
# around 10 output lines. # around 10 output lines.
@@ -30,5 +30,3 @@ if ! test "${finalLine}" = "500"; then
echo "final byte count was not 500 (${finalLine})" echo "final byte count was not 500 (${finalLine})"
exit 1 exit 1
fi fi
# EOF
@@ -3,8 +3,9 @@
# Check that numeric output shows line counts instead of percentages, when # Check that numeric output shows line counts instead of percentages, when
# used in line mode together with bytes mode. # used in line mode together with bytes mode.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}" true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
# Pass through 100 lines. # Pass through 100 lines.
# #
@@ -33,5 +34,3 @@ if ! test "${finalStdoutLine}" = "100"; then
fi fi
exit 0 exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
# #
# Check that numeric output gives a timer when used with -t. # Check that numeric output gives a timer when used with -t.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
# Process 100 bytes at 100 bytes per second, updating every 0.1 seconds for # Process 100 bytes at 100 bytes per second, updating every 0.1 seconds for
# around 10 output lines. # around 10 output lines.
@@ -37,5 +37,3 @@ if ! test "${finalPercentage}" = "100"; then
fi fi
exit 0 exit 0
# EOF
@@ -2,8 +2,8 @@
# #
# Check that the progress bar moves when data is coming in. # Check that the progress bar moves when data is coming in.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
dd if=/dev/zero bs=100 count=1 2>/dev/null \ dd if=/dev/zero bs=100 count=1 2>/dev/null \
| "${testSubject}" -f -p -i 0.1 -L 500 >/dev/null 2>"${workFile1}" | "${testSubject}" -f -p -i 0.1 -L 500 >/dev/null 2>"${workFile1}"
@@ -18,5 +18,3 @@ if ! test "${lineCount}" -gt 2; then
fi fi
exit 0 exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
# #
# Check that the progress bar increases in size when data is coming in. # Check that the progress bar increases in size when data is coming in.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
dd if=/dev/zero bs=100 count=1 2>/dev/null \ dd if=/dev/zero bs=100 count=1 2>/dev/null \
| "${testSubject}" -f -p -i 0.1 -L 50 -s 100 >/dev/null 2>"${workFile1}" | "${testSubject}" -f -p -i 0.1 -L 50 -s 100 >/dev/null 2>"${workFile1}"
@@ -28,5 +28,3 @@ if ! test "${differentBarLengthsCount}" -gt 5; then
fi fi
exit 0 exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
# #
# Check that the -q option shuts everything up. # Check that the -q option shuts everything up.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
dd if=/dev/zero bs=1000 count=5 2>/dev/null \ dd if=/dev/zero bs=1000 count=5 2>/dev/null \
| "${testSubject}" -f -q -i 0.1 -L 5000 >/dev/null 2>"${workFile1}" | "${testSubject}" -f -q -i 0.1 -L 5000 >/dev/null 2>"${workFile1}"
@@ -15,5 +15,3 @@ if test -s "${workFile1}"; then
fi fi
exit 0 exit 0
# EOF
@@ -2,8 +2,8 @@
# #
# Check that the transfer rate counter changes. # Check that the transfer rate counter changes.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
# Transfer 200 bytes as two 100-byte blocks with a 2-second gap between. # Transfer 200 bytes as two 100-byte blocks with a 2-second gap between.
# #
@@ -27,5 +27,3 @@ if ! test "${rateCount}" -gt 2; then
fi fi
exit 0 exit 0
# EOF
@@ -2,8 +2,8 @@
# #
# Check that the elapsed time counter does count up. # Check that the elapsed time counter does count up.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
# Transfer a zero amount of data, but take 3 seconds to do it. # Transfer a zero amount of data, but take 3 seconds to do it.
# #
@@ -18,5 +18,3 @@ if ! test "${valueCount}" -gt 1; then
fi fi
exit 0 exit 0
# EOF
+2 -4
View File
@@ -3,8 +3,8 @@
# Check that the process ID can be written to a file as described in the # Check that the process ID can be written to a file as described in the
# manual. # manual.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
# Check we can run "kill -s 0". # Check we can run "kill -s 0".
if ! kill -s 0 $$ >/dev/null 2>&1; then if ! kill -s 0 $$ >/dev/null 2>&1; then
@@ -46,5 +46,3 @@ if ! test "${pidValid}" = "1"; then
fi fi
exit 0 exit 0
# EOF
@@ -2,8 +2,7 @@
# #
# Check that size arguments are processed correctly. # Check that size arguments are processed correctly.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"
# Pass size argument $1 and check that the last reported number is $2. # Pass size argument $1 and check that the last reported number is $2.
checkSizeArgument () { checkSizeArgument () {
@@ -20,5 +19,3 @@ checkSizeArgument 1M 1048576
checkSizeArgument 8G 8589934592 checkSizeArgument 8G 8589934592
exit 0 exit 0
# EOF
+1 -4
View File
@@ -2,8 +2,7 @@
# #
# Check that data can be just passed straight through. # Check that data can be just passed straight through.
# Dummy assignment for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"
inputString="TESTING" inputString="TESTING"
outputString=$(printf "%s" "${inputString}" | "${testSubject}" 2>/dev/null) || { echo "unexpected failure code"; exit 1; } outputString=$(printf "%s" "${inputString}" | "${testSubject}" 2>/dev/null) || { echo "unexpected failure code"; exit 1; }
@@ -23,5 +22,3 @@ if ! test "${inputString}" = "${outputString}"; then
fi fi
exit 0 exit 0
# EOF
+3 -4
View File
@@ -3,8 +3,9 @@
# Transfer a large chunk of data through pv and check data correctness # Transfer a large chunk of data through pv and check data correctness
# afterwards. # afterwards.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}" true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
# generate some data # generate some data
dd if=/dev/urandom of="${workFile1}" bs=1024 count=10240 2>/dev/null dd if=/dev/urandom of="${workFile1}" bs=1024 count=10240 2>/dev/null
@@ -19,5 +20,3 @@ outputChecksum=$(cksum "${workFile2}" | awk '{print $1}')
test "${inputChecksum}" = "${outputChecksum}" || exit 1 test "${inputChecksum}" = "${outputChecksum}" || exit 1
exit 0 exit 0
# EOF
+3 -4
View File
@@ -3,8 +3,9 @@
# Transfer a large chunk of data through pv using pipes, sending it in a # Transfer a large chunk of data through pv using pipes, sending it in a
# bursty fashion, and check data correctness afterwards. # bursty fashion, and check data correctness afterwards.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}" true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
# generate some data # generate some data
dd if=/dev/urandom of="${workFile1}" bs=1024 count=10240 2>/dev/null dd if=/dev/urandom of="${workFile1}" bs=1024 count=10240 2>/dev/null
@@ -52,5 +53,3 @@ if ! test "${inputChecksum}" = "${outputChecksum}"; then
fi fi
exit 0 exit 0
# EOF
+3 -4
View File
@@ -2,8 +2,9 @@
# #
# Make sure that files larger than 2GB are supported. # Make sure that files larger than 2GB are supported.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}" true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
# Check there is enough free space for this test. # Check there is enough free space for this test.
workFile1Dir="${workFile1%/*}" workFile1Dir="${workFile1%/*}"
@@ -76,5 +77,3 @@ if ! test "${bytesReported}" -eq "${fileSize}"; then
fi fi
exit 0 exit 0
# EOF
+1 -4
View File
@@ -2,8 +2,7 @@
# #
# Check that there is no SIGPIPE or dropped data on bigger data transfers. # Check that there is no SIGPIPE or dropped data on bigger data transfers.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"
# We nead GNU head. On some platforms it is named ghead instead of head. # We nead GNU head. On some platforms it is named ghead instead of head.
HEAD="head" HEAD="head"
@@ -36,5 +35,3 @@ if ! test "${stopAtByteCount}" = "${bytesTransferred}"; then
fi fi
exit 0 exit 0
# EOF
@@ -3,8 +3,11 @@
# Try repeatedly messaging a transfer process, and make sure the data stays # Try repeatedly messaging a transfer process, and make sure the data stays
# intact. # intact.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"; workFile3="${workFile3:-.tmp3}"; workFile4="${workFile4:-.tmp4}" true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
true "${workFile3:?not set - call this from 'make check'}"
true "${workFile4:?not set - call this from 'make check'}"
# Do nothing if it is not supported. # Do nothing if it is not supported.
if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then
@@ -57,5 +60,3 @@ if ! test "${inputChecksum}" = "${outputChecksum}"; then
fi fi
exit 0 exit 0
# EOF
+6 -4
View File
@@ -3,8 +3,12 @@
# Run valgrind's memory checker against a process using various different # Run valgrind's memory checker against a process using various different
# transfer options. # transfer options.
# Dummy assignments for "shellcheck". true "${sourcePath:?not set - call this from 'make check'}"
sourcePath="${sourcePath:-.}"; testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"; workFile3="${workFile3:-.tmp3}"; workFile4="${workFile4:-.tmp4}" true "${testSubject:?not set - call this from 'make check'}"
true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
true "${workFile3:?not set - call this from 'make check'}"
true "${workFile4:?not set - call this from 'make check'}"
# Load the valgrind function. # Load the valgrind function.
. "${sourcePath}/tests/run-valgrind.sh" . "${sourcePath}/tests/run-valgrind.sh"
@@ -34,5 +38,3 @@ seq -w 3 1 100 \
| { runWithValgrind -bnl -i 0.2 -f -L 100 2>"${workFile1}" > "${workFile2}"; } 4>&1 || exit 1 | { runWithValgrind -bnl -i 0.2 -f -L 100 2>"${workFile1}" > "${workFile2}"; } 4>&1 || exit 1
exit 0 exit 0
# EOF
+30
View File
@@ -0,0 +1,30 @@
#!/bin/sh
#
# Run valgrind's memory checker against a process that sets is process
# title.
true "${sourcePath:?not set - call this from 'make check'}"
true "${testSubject:?not set - call this from 'make check'}"
true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
true "${workFile3:?not set - call this from 'make check'}"
true "${workFile4:?not set - call this from 'make check'}"
# Load the valgrind function.
. "${sourcePath}/tests/run-valgrind.sh"
# Without an extra format string.
(dd if=/dev/zero bs=100 count=1 2>/dev/null;
sleep 1;
dd if=/dev/zero bs=110 count=1 2>/dev/null;
sleep 1;
) | { runWithValgrind -f -i 0.5 -a -x processtitle >/dev/null 2>"${workFile1}"; } 4>&1 || exit 1
# With an extra format string.
(dd if=/dev/zero bs=100 count=1 2>/dev/null;
sleep 1;
dd if=/dev/zero bs=110 count=1 2>/dev/null;
sleep 1;
) | { runWithValgrind -f -i 0.5 -a -x 'processtitle:%t %b' >/dev/null 2>"${workFile1}"; } 4>&1 || exit 1
exit 0
@@ -2,8 +2,12 @@
# #
# Run valgrind's memory checker while receiving remote control commands. # Run valgrind's memory checker while receiving remote control commands.
# Dummy assignments for "shellcheck". true "${sourcePath:?not set - call this from 'make check'}"
sourcePath="${sourcePath:-.}"; testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"; workFile3="${workFile3:-.tmp3}"; workFile4="${workFile4:-.tmp4}" true "${testSubject:?not set - call this from 'make check'}"
true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
true "${workFile3:?not set - call this from 'make check'}"
true "${workFile4:?not set - call this from 'make check'}"
# Do nothing if it is not supported. # Do nothing if it is not supported.
if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then
@@ -39,5 +43,3 @@ done
{ runWithValgrind -L 100k -i 0.1 -f -P "${workFile3}" "${workFile1}" > "${workFile2}" 2>/dev/null; } 4>&1 || exit 1 { runWithValgrind -L 100k -i 0.1 -f -P "${workFile3}" "${workFile1}" > "${workFile2}" 2>/dev/null; } 4>&1 || exit 1
exit 0 exit 0
# EOF
@@ -3,8 +3,12 @@
# Run valgrind's memory checker while using remote control to control # Run valgrind's memory checker while using remote control to control
# another process. # another process.
# Dummy assignments for "shellcheck". true "${sourcePath:?not set - call this from 'make check'}"
sourcePath="${sourcePath:-.}"; testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"; workFile3="${workFile3:-.tmp3}"; workFile4="${workFile4:-.tmp4}" true "${testSubject:?not set - call this from 'make check'}"
true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
true "${workFile3:?not set - call this from 'make check'}"
true "${workFile4:?not set - call this from 'make check'}"
# Do nothing if it is not supported. # Do nothing if it is not supported.
if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then
@@ -35,5 +39,3 @@ runWithValgrind -R "$(cat "${workFile3}")" -L 10M 4>&1 || exit 1
wait wait
exit 0 exit 0
# EOF
+61
View File
@@ -0,0 +1,61 @@
#!/bin/sh
#
# Run valgrind's memory checker against a process using the --watchfd
# option.
true "${sourcePath:?not set - call this from 'make check'}"
true "${testSubject:?not set - call this from 'make check'}"
true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
true "${workFile3:?not set - call this from 'make check'}"
true "${workFile4:?not set - call this from 'make check'}"
# Load the valgrind function.
. "${sourcePath}/tests/run-valgrind.sh"
# Skip the test if "-d" is not available.
if ! "${testSubject}" -h | grep -Fq ' -d'; then
echo "no \`--watchfd' / \`-d' option on this platform"
exit 77
fi
# Skip the test if "-d" does not work.
sleep 2 &
sleep 0.1
"${testSubject}" -d "${pid}" -f -i 0.5 >/dev/null 2>"${workFile1}"
if grep -Fq ' -d: not available' "${workFile1}"; then
echo "no \`--watchfd' / \`-d' option on this platform"
exit 77
fi
# Check "--watchfd PID:FD".
# See the "Watchfd" tests for more detail.
seq 1 100 > "${workFile1}"
# shellcheck disable=SC2030
(sleep 1; read -r line; sleep 1; read -r line; sleep 1) <"${workFile1}" &
pid=$!
sleep 0.1
{ runWithValgrind -d "${pid}:0" -f -i 0.5 >/dev/null 2>&1; } 4>&1 || exit 1
# Check "--watchfd PID".
seq 1 100 > "${workFile1}"
seq 1 300 > "${workFile2}"
# shellcheck disable=SC2030
(
sleep 1
read -r line
exec 9<"${workFile2}"
sleep 1
exec 8<"${workFile1}"
exec 7</dev/null
sleep 1
exec 9<&-
# shellcheck disable=SC2034
read -r line
sleep 1
) <"${workFile1}" &
pid=$!
sleep 0.1
{ runWithValgrind -d "${pid}" -f -i 0.5 >/dev/null 2>&1; } 4>&1 || exit 1
exit 0
+3 -4
View File
@@ -5,8 +5,9 @@
# doesn't check that O_DIRECT is actually being used, it just checks that # doesn't check that O_DIRECT is actually being used, it just checks that
# data is not being corrupted. # data is not being corrupted.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}" true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
# generate some data # generate some data
dd if=/dev/urandom of="${workFile1}" bs=1024 count=2560 2>/dev/null dd if=/dev/urandom of="${workFile1}" bs=1024 count=2560 2>/dev/null
@@ -51,5 +52,3 @@ if ! test "${doubleInputChecksum}" = "${outputChecksum}"; then
fi fi
exit 0 exit 0
# EOF
+2 -4
View File
@@ -3,8 +3,8 @@
# Check that the progress bar is produced when "--force" is used, and is not # Check that the progress bar is produced when "--force" is used, and is not
# when it is not, providing stderr is a file. # when it is not, providing stderr is a file.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; true "${workFile1:?not set - call this from 'make check'}"
dd if=/dev/zero bs=100 count=1 2>/dev/null \ dd if=/dev/zero bs=100 count=1 2>/dev/null \
| "${testSubject}" -f -p -i 0.1 -L 100 >/dev/null 2>"${workFile1}" | "${testSubject}" -f -p -i 0.1 -L 100 >/dev/null 2>"${workFile1}"
@@ -32,5 +32,3 @@ if test -s "${workFile1}"; then
fi fi
exit 0 exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
# #
# Check that the update interval can be set. # Check that the update interval can be set.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
sleep 1 | "${testSubject}" -f -i 0.1 >/dev/null 2>"${workFile1}" sleep 1 | "${testSubject}" -f -i 0.1 >/dev/null 2>"${workFile1}"
@@ -17,5 +17,3 @@ if ! test "${lineCount}" -gt 6; then
fi fi
exit 0 exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
# #
# Check that line mode counts lines instead of bytes. # Check that line mode counts lines instead of bytes.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
# Pass through 100 lines. # Pass through 100 lines.
# #
@@ -28,5 +28,3 @@ if ! test "${lineCount}" -gt 3; then
fi fi
exit 0 exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
# #
# Check that "--size" affects the percentage shown. # Check that "--size" affects the percentage shown.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}" true "${workFile1:?not set - call this from 'make check'}"
# Process 100 bytes at 100 bytes per second, updating every 0.1 seconds for # Process 100 bytes at 100 bytes per second, updating every 0.1 seconds for
# around 10 output lines, but set the size to 200. # around 10 output lines, but set the size to 200.
@@ -52,5 +52,3 @@ if ! test "${finalLine}" = "200"; then
fi fi
exit 0 exit 0
# EOF
+3 -4
View File
@@ -3,8 +3,9 @@
# Similar to the "--size" check but, instead, using another file's size with # Similar to the "--size" check but, instead, using another file's size with
# "--size @". # "--size @".
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}" true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
# Process 100 bytes at 100 bytes per second, interval 0.1 seconds, with the # Process 100 bytes at 100 bytes per second, interval 0.1 seconds, with the
# size set from a file of $1 bytes and expecting a percentage of $2 at the # size set from a file of $1 bytes and expecting a percentage of $2 at the
@@ -45,5 +46,3 @@ sizeCheck 200 50
sizeCheck 50 200 sizeCheck 50 200
exit 0 exit 0
# EOF
+3 -4
View File
@@ -5,8 +5,9 @@
# check that fdatasync() is actually being called, it just checks that data # check that fdatasync() is actually being called, it just checks that data
# is not being corrupted. # is not being corrupted.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}" true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
# generate some data # generate some data
dd if=/dev/urandom of="${workFile1}" bs=1024 count=2560 2>/dev/null dd if=/dev/urandom of="${workFile1}" bs=1024 count=2560 2>/dev/null
@@ -41,5 +42,3 @@ if ! test "${inputChecksum}" = "${outputChecksum}"; then
fi fi
exit 0 exit 0
# EOF
+3 -4
View File
@@ -2,8 +2,9 @@
# #
# Check that the terminal width is detected on startup. # Check that the terminal width is detected on startup.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}" true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
# Skip the test if `tmux' is not available. # Skip the test if `tmux' is not available.
if ! command -v tmux >/dev/null 2>&1; then if ! command -v tmux >/dev/null 2>&1; then
@@ -86,5 +87,3 @@ widthTest 400
widthTest 20 widthTest 20
exit 0 exit 0
# EOF
+1 -4
View File
@@ -2,8 +2,7 @@
# #
# A simple test of rate limiting. # A simple test of rate limiting.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"
# Transfer 102 bytes at 100 bytes/sec. It should take at least 1 second. # Transfer 102 bytes at 100 bytes/sec. It should take at least 1 second.
# #
@@ -17,5 +16,3 @@ if test "${startTime}" = "${endTime}"; then
fi fi
exit 0 exit 0
# EOF
+5 -4
View File
@@ -2,8 +2,11 @@
# #
# Try changing the format of a transfer remotely. # Try changing the format of a transfer remotely.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"; workFile3="${workFile3:-.tmp3}"; workFile4="${workFile4:-.tmp4}" true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
true "${workFile3:?not set - call this from 'make check'}"
true "${workFile4:?not set - call this from 'make check'}"
# Do nothing if it is not supported. # Do nothing if it is not supported.
if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then
@@ -32,5 +35,3 @@ if ! test "${line_lengths}" -gt 1; then
fi fi
exit 0 exit 0
# EOF
+3 -4
View File
@@ -2,8 +2,9 @@
# #
# Make sure -S stops at the given size. # Make sure -S stops at the given size.
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}" true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
# generate some data # generate some data
dd if=/dev/urandom of="${workFile1}" bs=1024 count=10 2>/dev/null dd if=/dev/urandom of="${workFile1}" bs=1024 count=10 2>/dev/null
@@ -23,5 +24,3 @@ if ! test "${inputChecksum}" = "${outputChecksum}"; then
fi fi
exit 0 exit 0
# EOF
+75
View File
@@ -0,0 +1,75 @@
#!/bin/sh
#
# Check that watching a process's file descriptors works as expected.
true "${testSubject:?not set - call this from 'make check'}"
true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
true "${workFile3:?not set - call this from 'make check'}"
# Skip the test if "-d" is not available.
if ! "${testSubject}" -h | grep -Fq ' -d'; then
echo "no \`--watchfd' / \`-d' option on this platform"
exit 77
fi
seq 1 100 > "${workFile1}"
seq 1 300 > "${workFile2}"
# Run a background process to perform a few reads from a file, opening a
# second file after a moment.
# NB we just export line to make shellcheck think it's used.
(
export line
sleep 1
read -r line
exec 9<"${workFile2}"
sleep 1
read -r line
sleep 1
) <"${workFile1}" &
pid=$!
sleep 0.1
"${testSubject}" -d "${pid}" -f -i 0.5 >/dev/null 2>"${workFile3}"
# Skip the test if "-d" does not work.
if grep -Fq ' -d: not available' "${workFile3}"; then
echo "no \`--watchfd' / \`-d' option on this platform"
exit 77
fi
# Process the output to make it easier to handle.
# NB "ESC [ A" is "cursor up", we turn that into "-" and a newline.
tr '\r' '\n' < "${workFile3}" | sed 's/.\[A/-!/g' | tr '!' '\n' > "${workFile1}"
# We should see at least 2 file positions for fd 0.
positionsReported="$(awk '/^ *0:/ {print $2}' < "${workFile1}" | sort -n | uniq)"
differentNumbers="$(printf "%s\n" "${positionsReported}" | grep -Ec .)"
if ! test "${differentNumbers}" -gt 1; then
printf "%s\n" "Expected at least 2 different numbers to be output for fd 0"
printf "%s:\n%s\n" "Positions reported" "${positionsReported}"
printf "%s: %s\n" "Number of different values seen" "${differentNumbers}"
printf "%s\n" "Raw output:"
cat "${workFile1}"
exit 1
fi
# We should see file descriptor 9 appear.
if ! grep -Eq '^ *9:' < "${workFile1}"; then
printf "%s\n" "Expected to see information for fd 9"
printf "%s\n" "Raw output:"
cat "${workFile1}"
exit 1
fi
# We should see the last 6 characters of fd 9's filename appear.
lastChars="$(printf "%s\n" "${workFile2}" | rev | cut -b1-6 | rev)"
if ! grep -Fq "${lastChars}:" < "${workFile1}"; then
printf "%s\n" "Expected to see a filename for fd 9"
printf "%s\n" "Raw output:"
cat "${workFile1}"
exit 1
fi
exit 0
+43
View File
@@ -0,0 +1,43 @@
#!/bin/sh
#
# Check that watching a single file descriptor works as expected.
true "${testSubject:?not set - call this from 'make check'}"
true "${workFile1:?not set - call this from 'make check'}"
true "${workFile2:?not set - call this from 'make check'}"
# Skip the test if "-d" is not available.
if ! "${testSubject}" -h | grep -Fq ' -d'; then
echo "no \`--watchfd' / \`-d' option on this platform"
exit 77
fi
seq 1 100 > "${workFile1}"
# Run a background process to perform a few reads from a file.
# NB we just export line to make shellcheck think it's used.
(export line; sleep 1; read -r line; sleep 1; read -r line; sleep 1) <"${workFile1}" &
pid=$!
sleep 0.1
"${testSubject}" -d "${pid}:0" -f -i 0.5 >/dev/null 2>"${workFile2}"
# Skip the test if "-d" does not work.
if grep -Fq ' -d: not available' "${workFile2}"; then
echo "no \`--watchfd' / \`-d' option on this platform"
exit 77
fi
# There should be at least 2 different numbers starting the output lines.
positionsReported="$(tr '\r' '\n' < "${workFile2}" | awk '{print $1}' | sort -n | uniq)"
differentNumbers="$(printf "%s\n" "${positionsReported}" | grep -Ec .)"
if ! test "${differentNumbers}" -gt 1; then
printf "%s\n" "Expected at least 2 different numbers to be output"
printf "%s:\n%s\n" "Positions reported" "${positionsReported}"
printf "%s: %s\n" "Number of different values seen" "${differentNumbers}"
printf "%s\n" "Raw output:"
tr '\r' '\n' < "${workFile2}"
exit 1
fi
exit 0
+19 -6
View File
@@ -21,8 +21,9 @@
# Output file for failures. # Output file for failures.
valgrindOutputFile="valgrind.out" valgrindOutputFile="valgrind.out"
# Dummy assignments for "shellcheck". true "${testSubject:?not set - call this from 'make check'}"
testSubject="${testSubject:-false}"; workFile4="${workFile4:-.tmp4}" true "${workFile4:?not set - call this from 'make check'}"
true "${workFile5:?not set - call this from 'make check'}"
if ! command -v valgrind >/dev/null 2>&1; then if ! command -v valgrind >/dev/null 2>&1; then
echo "test requires \`valgrind'" echo "test requires \`valgrind'"
@@ -36,13 +37,27 @@ done
runWithValgrind () { runWithValgrind () {
cat > "${workFile5}" <<EOF
{
ignore-initproctitle-leak
Memcheck:Leak
fun:malloc
fun:initproctitle
fun:main
}
EOF
true > "${workFile4}"
valgrind --tool=memcheck \ valgrind --tool=memcheck \
--verbose --show-error-list=yes --log-fd=3 \ --verbose \
--show-error-list=yes \
--suppressions="${workFile5}" \
--log-file="${workFile4}" \
--error-exitcode=125 \ --error-exitcode=125 \
--track-fds=yes \ --track-fds=yes \
--leak-check=full \ --leak-check=full \
"${testSubject}" "$@" \ "${testSubject}" "$@" \
3>"${workFile4}" 4<&- 4<&- 9<&-
returnValue=$? returnValue=$?
@@ -62,5 +77,3 @@ runWithValgrind () {
return "${returnValue}" return "${returnValue}"
} }
# EOF
+5 -2
View File
@@ -6,6 +6,8 @@
# Tests must exit with 0 for success, 1 for failure, 77 to skip the test, or # Tests must exit with 0 for success, 1 for failure, 77 to skip the test, or
# 99 for a fatal error with the test framework. # 99 for a fatal error with the test framework.
true "${srcdir:?not set - call this from 'make check'}"
# Parameters. # Parameters.
testSubject="./pv" testSubject="./pv"
sourcePath="${srcdir}" sourcePath="${srcdir}"
@@ -20,9 +22,10 @@ workFile1=$(mktemp 2>/dev/null) || workFile1="./.tmp1"
workFile2=$(mktemp 2>/dev/null) || workFile2="./.tmp2" workFile2=$(mktemp 2>/dev/null) || workFile2="./.tmp2"
workFile3=$(mktemp 2>/dev/null) || workFile3="./.tmp3" workFile3=$(mktemp 2>/dev/null) || workFile3="./.tmp3"
workFile4=$(mktemp 2>/dev/null) || workFile4="./.tmp4" workFile4=$(mktemp 2>/dev/null) || workFile4="./.tmp4"
workFile5=$(mktemp 2>/dev/null) || workFile4="./.tmp5"
# Clean up the temporary files on exit, in case we are interrupted. # Clean up the temporary files on exit, in case we are interrupted.
trap 'rm -f "${workFile1}" "${workFile2}" "${workFile3}" "${workFile4}"' EXIT trap 'rm -f "${workFile1}" "${workFile2}" "${workFile3}" "${workFile4}" "${workFile5}"' EXIT
# Variables used by the test scripts. # Variables used by the test scripts.
export testSubject sourcePath workFile1 workFile2 workFile3 workFile4 export testSubject sourcePath workFile1 workFile2 workFile3 workFile4 workFile5