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/loop.c \
src/pv/number.c \
src/pv/proctitle.c \
src/pv/signal.c \
src/pv/state.c \
src/pv/string.c \
@@ -70,8 +71,10 @@ tests/Integrity_-_Large_file_support.test \
tests/Integrity_-_On_output_pipe_close.test \
tests/Integrity_-_When_adjusted_remotely.test \
tests/Memory_safety_-_Basic.test \
tests/Memory_safety_-_Process_title.test \
tests/Memory_safety_-_Remote_control_receiver.test \
tests/Memory_safety_-_Remote_control_sender.test \
tests/Memory_safety_-_Watchfd.test \
tests/Modifiers_-_--direct-io.test \
tests/Modifiers_-_--force.test \
tests/Modifiers_-_--interval.test \
@@ -82,7 +85,9 @@ tests/Modifiers_-_--sync.test \
tests/Terminal_-_Detect_width.test \
tests/Transfer_-_--rate-limit.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
+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.
# Compilation
# Installation
To compile the package, type "`sh ./configure`", which should generate a
Makefile for your system. You may then type "`make`" to build everything,
and "`make install`" to install it.
See "[docs/INSTALL](./docs/INSTALL)" for more about the _configure_ script.
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
(`autoconf`, `aclocal`, `autopoint`, `automake`) and the `gettext`
development tools. You can then run "`autoreconf -is`" to generate the
"`configure`" script.
sh ./configure --prefix=/usr
make
sudo make install
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
+42 -2
View File
@@ -4,7 +4,7 @@ dnl Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
dnl
dnl License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
AC_INIT([pv], [1.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_AUX_DIR([build-aux])
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([nanosleep])
AC_CHECK_FUNCS([setitimer])
AC_CHECK_FUNCS([setproctitle])
AC_CHECK_HEADERS([getopt.h])
AC_CHECK_HEADERS([limits.h])
AC_CHECK_HEADERS([wctype.h])
@@ -48,7 +49,7 @@ dnl Libraries that may contain key functions.
AC_SEARCH_LIBS([clock_gettime],[rt])
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])])
dnl Make sure all the types we use are defined.
@@ -60,6 +61,45 @@ AC_TYPE_SIZE_T
AC_TYPE_SSIZE_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"])
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))
* 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))
* [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/):
@@ -112,7 +116,9 @@ Translations provided through [Codeberg Weblate](https://translate.codeberg.org/
* [kre](https://translate.codeberg.org/user/kre/) (2)
* [fnetX](https://translate.codeberg.org/user/fnetX/) (1)
* **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**
* [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://packages.fedoraproject.org/pkgs/pv/pv/>
* Run "`make indent; make indent indentclean check`"
* Check that `po/POTFILES.in` is up to date
* Run "`make -C po update-po`"
* Run "`make analyse`" and see whether remaining warnings can be addressed
* 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
* *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:* 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*: 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:* surround average rate (**--average-rate**) with brackets rather than square brackets
* *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}"
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
pl
pt
ru
tr
+3
View File
@@ -4,11 +4,14 @@ src/main/main.c
src/main/options.c
src/main/remote.c
src/main/version.c
src/pv/calc.c
src/pv/cursor.c
src/pv/display.c
src/pv/elapsedtime.c
src/pv/file.c
src/pv/loop.c
src/pv/number.c
src/pv/proctitle.c
src/pv/signal.c
src/pv/state.c
src/pv/string.c
+121 -113
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"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"
"Last-Translator: mmatous <mmatous@users.noreply.translate.codeberg.org>\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"
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
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"
msgstr "ukaž počet přenesených bajtů"
#: src/main/help.c:308
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
#: src/main/help.c:305
msgid "show percentage of transfer buffer in use"
msgstr "ukaž procento využité vyrovnávací paměti"
#: src/main/help.c:316
#: src/main/help.c:307
msgid "NUM"
msgstr "ČÍS"
#: src/main/help.c:317
#: src/main/help.c:308
msgid "show NUM bytes last written"
msgstr "zobraz ČÍS posledních zapsaných bajtů"
#: src/main/help.c:319
#: src/main/help.c:310
msgid "FORMAT"
msgstr "FORMÁT"
#: src/main/help.c:320
#: src/main/help.c:311
msgid "set output format to FORMAT"
msgstr "nastav formát výstupu na FORMÁT"
#: src/main/help.c:323
msgid "output transfer statistics at the end"
msgstr "po dokončení vypiš údaje o přenosu"
#: src/main/help.c:326
#: src/main/help.c:314
msgid "output percentages, not visual information"
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"
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"
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"
msgstr "nic nevypisuj, dokud neuplyne SEK sekund"
#: src/main/help.c:338
#: src/main/help.c:332
msgid "SIZE"
msgstr "VEL"
#: src/main/help.c:339
#: src/main/help.c:333
msgid "set estimated data size to SIZE bytes"
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"
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"
msgstr "počítej řádky místo bajtů"
#: src/main/help.c:348
#: src/main/help.c:342
msgid "lines are null-terminated"
msgstr "řádky jsou zakončené nulovým znakem"
#: src/main/help.c:351
#: src/main/help.c:345
msgid "update every SEC seconds"
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"
msgstr "ŠÍŘ"
#: src/main/help.c:354
#: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide"
msgstr "předpokládej šířku terminálu ŠÍŘ znaků"
#: src/main/help.c:356
#: src/main/help.c:353
msgid "HEIGHT"
msgstr "VÝŠ"
#: src/main/help.c:357
#: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high"
msgstr "předpokládej výšku terminálu VÝŠ znaků"
#: src/main/help.c:359
#: src/main/help.c:356
msgid "NAME"
msgstr "JMÉNO"
#: src/main/help.c:360
#: src/main/help.c:357
msgid "prefix visual information with NAME"
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
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"
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"
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:423
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:424
msgid "FILE"
msgstr "SOUBOR"
#: src/main/help.c:370
#: src/main/help.c:373
msgid "write output to FILE instead of stdout"
msgstr "zapiš výstup do SOUBORu namísto standardního výstupu"
#: src/main/help.c:372
#: src/main/help.c:375
msgid "RATE"
msgstr "RYCH"
#: src/main/help.c:373
#: src/main/help.c:376
msgid "limit transfer to RATE bytes per second"
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"
msgstr "BAJT"
#: src/main/help.c:376
#: src/main/help.c:379
msgid "use a buffer size of BYTES"
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"
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"
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"
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"
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"
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"
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"
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"
msgstr "zapiš veškerý vstup do SOUBORu před výpisem na výstup"
#: src/main/help.c:403
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
#: src/main/help.c:405
msgid "PID[:FD]"
msgstr "PID[:DS]"
#: src/main/help.c:413
#: src/main/help.c:406
msgid "watch file FD opened by process 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"
msgstr "ukaž pomoc a skonči"
#: src/main/help.c:420
#: src/main/help.c:421
msgid "show version information and exit"
msgstr "ukaž informace o verzi a skonči"
#: src/main/help.c:424
#: src/main/help.c:425
msgid "write debug logs to FILE"
msgstr "zapiš ladící záznamy do SOUBORu"
#: src/main/help.c:449
#: src/main/help.c:450
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Použití: %s [VOLBY] [SOUBOR]..."
#: src/main/help.c:460
#: src/main/help.c:461
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr ""
"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
msgid "Please report any bugs to: %s"
msgstr "Prosím, hlašte veškeré chyby na: %s"
#: src/main/main.c:214
#: src/main/main.c:230
msgid "(input)"
msgstr "(vstup)"
#: src/main/main.c:299
#: src/main/main.c:319
msgid "state allocation failed"
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"
msgstr "nebylo možné zjistit informace o souboru"
#: src/main/options.c:154
#: src/main/options.c:158
msgid "is a directory"
msgstr "je adresář"
#: src/main/options.c:183
#: src/main/options.c:187
msgid "failed to generate sysfs filename"
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"
msgstr "selhalo čtení velikosti souboru v sysfs"
#: src/main/options.c:225
#: src/main/options.c:229
msgid "failed to open block device"
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"
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"
msgstr "selhala alokace struktury pro volby"
#: src/main/options.c:358
#: src/main/options.c:363
msgid "option structure argv allocation failed"
msgstr "selhala alokace struktury pro argv"
#: src/main/options.c:420
#: src/main/options.c:425
msgid "integer argument expected"
msgstr "očekáván celočíselný argument"
#: src/main/options.c:431
#: src/main/options.c:436
msgid "numeric argument expected"
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"
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"
msgstr "neplatné ID procesu"
#: src/main/options.c:666
#: src/main/options.c:679
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Zkuste `%s --help' pro více informací."
#: src/main/options.c:668
#: src/main/options.c:681
#, c-format
msgid "Try `%s -h' for more information."
msgstr "Zkuste `%s --h' pro více informací."
#: src/main/options.c:699
#: src/main/options.c:712
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
@@ -331,27 +339,27 @@ msgstr ""
"při sledování deskriptorů souborů nelze použít řádkový mód nebo volby pro "
"modifikaci přenosu"
#: src/main/options.c:708
#: src/main/options.c:721
msgid "cannot use cursor positioning when watching file descriptors"
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"
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"
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"
msgstr "není dostupné na systémech bez /proc/self/fdinfo"
#: src/main/remote.c:302
#: src/main/remote.c:304
msgid "message not received"
msgstr "zpráva nepřijata"
#: src/main/remote.c:429
#: src/main/remote.c:431
msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO není na tomto systému podporováno"
@@ -395,37 +403,37 @@ msgstr "yzafpnum kMGTPEZY"
msgid "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"
msgstr "selhala alokace vyrovnávací paměti"
#: src/pv/display.c:807
#: src/pv/display.c:810
msgid "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"
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
msgid "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"
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
msgid "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"
msgstr "ETA"
#: src/pv/display.c:971
#: src/pv/display.c:974
msgid "FIN"
msgstr "FIN"
@@ -465,11 +473,11 @@ msgstr "rychlost min/avg/max/std"
msgid "rate not measured"
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: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:377 src/pv/watchpid.c:398
#: 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 "pid"
@@ -477,7 +485,7 @@ msgstr "pid"
msgid "history structure allocation failed"
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"
msgstr "selhala alokace seznamu souborů"
+164 -156
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"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"
"Last-Translator: fnetX <otto@codeberg.org>\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"
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"
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)"
msgstr ""
"berechne die durchschnittliche Übertragungsrate über die letzten SEK "
"Sekunden (Standard 30s)"
#: src/main/help.c:305
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
#: src/main/help.c:350
msgid "WIDTH"
msgstr "BREITE"
#: src/main/help.c:354
#: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide"
msgstr "setze Terminal-Breite auf BREITE Zeichen"
#: src/main/help.c:356
#: src/main/help.c:353
msgid "HEIGHT"
msgstr "HÖHE"
#: src/main/help.c:357
#: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high"
msgstr "setze Terminal-Höhe auf HÖHE Zeichen"
#: src/main/help.c:359
#: src/main/help.c:356
msgid "NAME"
msgstr "NAME"
#: src/main/help.c:360
#: src/main/help.c:357
msgid "prefix visual information with NAME"
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
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"
msgstr ""
"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"
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:423
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:424
msgid "FILE"
msgstr "DATEI"
#: src/main/help.c:370
#: src/main/help.c:373
msgid "write output to FILE instead of stdout"
msgstr "schreibe die Ausgabe in DATEI statt in die Standardausgabe"
#: src/main/help.c:372
#: src/main/help.c:375
msgid "RATE"
msgstr "RATE"
#: src/main/help.c:373
#: src/main/help.c:376
msgid "limit transfer to RATE bytes per second"
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"
msgstr "BYTES"
#: src/main/help.c:376
#: src/main/help.c:379
msgid "use a buffer size of 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"
msgstr "anstelle von splice() immer read/write benutzen"
#: src/main/help.c:382
#: src/main/help.c:385
msgid "skip read errors in input"
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"
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"
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"
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"
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"
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"
msgstr "Ausgabe nach FILE schrieben bevor sie ausgegeben wird"
#: src/main/help.c:403
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
#: src/main/help.c:405
msgid "PID[:FD]"
msgstr "PID[:FD]"
#: src/main/help.c:413
#: src/main/help.c:406
msgid "watch file FD opened by process PID"
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"
msgstr "zeige diese Hilfe und beende"
#: src/main/help.c:420
#: src/main/help.c:421
msgid "show version information and exit"
msgstr "zeige Versionsinformationen und beende"
#: src/main/help.c:424
#: src/main/help.c:425
msgid "write debug logs to FILE"
msgstr "schreibe Debug-Protokolle in DATEI"
#: src/main/help.c:449
#: src/main/help.c:450
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Aufruf: %s [OPTION] [DATEI]..."
#: src/main/help.c:460
#: src/main/help.c:461
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr ""
"Verbindet DATEI(en) oder den Standard-Eingabe-Kanal mit dem Standard-Ausgabe-"
"Kanal und misst den Datenstrom."
#: src/main/help.c:597
#: src/main/help.c:598
#, c-format
msgid "Please report any bugs to: %s"
msgstr "Bitte senden Sie Fehlerberichte an %s"
#: src/main/main.c:214
#: src/main/main.c:230
msgid "(input)"
msgstr "(eingabe)"
#: src/main/main.c:299
#: src/main/main.c:319
msgid "state allocation failed"
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"
msgstr "konnte Dateiinformationen nicht lesen"
#: src/main/options.c:154
#: src/main/options.c:158
msgid "is a directory"
msgstr "ist ein Verzeichnis"
#: src/main/options.c:183
#: src/main/options.c:187
msgid "failed to generate sysfs filename"
msgstr "konnte Sysfs-Dateinamen nicht erzeugen"
#: src/main/options.c:205
#: src/main/options.c:209
msgid "failed to read sysfs size file"
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"
msgstr "konnte Blockgerät nicht öffnen"
#: src/main/options.c:235
#: src/main/options.c:239
msgid "failed to determine size of block device"
msgstr "konnte Größe des Blockgeräts nicht ermitteln"
#: src/main/options.c:339
#: src/main/options.c:344
msgid "option structure allocation failed"
msgstr "Speicherzuweisung für `option' fehlgeschlagen"
#: src/main/options.c:358
#: src/main/options.c:363
msgid "option structure argv allocation failed"
msgstr "Speicherzuweisung für `argv' der Option fehlgeschlagen"
#: src/main/options.c:420
#: src/main/options.c:425
msgid "integer argument expected"
msgstr "Ganzzahliges Argument erwartet"
#: src/main/options.c:431
#: src/main/options.c:436
msgid "numeric argument expected"
msgstr "numerisches Argument erwartet"
#: src/main/options.c:442
#: src/main/options.c:447
msgid "process ID or pid:fd pair expected"
msgstr "Prozess-ID oder PID:FD-Paar erwartet"
#: src/main/options.c:449
#: src/main/options.c:454
msgid "invalid process ID"
msgstr "ungültige Prozess-ID"
#: src/main/options.c:666
#: src/main/options.c:679
#, c-format
msgid "Try `%s --help' for more information."
msgstr "`%s --help' zeigt weitere Informationen an."
#: src/main/options.c:668
#: src/main/options.c:681
#, c-format
msgid "Try `%s -h' for more information."
msgstr "`%s -h' zeigt weitere Informationen an."
#: src/main/options.c:699
#: src/main/options.c:712
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
@@ -349,32 +357,32 @@ msgstr ""
"Beim Beobachten von Dateideskriptoren können keine Optionen für den "
"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"
msgstr ""
"Beim Beobachten von Dateideskriptoren kann Cursor-Positionierung nicht "
"verwendet werden"
#: src/main/options.c:717
#: src/main/options.c:730
msgid "cannot use remote control when watching file descriptors"
msgstr ""
"Beim Beobachten von Dateideskriptoren kann die Fernbedienung nicht verwenden "
"werden"
#: src/main/options.c:726
#: src/main/options.c:739
msgid "cannot transfer files when watching file descriptors"
msgstr ""
"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"
msgstr "Nicht verfügbar auf Systemen ohne /proc/self/fdinfo"
#: src/main/remote.c:302
#: src/main/remote.c:304
msgid "message not received"
msgstr "Nachricht nicht empfangen"
#: src/main/remote.c:429
#: src/main/remote.c:431
msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO wird auf diesem System nicht unterstützt"
@@ -418,37 +426,37 @@ msgstr "yzafpnµm kMGTPEZY"
msgid "yzafpnum 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"
msgstr "Speicherzuweisung für den Puffer fehlgeschlagen"
#: src/pv/display.c:807
#: src/pv/display.c:810
msgid "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"
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
msgid "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"
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
msgid "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"
msgstr "ETA"
#: src/pv/display.c:971
#: src/pv/display.c:974
msgid "FIN"
msgstr "Endzeit"
@@ -489,11 +497,11 @@ msgstr "Rate min/mittel/max/mdev"
msgid "rate not measured"
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: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:377 src/pv/watchpid.c:398
#: 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 "pid"
@@ -501,7 +509,7 @@ msgstr "pid"
msgid "history structure allocation failed"
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"
msgstr "Speicherzuweisung für die Dateiliste fehlgeschlagen"
+121 -113
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -31,319 +31,327 @@ msgstr ""
msgid "show data transfer average rate counter"
msgstr ""
#: src/main/help.c:301 src/main/help.c:335 src/main/help.c:350
msgid "SEC"
msgstr ""
#: 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"
msgstr ""
#: src/main/help.c:308
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
#: src/main/help.c:305
msgid "show percentage of transfer buffer in use"
msgstr ""
#: src/main/help.c:316
#: src/main/help.c:307
msgid "NUM"
msgstr ""
#: src/main/help.c:317
#: src/main/help.c:308
msgid "show NUM bytes last written"
msgstr ""
#: src/main/help.c:319
#: src/main/help.c:310
msgid "FORMAT"
msgstr ""
#: src/main/help.c:320
#: src/main/help.c:311
msgid "set output format to FORMAT"
msgstr ""
#: src/main/help.c:323
msgid "output transfer statistics at the end"
msgstr ""
#: src/main/help.c:326
#: src/main/help.c:314
msgid "output percentages, not visual information"
msgstr ""
#: src/main/help.c:329
#: src/main/help.c:317
msgid "do not output any transfer information at all"
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"
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"
msgstr ""
#: src/main/help.c:338
#: src/main/help.c:332
msgid "SIZE"
msgstr ""
#: src/main/help.c:339
#: src/main/help.c:333
msgid "set estimated data size to SIZE bytes"
msgstr ""
#: src/main/help.c:342
#: src/main/help.c:336
msgid "if size unknown, show rate vs max rate"
msgstr ""
#: src/main/help.c:345
#: src/main/help.c:339
msgid "count lines instead of bytes"
msgstr ""
#: src/main/help.c:348
#: src/main/help.c:342
msgid "lines are null-terminated"
msgstr ""
#: src/main/help.c:351
#: src/main/help.c:345
msgid "update every SEC seconds"
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"
msgstr ""
#: src/main/help.c:354
#: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide"
msgstr ""
#: src/main/help.c:356
#: src/main/help.c:353
msgid "HEIGHT"
msgstr ""
#: src/main/help.c:357
#: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high"
msgstr ""
#: src/main/help.c:359
#: src/main/help.c:356
msgid "NAME"
msgstr ""
#: src/main/help.c:360
#: 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 even if standard error is not a terminal"
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:369 src/main/help.c:399 src/main/help.c:408
#: src/main/help.c:423
#: 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:370
#: src/main/help.c:373
msgid "write output to FILE instead of stdout"
msgstr ""
#: src/main/help.c:372
#: src/main/help.c:375
msgid "RATE"
msgstr ""
#: src/main/help.c:373
#: src/main/help.c:376
msgid "limit transfer to RATE bytes per second"
msgstr ""
#: src/main/help.c:375 src/main/help.c:384
#: src/main/help.c:378 src/main/help.c:387
msgid "BYTES"
msgstr ""
#: src/main/help.c:376
#: src/main/help.c:379
msgid "use a buffer size of BYTES"
msgstr ""
#: src/main/help.c:379
#: src/main/help.c:382
msgid "never use splice(), always use read/write"
msgstr ""
#: src/main/help.c:382
#: src/main/help.c:385
msgid "skip read errors in input"
msgstr ""
#: src/main/help.c:385
#: src/main/help.c:388
msgid "skip errors in BYTES blocks at a time"
msgstr ""
#: src/main/help.c:388
#: src/main/help.c:391
msgid "stop after --size bytes have been transferred"
msgstr ""
#: src/main/help.c:391
#: src/main/help.c:394
msgid "flush cache to disk after every write"
msgstr ""
#: src/main/help.c:394
#: src/main/help.c:397
msgid "use direct I/O to bypass cache"
msgstr ""
#: src/main/help.c:397
#: src/main/help.c:400
msgid "discard input instead of writing to output"
msgstr ""
#: src/main/help.c:400
#: src/main/help.c:403
msgid "write all input to FILE before writing to output"
msgstr ""
#: src/main/help.c:403
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
#: src/main/help.c:405
msgid "PID[:FD]"
msgstr ""
#: src/main/help.c:413
#: src/main/help.c:406
msgid "watch file FD opened by process PID"
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"
msgstr ""
#: src/main/help.c:420
#: src/main/help.c:421
msgid "show version information and exit"
msgstr ""
#: src/main/help.c:424
#: src/main/help.c:425
msgid "write debug logs to FILE"
msgstr ""
#: src/main/help.c:449
#: src/main/help.c:450
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr ""
#: src/main/help.c:460
#: src/main/help.c:461
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr ""
#: src/main/help.c:597
#: src/main/help.c:598
#, c-format
msgid "Please report any bugs to: %s"
msgstr ""
#: src/main/main.c:214
#: src/main/main.c:230
msgid "(input)"
msgstr ""
#: src/main/main.c:299
#: src/main/main.c:319
msgid "state allocation failed"
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"
msgstr ""
#: src/main/options.c:154
#: src/main/options.c:158
msgid "is a directory"
msgstr ""
#: src/main/options.c:183
#: src/main/options.c:187
msgid "failed to generate sysfs filename"
msgstr ""
#: src/main/options.c:205
#: src/main/options.c:209
msgid "failed to read sysfs size file"
msgstr ""
#: src/main/options.c:225
#: src/main/options.c:229
msgid "failed to open block device"
msgstr ""
#: src/main/options.c:235
#: src/main/options.c:239
msgid "failed to determine size of block device"
msgstr ""
#: src/main/options.c:339
#: src/main/options.c:344
msgid "option structure allocation failed"
msgstr ""
#: src/main/options.c:358
#: src/main/options.c:363
msgid "option structure argv allocation failed"
msgstr ""
#: src/main/options.c:420
#: src/main/options.c:425
msgid "integer argument expected"
msgstr ""
#: src/main/options.c:431
#: src/main/options.c:436
msgid "numeric argument expected"
msgstr ""
#: src/main/options.c:442
#: src/main/options.c:447
msgid "process ID or pid:fd pair expected"
msgstr ""
#: src/main/options.c:449
#: src/main/options.c:454
msgid "invalid process ID"
msgstr ""
#: src/main/options.c:666
#: src/main/options.c:679
#, c-format
msgid "Try `%s --help' for more information."
msgstr ""
#: src/main/options.c:668
#: src/main/options.c:681
#, c-format
msgid "Try `%s -h' for more information."
msgstr ""
#: src/main/options.c:699
#: src/main/options.c:712
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
msgstr ""
#: src/main/options.c:708
#: src/main/options.c:721
msgid "cannot use cursor positioning when watching file descriptors"
msgstr ""
#: src/main/options.c:717
#: src/main/options.c:730
msgid "cannot use remote control when watching file descriptors"
msgstr ""
#: src/main/options.c:726
#: src/main/options.c:739
msgid "cannot transfer files when watching file descriptors"
msgstr ""
#: src/main/options.c:741
#: src/main/options.c:754
msgid "not available on systems without /proc/self/fdinfo"
msgstr ""
#: src/main/remote.c:302
#: src/main/remote.c:304
msgid "message not received"
msgstr ""
#: src/main/remote.c:429
#: src/main/remote.c:431
msgid "SA_SIGINFO not supported on this system"
msgstr ""
@@ -387,37 +395,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY"
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"
msgstr ""
#: src/pv/display.c:807
#: src/pv/display.c:810
msgid "b"
msgstr ""
#: src/pv/display.c:810 src/pv/transfer.c:602
#: src/pv/display.c:813 src/pv/transfer.c:602
msgid "B"
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
msgid "b/s"
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"
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
msgid "B/s"
msgstr ""
#: src/pv/display.c:901 src/pv/display.c:905
#: src/pv/display.c:904 src/pv/display.c:908
msgid "ETA"
msgstr ""
#: src/pv/display.c:971
#: src/pv/display.c:974
msgid "FIN"
msgstr ""
@@ -457,11 +465,11 @@ msgstr ""
msgid "rate not measured"
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: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:377 src/pv/watchpid.c:398
#: 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 ""
@@ -469,7 +477,7 @@ msgstr ""
msgid "history structure allocation failed"
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"
msgstr ""
+122 -114
View File
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"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"
"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"
@@ -50,299 +50,307 @@ msgstr "afficher le taux de tranfert des données"
msgid "show data transfer average rate counter"
msgstr "afficher le compteur de taux moyen de transfert de données"
#: src/main/help.c:301 src/main/help.c:335 src/main/help.c:350
msgid "SEC"
msgstr "SEC"
#: src/main/help.c:302
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr ""
"calculer le taux moyen d'après les SEC dernières secondes (30s par défaut)"
#: src/main/help.c:305
msgid "show number of bytes transferred"
msgstr "afficher le nombre d'octets transférés"
#: src/main/help.c:308
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
#: src/main/help.c:305
msgid "show percentage of transfer buffer in use"
msgstr "afficher le pourcentage de tampon de transfert utilisé"
#: src/main/help.c:316
#: src/main/help.c:307
msgid "NUM"
msgstr "NUM"
#: src/main/help.c:317
#: src/main/help.c:308
msgid "show NUM bytes last written"
msgstr "afficher les derniers NUM octets écrits"
#: src/main/help.c:319
#: src/main/help.c:310
msgid "FORMAT"
msgstr "FORMAT"
#: src/main/help.c:320
#: src/main/help.c:311
msgid "set output format to FORMAT"
msgstr "définir le format de sortie sur FORMAT"
#: src/main/help.c:323
msgid "output transfer statistics at the end"
msgstr "afficher les statistiques de transfert à la fin"
#: src/main/help.c:326
#: src/main/help.c:314
msgid "output percentages, not visual information"
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"
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"
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"
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"
msgstr "TAILLE"
#: src/main/help.c:339
#: src/main/help.c:333
msgid "set estimated data size to SIZE bytes"
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"
msgstr ""
"si la taille est inconnue, afficher le taux de transfert par rapport au taux "
"de transfert max"
#: src/main/help.c:345
#: src/main/help.c:339
msgid "count lines instead of bytes"
msgstr "compter les lignes au lieu des octets"
#: src/main/help.c:348
#: src/main/help.c:342
msgid "lines are null-terminated"
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"
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"
msgstr "LARGEUR"
#: src/main/help.c:354
#: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide"
msgstr "présumer la largeur du terminal à LARGEUR caractères"
#: src/main/help.c:356
#: src/main/help.c:353
msgid "HEIGHT"
msgstr "HAUTEUR"
#: src/main/help.c:357
#: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high"
msgstr "présumer la hauteur du terminal à HAUTEUR lignes"
#: src/main/help.c:359
#: src/main/help.c:356
msgid "NAME"
msgstr "NOM"
#: src/main/help.c:360
#: src/main/help.c:357
msgid "prefix visual information with NAME"
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
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"
msgstr ""
"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"
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:423
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:424
msgid "FILE"
msgstr "FICHIER"
#: src/main/help.c:370
#: src/main/help.c:373
msgid "write output to FILE instead of stdout"
msgstr "écrire la sortie dans FICHIER au lieu de la sortie standard"
#: src/main/help.c:372
#: src/main/help.c:375
msgid "RATE"
msgstr "TAUX"
#: src/main/help.c:373
#: src/main/help.c:376
msgid "limit transfer to RATE bytes per second"
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"
msgstr "OCTETS"
#: src/main/help.c:376
#: src/main/help.c:379
msgid "use a buffer size of BYTES"
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"
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"
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"
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"
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"
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"
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"
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"
msgstr "écrire toute l'entrée vers FICHIER avant de l'écrire vers la sortie"
#: src/main/help.c:403
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
#: src/main/help.c:405
msgid "PID[:FD]"
msgstr "PID[:FD]"
#: src/main/help.c:413
#: src/main/help.c:406
msgid "watch file FD opened by process 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"
msgstr "afficher cette aide puis quitter"
#: src/main/help.c:420
#: src/main/help.c:421
msgid "show version information and exit"
msgstr "afficher la version puis quitter"
#: src/main/help.c:424
#: src/main/help.c:425
msgid "write debug logs to FILE"
msgstr "écrire les journaux de déboggage vers FICHIER"
#: src/main/help.c:449
#: src/main/help.c:450
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Utilisation : %s [OPTIONS] [FICHIER]..."
#: src/main/help.c:460
#: src/main/help.c:461
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr ""
"Concaténer FICHIER(s), ou l'entrée standard, sur la sortie standard avec "
"monitorage."
#: src/main/help.c:597
#: src/main/help.c:598
#, c-format
msgid "Please report any bugs to: %s"
msgstr "SVP rapporter tous bogues à %s"
#: src/main/main.c:214
#: src/main/main.c:230
msgid "(input)"
msgstr "(entrée)"
#: src/main/main.c:299
#: src/main/main.c:319
msgid "state allocation failed"
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"
msgstr "échec à statuer sur le fichier"
#: src/main/options.c:154
#: src/main/options.c:158
msgid "is a directory"
msgstr "est un répertoire"
#: src/main/options.c:183
#: src/main/options.c:187
msgid "failed to generate sysfs filename"
msgstr ""
#: src/main/options.c:205
#: src/main/options.c:209
msgid "failed to read sysfs size file"
msgstr ""
#: src/main/options.c:225
#: src/main/options.c:229
msgid "failed to open block device"
msgstr ""
#: src/main/options.c:235
#: src/main/options.c:239
msgid "failed to determine size of block device"
msgstr ""
#: src/main/options.c:339
#: src/main/options.c:344
msgid "option structure allocation failed"
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"
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"
msgstr "Valeur entière attendue"
#: src/main/options.c:431
#: src/main/options.c:436
msgid "numeric argument expected"
msgstr "Valeur numérique attendue"
#: src/main/options.c:442
#: src/main/options.c:447
msgid "process ID or pid:fd pair expected"
msgstr "ID de processus ou paire pid:fd attendue"
#: src/main/options.c:449
#: src/main/options.c:454
msgid "invalid process ID"
msgstr "ID de processus non valide"
#: src/main/options.c:666
#: src/main/options.c:679
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Essayez `%s --help' pour plus d'informations."
#: src/main/options.c:668
#: src/main/options.c:681
#, c-format
msgid "Try `%s -h' for more information."
msgstr "Essayez `%s -h' pour plus d'informations."
#: src/main/options.c:699
#: src/main/options.c:712
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
@@ -350,33 +358,33 @@ msgstr ""
"impossible d'utiliser le mode ligne ou les options de modificateur de "
"transfert lors de la visualisation des descripteurs de fichiers"
#: src/main/options.c:708
#: src/main/options.c:721
msgid "cannot use cursor positioning when watching file descriptors"
msgstr ""
"impossible d'utiliser le positionnement du curseur lors de la visualisation "
"des descripteurs de fichier"
#: src/main/options.c:717
#: src/main/options.c:730
msgid "cannot use remote control when watching file descriptors"
msgstr ""
"impossible d'utiliser la télécommande lors de la visualisation des "
"descripteurs de fichiers"
#: src/main/options.c:726
#: src/main/options.c:739
msgid "cannot transfer files when watching file descriptors"
msgstr ""
"impossible de transférer des fichiers lorsque vous regardez des descripteurs "
"de fichiers"
#: src/main/options.c:741
#: src/main/options.c:754
msgid "not available on systems without /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"
msgstr "message non reçu"
#: src/main/remote.c:429
#: src/main/remote.c:431
msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO non pris en charge sur ce système"
@@ -422,37 +430,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY"
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"
msgstr "échec de l'allocation de mémoire tampon"
#: src/pv/display.c:807
#: src/pv/display.c:810
msgid "b"
msgstr ""
#: src/pv/display.c:810 src/pv/transfer.c:602
#: src/pv/display.c:813 src/pv/transfer.c:602
msgid "B"
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
msgid "b/s"
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"
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
msgid "B/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"
msgstr "ETA"
#: src/pv/display.c:971
#: src/pv/display.c:974
msgid "FIN"
msgstr ""
@@ -492,11 +500,11 @@ msgstr ""
msgid "rate not measured"
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: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:377 src/pv/watchpid.c:398
#: 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 ""
@@ -504,7 +512,7 @@ msgstr ""
msgid "history structure allocation failed"
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"
msgstr "échec de l'allocation de la liste de fichiers"
+132 -120
View File
@@ -6,14 +6,17 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-10-15 22:01+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"POT-Creation-Date: 2024-12-02 17:56+0000\n"
"PO-Revision-Date: 2024-10-20 14:07+0000\n"
"Last-Translator: coralpink <coralpink@users.noreply.translate.codeberg.org>\n"
"Language-Team: Polish <https://translate.codeberg.org/projects/pv/pv/pl/>\n"
"Language: pl\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==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
msgid "show progress bar"
@@ -39,300 +42,309 @@ msgstr "pokaż licznik prędkości przesyłania"
msgid "show data transfer average rate counter"
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
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"
msgstr "pokaż ilość przesłanych bajtów"
#: src/main/help.c:308
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
#: src/main/help.c:305
msgid "show percentage of transfer buffer in use"
msgstr "pokaż procentowe użycie bufora transferu"
#: src/main/help.c:316
#: src/main/help.c:307
msgid "NUM"
msgstr "LICZBA"
#: src/main/help.c:317
#: src/main/help.c:308
msgid "show NUM bytes last written"
msgstr "pokaż ostatnie LICZBA przesłanych bajtów"
#: src/main/help.c:319
#: src/main/help.c:310
msgid "FORMAT"
msgstr "FORMAT"
#: src/main/help.c:320
#: src/main/help.c:311
msgid "set output format to FORMAT"
msgstr "ustaw FORMAT jako format wyjściowy"
#: src/main/help.c:323
msgid "output transfer statistics at the end"
msgstr "wyświetl na końcu statystyki transferu"
#: src/main/help.c:326
#: src/main/help.c:314
msgid "output percentages, not visual information"
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"
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"
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"
msgstr "nie wyświetlaj nic do momentu upłynięcia SEKUNDY sekund"
#: src/main/help.c:338
#: src/main/help.c:332
msgid "SIZE"
msgstr "ROZMIAR"
#: src/main/help.c:339
#: src/main/help.c:333
msgid "set estimated data size to SIZE bytes"
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"
msgstr ""
"jeśli rozmiar nie jest znany, wyświetl zestawienie prędkości do maksymalnej "
"prędkości"
#: src/main/help.c:345
#: src/main/help.c:339
msgid "count lines instead of bytes"
msgstr "zliczaj linie zamiast bajty"
#: src/main/help.c:348
#: src/main/help.c:342
msgid "lines are null-terminated"
msgstr "linie są zakończone znakiem NUL"
#: src/main/help.c:351
#: src/main/help.c:345
msgid "update every SEC seconds"
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"
msgstr "SZEROKOŚĆ"
#: src/main/help.c:354
#: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide"
msgstr "przyjmij, że terminal ma szerokość SZEROKOŚĆ znaków"
#: src/main/help.c:356
#: src/main/help.c:353
msgid "HEIGHT"
msgstr "WYSOKOŚĆ"
#: src/main/help.c:357
#: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high"
msgstr "przyjmij, że terminal ma wysokość WYSOKOŚĆ linii"
#: src/main/help.c:359
#: src/main/help.c:356
msgid "NAME"
msgstr "NAZWA"
#: src/main/help.c:360
#: src/main/help.c:357
msgid "prefix visual information with NAME"
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
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"
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"
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:423
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:424
msgid "FILE"
msgstr "PLIK"
#: src/main/help.c:370
#: src/main/help.c:373
msgid "write output to FILE instead of stdout"
msgstr "zapisz wyjście do PLIK zamiast do wyjścia standardowego"
#: src/main/help.c:372
#: src/main/help.c:375
msgid "RATE"
msgstr "PRĘDKOŚĆ"
#: src/main/help.c:373
#: src/main/help.c:376
msgid "limit transfer to RATE bytes per second"
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"
msgstr "BAJTY"
#: src/main/help.c:376
#: src/main/help.c:379
msgid "use a buffer size of BYTES"
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"
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"
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"
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"
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"
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"
msgstr ""
"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"
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"
msgstr ""
"zapisz wszystkie dane wejściowe do PLIK przed wyświetleniem ich na wyjściu"
#: src/main/help.c:403
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
#: src/main/help.c:405
msgid "PID[:FD]"
msgstr "PID[:FD]"
#: src/main/help.c:413
#: src/main/help.c:406
msgid "watch file FD opened by process 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"
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"
msgstr "wyświetl informacje o wersji i wyjdź"
#: src/main/help.c:424
#: src/main/help.c:425
msgid "write debug logs to FILE"
msgstr "zapisz logi debugujące do PLIK"
#: src/main/help.c:449
#: src/main/help.c:450
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Sposób użycia: %s [OPCJA] [PLIK]..."
#: src/main/help.c:460
#: src/main/help.c:461
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr ""
"Łączenie PLIK(ów) lub wejścia standardowego, do wyjścia standardowego z "
"monitoringiem."
#: src/main/help.c:597
#: src/main/help.c:598
#, c-format
msgid "Please report any bugs to: %s"
msgstr "Proszę przesyłać zgłoszenia błędów do %s"
#: src/main/main.c:214
#: src/main/main.c:230
msgid "(input)"
msgstr "(wejście)"
#: src/main/main.c:299
#: src/main/main.c:319
msgid "state allocation failed"
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"
msgstr "nie udało się wykonać operacji stat na pliku"
#: src/main/options.c:154
#: src/main/options.c:158
msgid "is a directory"
msgstr "jest katalogiem"
#: src/main/options.c:183
#: src/main/options.c:187
msgid "failed to generate sysfs filename"
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"
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"
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"
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"
msgstr "nie udało się zaalokować struktur opcji"
#: src/main/options.c:358
#: src/main/options.c:363
msgid "option structure argv allocation failed"
msgstr "nie udało się zaalokować struktur opcji argv"
#: src/main/options.c:420
#: src/main/options.c:425
msgid "integer argument expected"
msgstr "oczekiwany argument typu liczby całkowitej"
#: src/main/options.c:431
#: src/main/options.c:436
msgid "numeric argument expected"
msgstr "oczekiwany argument liczbowy"
#: src/main/options.c:442
#: src/main/options.c:447
msgid "process ID or pid:fd pair expected"
msgstr "oczekiwany proces ID lub para PID:FD"
#: src/main/options.c:449
#: src/main/options.c:454
msgid "invalid process ID"
msgstr "niepoprawne ID procesu"
#: src/main/options.c:666
#: src/main/options.c:679
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Spróbuj `%s --help' by uzyskać więcej informacji."
#: src/main/options.c:668
#: src/main/options.c:681
#, c-format
msgid "Try `%s -h' for more information."
msgstr "Spróbuj `%s -h' by uzyskać więcej informacji."
#: src/main/options.c:699
#: src/main/options.c:712
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
@@ -340,31 +352,31 @@ msgstr ""
"nie można użyć trybu zliczania linii lub opcji modyfikujących przesył "
"łą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"
msgstr ""
"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"
msgstr ""
"nie można użyć opcji zaktualizowania ustawień procesu łącznie z opcją "
"obserwowania deskryptorów plików"
#: src/main/options.c:726
#: src/main/options.c:739
msgid "cannot transfer files when watching file descriptors"
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"
msgstr "niedostępne na systemach bez /proc/self/fdinfo"
#: src/main/remote.c:302
#: src/main/remote.c:304
msgid "message not received"
msgstr "wiadomość nieodebrana"
#: src/main/remote.c:429
#: src/main/remote.c:431
msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO nie jest wspierane na tym systemie"
@@ -407,39 +419,39 @@ msgstr "yzafpnum kMGTPEZY"
#: src/pv/display.c:251
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"
msgstr "nie udało się zaalokować bufora"
#: src/pv/display.c:807
#: src/pv/display.c:810
msgid "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"
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
msgid "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"
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
msgid "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"
msgstr "ETA"
#: src/pv/display.c:971
#: src/pv/display.c:974
msgid "FIN"
msgstr "FIN"
@@ -480,11 +492,11 @@ msgstr "prędkość min/śr/max/odch"
msgid "rate not measured"
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: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:377 src/pv/watchpid.c:398
#: 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 "pid"
@@ -492,7 +504,7 @@ msgstr "pid"
msgid "history structure allocation failed"
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"
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
msgid "line position buffer allocation failed"
msgstr ""
msgstr "alokacja buforu pozycji linii nie powiodła się"
#: src/pv/transfer.c:872
msgid "write failed"
+121 -113
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
"POT-Creation-Date: 2024-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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
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
msgid "compute average rate over past SEC seconds (default 30s)"
msgstr ""
#: src/main/help.c:305
msgid "show number of bytes transferred"
msgstr "exibe a quantidade de bytes transferidos"
#: src/main/help.c:308
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
#: src/main/help.c:305
msgid "show percentage of transfer buffer in use"
msgstr "exibe a porcentagem de buffer de transferência em uso"
#: src/main/help.c:316
#: src/main/help.c:307
msgid "NUM"
msgstr ""
#: src/main/help.c:317
#: src/main/help.c:308
msgid "show NUM bytes last written"
msgstr "exibe NUM bytes gravados pela última vez"
#: src/main/help.c:319
#: src/main/help.c:310
msgid "FORMAT"
msgstr ""
#: src/main/help.c:320
#: src/main/help.c:311
msgid "set output format to FORMAT"
msgstr "definir o formato de saída para FORMAT"
#: src/main/help.c:323
msgid "output transfer statistics at the end"
msgstr ""
#: src/main/help.c:326
#: src/main/help.c:314
msgid "output percentages, not visual information"
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"
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"
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"
msgstr "não exibir nada até que os segundos SEC tenham passado"
#: src/main/help.c:338
#: src/main/help.c:332
msgid "SIZE"
msgstr ""
#: src/main/help.c:339
#: src/main/help.c:333
msgid "set estimated data size to 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"
msgstr ""
#: src/main/help.c:345
#: src/main/help.c:339
msgid "count lines instead of bytes"
msgstr "contar linhas em vez de bytes"
#: src/main/help.c:348
#: src/main/help.c:342
msgid "lines are null-terminated"
msgstr "linhas são terminadas em nulo"
#: src/main/help.c:351
#: src/main/help.c:345
msgid "update every SEC seconds"
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"
msgstr ""
#: src/main/help.c:354
#: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide"
msgstr "presuma que o terminal tem WIDTH caracteres de largura"
#: src/main/help.c:356
#: src/main/help.c:353
msgid "HEIGHT"
msgstr ""
#: src/main/help.c:357
#: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high"
msgstr "presuma que o terminal tem HEIGHT caracteres de altura"
#: src/main/help.c:359
#: src/main/help.c:356
msgid "NAME"
msgstr ""
#: src/main/help.c:360
#: src/main/help.c:357
msgid "prefix visual information with NAME"
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
msgid "output transfer statistics at the end"
msgstr ""
#: src/main/help.c:366
msgid "output even if standard error is not a terminal"
msgstr "gera dados mesmo que a saída de erro seja redirecionada"
#: src/main/help.c:366
#: src/main/help.c:369
msgid "use cursor positioning escape sequences"
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:423
#: 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:370
#: src/main/help.c:373
msgid "write output to FILE instead of stdout"
msgstr ""
#: src/main/help.c:372
#: src/main/help.c:375
msgid "RATE"
msgstr ""
#: src/main/help.c:373
#: src/main/help.c:376
msgid "limit transfer to RATE bytes per second"
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"
msgstr ""
#: src/main/help.c:376
#: src/main/help.c:379
msgid "use a buffer size of 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"
msgstr "nunca use splice(), sempre use read/write"
#: src/main/help.c:382
#: src/main/help.c:385
msgid "skip read errors in input"
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"
msgstr ""
#: src/main/help.c:388
#: src/main/help.c:391
msgid "stop after --size bytes have been transferred"
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"
msgstr ""
#: src/main/help.c:394
#: src/main/help.c:397
msgid "use direct I/O to bypass cache"
msgstr ""
#: src/main/help.c:397
#: src/main/help.c:400
msgid "discard input instead of writing to output"
msgstr ""
#: src/main/help.c:400
#: src/main/help.c:403
msgid "write all input to FILE before writing to output"
msgstr ""
#: src/main/help.c:403
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
#: src/main/help.c:405
msgid "PID[:FD]"
msgstr ""
#: src/main/help.c:413
#: src/main/help.c:406
msgid "watch file FD opened by process 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"
msgstr "exibe esta tela de ajuda e termina"
#: src/main/help.c:420
#: src/main/help.c:421
msgid "show version information and exit"
msgstr "exibe a versão e termina"
#: src/main/help.c:424
#: src/main/help.c:425
msgid "write debug logs to FILE"
msgstr ""
#: src/main/help.c:449
#: src/main/help.c:450
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Uso: %s [OPÇÕES] [ARQUIVOS]..."
#: src/main/help.c:460
#: src/main/help.c:461
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr ""
"Concatena ARQUIVO(s) ou a entrada padrão e grava na saída padrão, com "
"monitoramento."
#: src/main/help.c:597
#: src/main/help.c:598
#, c-format
msgid "Please report any bugs to: %s"
msgstr "Por favor, reporte quaisquer defeitos para %s"
#: src/main/main.c:214
#: src/main/main.c:230
msgid "(input)"
msgstr ""
#: src/main/main.c:299
#: src/main/main.c:319
msgid "state allocation failed"
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"
msgstr "erro obtendo informações do arquivo"
#: src/main/options.c:154
#: src/main/options.c:158
msgid "is a directory"
msgstr ""
#: src/main/options.c:183
#: src/main/options.c:187
msgid "failed to generate sysfs filename"
msgstr ""
#: src/main/options.c:205
#: src/main/options.c:209
msgid "failed to read sysfs size file"
msgstr ""
#: src/main/options.c:225
#: src/main/options.c:229
msgid "failed to open block device"
msgstr ""
#: src/main/options.c:235
#: src/main/options.c:239
msgid "failed to determine size of block device"
msgstr ""
#: src/main/options.c:339
#: src/main/options.c:344
msgid "option structure allocation failed"
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"
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"
msgstr "argumento inteiro esperado"
#: src/main/options.c:431
#: src/main/options.c:436
msgid "numeric argument expected"
msgstr "argumento numérico esperado"
#: src/main/options.c:442
#: src/main/options.c:447
msgid "process ID or pid:fd pair expected"
msgstr "ID do processo ou par pid:fd esperado"
#: src/main/options.c:449
#: src/main/options.c:454
msgid "invalid process ID"
msgstr "ID de processo inválido"
#: src/main/options.c:666
#: src/main/options.c:679
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Tente `%s --help' para maiores informações."
#: src/main/options.c:668
#: src/main/options.c:681
#, c-format
msgid "Try `%s -h' for more information."
msgstr "Tente `%s -h' para maiores informações."
#: src/main/options.c:699
#: src/main/options.c:712
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
@@ -335,29 +343,29 @@ msgstr ""
"não pode usar o modo de linha ou opções de modificador de transferência ao "
"assistir os descritores de arquivo"
#: src/main/options.c:708
#: src/main/options.c:721
msgid "cannot use cursor positioning when watching file descriptors"
msgstr ""
"não pode usar o posicionamento do cursor ao observar os descritores de "
"arquivo"
#: src/main/options.c:717
#: src/main/options.c:730
msgid "cannot use remote control when watching file descriptors"
msgstr "não pode usar o controle remoto ao assistir os descritores de arquivo"
#: src/main/options.c:726
#: src/main/options.c:739
msgid "cannot transfer files when watching file descriptors"
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"
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"
msgstr "mensagem não recebida"
#: src/main/remote.c:429
#: src/main/remote.c:431
msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO não suportado neste sistema"
@@ -401,37 +409,37 @@ msgstr ""
msgid "yzafpnum KMGTPEZY"
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"
msgstr "erro alocando o buffer"
#: src/pv/display.c:807
#: src/pv/display.c:810
msgid "b"
msgstr ""
#: src/pv/display.c:810 src/pv/transfer.c:602
#: src/pv/display.c:813 src/pv/transfer.c:602
msgid "B"
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
msgid "b/s"
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"
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
msgid "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"
msgstr "ETA"
#: src/pv/display.c:971
#: src/pv/display.c:974
msgid "FIN"
msgstr ""
@@ -471,11 +479,11 @@ msgstr ""
msgid "rate not measured"
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: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:377 src/pv/watchpid.c:398
#: 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 ""
@@ -483,7 +491,7 @@ msgstr ""
msgid "history structure allocation failed"
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"
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 ""
"Project-Id-Version: pv 1.8.14\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"
"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"
@@ -37,294 +37,302 @@ msgstr "veri aktarım oranı sayacını göster"
msgid "show data transfer average rate counter"
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
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"
msgstr "aktarılan bayt sayısını göster"
#: src/main/help.c:308
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
#: src/main/help.c:305
msgid "show percentage of transfer buffer in use"
msgstr "aktarım tamponunun kullanım yüzdesini göster"
#: src/main/help.c:316
#: src/main/help.c:307
msgid "NUM"
msgstr "NUM"
#: src/main/help.c:317
#: src/main/help.c:308
msgid "show NUM bytes last written"
msgstr "son yazılan NUM baytlarını göster"
#: src/main/help.c:319
#: src/main/help.c:310
msgid "FORMAT"
msgstr "FORMAT"
#: src/main/help.c:320
#: src/main/help.c:311
msgid "set output format to FORMAT"
msgstr "çıktı formatını FORMAT olarak ayarlayın"
#: src/main/help.c:323
msgid "output transfer statistics at the end"
msgstr "transfer istatistiklerini sonda göster"
#: src/main/help.c:326
#: src/main/help.c:314
msgid "output percentages, not visual information"
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"
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"
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"
msgstr "SEC saniye geçene kadar hiçbir şey gösterme"
#: src/main/help.c:338
#: src/main/help.c:332
msgid "SIZE"
msgstr "BOYUT"
#: src/main/help.c:339
#: src/main/help.c:333
msgid "set estimated data size to SIZE bytes"
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"
msgstr "boyut bilinmiyorsa, oranı maksimum oranla göster"
#: src/main/help.c:345
#: src/main/help.c:339
msgid "count lines instead of bytes"
msgstr "bayt yerine satır say"
#: src/main/help.c:348
#: src/main/help.c:342
msgid "lines are null-terminated"
msgstr "satırlar boş sonlandırılır"
#: src/main/help.c:351
#: src/main/help.c:345
msgid "update every SEC seconds"
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"
msgstr "GENİŞLİK"
#: src/main/help.c:354
#: src/main/help.c:351
msgid "assume terminal is WIDTH characters wide"
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"
msgstr "YÜKSEKLİK"
#: src/main/help.c:357
#: src/main/help.c:354
msgid "assume terminal is HEIGHT rows high"
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"
msgstr "İSİM"
#: src/main/help.c:360
#: src/main/help.c:357
msgid "prefix visual information with NAME"
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
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"
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"
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:423
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
#: src/main/help.c:424
msgid "FILE"
msgstr "DOSYA"
#: src/main/help.c:370
#: src/main/help.c:373
msgid "write output to FILE instead of stdout"
msgstr "çıktıyı stdout yerine DOSYA'ya yaz"
#: src/main/help.c:372
#: src/main/help.c:375
msgid "RATE"
msgstr "ORAN"
#: src/main/help.c:373
#: src/main/help.c:376
msgid "limit transfer to RATE bytes per second"
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"
msgstr "BAYTLAR"
#: src/main/help.c:376
#: src/main/help.c:379
msgid "use a buffer size of BYTES"
msgstr "BAYTLAR tampon boyutu kullanın"
#: src/main/help.c:379
#: src/main/help.c:382
msgid "never use splice(), always use read/write"
msgstr "splice() kullanma, her zaman read/write kullan"
#: src/main/help.c:382
#: src/main/help.c:385
msgid "skip read errors in input"
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"
msgstr "BAYTLAR blokları halinde hataları atla"
#: src/main/help.c:388
#: src/main/help.c:391
msgid "stop after --size bytes have been transferred"
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"
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"
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"
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"
msgstr "çıktıya yazmadan önce tüm girdiyi DOSYA'ya yaz"
#: src/main/help.c:403
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
#: src/main/help.c:405
msgid "PID[:FD]"
msgstr "PID[:FD]"
#: src/main/help.c:413
#: src/main/help.c:406
msgid "watch file FD opened by process PID"
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"
msgstr "bu yardımı göster ve çık"
#: src/main/help.c:420
#: src/main/help.c:421
msgid "show version information and exit"
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"
msgstr "Hata ayıklama kayıtlarını DOSYA'ya yaz"
#: src/main/help.c:449
#: src/main/help.c:450
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Kullanım şekli: %s [AYAR] [DOSYA]..."
#: src/main/help.c:460
#: src/main/help.c:461
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
msgstr ""
"İzleme ile DOSYA(lar)ı veya standart girdiyi standart çıktı ile birleştirin."
#: src/main/help.c:597
#: src/main/help.c:598
#, c-format
msgid "Please report any bugs to: %s"
msgstr "Lütfen hataları şu adrese bildirin: %s"
#: src/main/main.c:214
#: src/main/main.c:230
msgid "(input)"
msgstr "(giriş)"
#: src/main/main.c:299
#: src/main/main.c:319
msgid "state allocation failed"
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"
msgstr "dosya statüsünde başarısız oldu"
#: src/main/options.c:154
#: src/main/options.c:158
msgid "is a directory"
msgstr "bir dizindir"
#: src/main/options.c:183
#: src/main/options.c:187
msgid "failed to generate sysfs filename"
msgstr "sysfs dosya adı oluşturulamadı"
#: src/main/options.c:205
#: src/main/options.c:209
msgid "failed to read sysfs size file"
msgstr "sysfs boyut dosyası okunamadı"
#: src/main/options.c:225
#: src/main/options.c:229
msgid "failed to open block device"
msgstr "blok aygıtı açılamadı"
#: src/main/options.c:235
#: src/main/options.c:239
msgid "failed to determine size of block device"
msgstr "blok aygıtının boyutu belirlenemedi"
#: src/main/options.c:339
#: src/main/options.c:344
msgid "option structure allocation failed"
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"
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"
msgstr "tamsayı bağımsız değişkeni bekleniyor"
#: src/main/options.c:431
#: src/main/options.c:436
msgid "numeric argument expected"
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"
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"
msgstr "geçersiz süreç kimliği (ID)"
#: src/main/options.c:666
#: src/main/options.c:679
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Daha fazla bilgi için `%s --help' seçeneğini deneyin."
#: src/main/options.c:668
#: src/main/options.c:681
#, c-format
msgid "Try `%s -h' for more information."
msgstr "Daha fazla bilgi için `%s -h' seçeneğini deneyin."
#: src/main/options.c:699
#: src/main/options.c:712
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
@@ -332,27 +340,27 @@ msgstr ""
"dosya tanımlayıcılarını izlerken satır modu veya aktarım değiştirici "
"seçeneklerini kullanamaz"
#: src/main/options.c:708
#: src/main/options.c:721
msgid "cannot use cursor positioning when watching file descriptors"
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"
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"
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"
msgstr "/proc/self/fdinfo olmayan sistemlerde kullanılamaz"
#: src/main/remote.c:302
#: src/main/remote.c:304
msgid "message not received"
msgstr "mesaj alınamadı"
#: src/main/remote.c:429
#: src/main/remote.c:431
msgid "SA_SIGINFO not supported on this system"
msgstr "SA_SIGINFO bu sistemde desteklenmiyor"
@@ -397,37 +405,37 @@ msgstr "yzafpnum kMGTPEZY"
msgid "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"
msgstr "arabellek tahsisi başarısız oldu"
#: src/pv/display.c:807
#: src/pv/display.c:810
msgid "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"
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
msgid "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"
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
msgid "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"
msgstr "ETA"
#: src/pv/display.c:971
#: src/pv/display.c:974
msgid "FIN"
msgstr "FIN"
@@ -467,11 +475,11 @@ msgstr "oran min/ortalama/maks/standart sapma"
msgid "rate not measured"
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: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:377 src/pv/watchpid.c:398
#: 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 "pid"
@@ -479,7 +487,7 @@ msgstr "pid"
msgid "history structure allocation failed"
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"
msgstr "dosya listesi tahsisi başarısız oldu"
-2
View File
@@ -43,5 +43,3 @@ typedef bool _Bool;
# define true 1
# define __bool_true_false_are_defined 1
#endif
/* EOF */
+12
View File
@@ -91,6 +91,9 @@
/* Define to 1 if you have the <minix/config.h> header file. */
#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. */
#undef HAVE_NANOSLEEP
@@ -109,6 +112,9 @@
/* Define to 1 if you have the `setlocale' function. */
#undef HAVE_SETLOCALE
/* Define to 1 if you have the `setproctitle' function. */
#undef HAVE_SETPROCTITLE
/* Define to 1 if you have the `shmget' function. */
#undef HAVE_SHMGET
@@ -157,6 +163,9 @@
/* Define to 1 if `st_blksize' is a member of `struct stat'. */
#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. */
#undef HAVE_SYSCONF
@@ -223,6 +232,9 @@
/* Define to the version of this package. */
#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
required in a freestanding environment). This macro is provided for
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 *pidfile; /* PID 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 */
size_t lastwritten; /* show N bytes last written */
off_t rate_limit; /* rate limit, in bytes per second */
size_t buffer_size; /* buffer size, in bytes (0=default) */
off_t size; /* total size of data */
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 */
pid_t watch_pid; /* process to watch fds of */
int watch_fd; /* fd to watch */
@@ -93,5 +94,3 @@ extern bool opts_add_file(opts_t, const char *);
#endif
#endif /* _OPTIONS_H */
/* EOF */
+14 -6
View File
@@ -64,6 +64,9 @@ typedef enum {
#define PV_SIZEOF_FILE_FDPATH 4096
#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.
@@ -107,6 +110,7 @@ struct pvstate_s {
double delay_start; /* delay before first display */
/*@only@*/ /*@null@*/ char *name; /* display name */
/*@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 */
off_t error_skip_block; /* skip block size, 0 for adaptive */
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 width; /* screen width */
unsigned int height; /* screen height */
unsigned int extra_displays; /* bitmask of extra display destinations */
bool force; /* display even if not on terminal */
bool cursor; /* use cursor positioning */
bool numeric; /* numeric output only */
@@ -154,13 +159,13 @@ struct pvstate_s {
struct sigaction old_sigint;
struct sigaction old_sighup;
struct sigaction old_sigterm;
#ifdef SA_SIGINFO
#ifdef SIGINFO_PROVIDES_PID
struct sigaction old_sigusr2;
#endif
struct sigaction old_sigalrm;
struct timespec tstp_time; /* see pv_sig_tstp() / __cont() */
struct timespec toffset; /* total time spent stopped */
#ifdef SA_SIGINFO
#ifdef SIGINFO_PROVIDES_PID
volatile sig_atomic_t rxusr2; /* whether SIGUSR2 was received */
volatile pid_t sender; /* PID of sending process for SIGUSR2 */
#endif
@@ -182,7 +187,7 @@ struct pvstate_s {
/*****************
* Display state *
*****************/
struct {
struct pvdisplay_s {
struct { /* format string broken into display components */
size_t str_start; /* for strings: start offset */
@@ -211,6 +216,9 @@ struct pvstate_s {
} display;
/* Extra display for alternate outputs like a window title. */
struct pvdisplay_s extra_display;
/************************************
* Calculated state of the transfer *
************************************/
@@ -358,11 +366,13 @@ struct pvwatchfd_s {
};
typedef struct pvwatchfd_s *pvwatchfd_t;
typedef struct pvdisplay_s *pvdisplay_t;
void pv_error(pvstate_t, char *, ...);
int pv_main_loop(pvstate_t);
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);
ssize_t pv_transfer(pvstate_t, int, bool *, bool *, off_t, long *);
int pv_next_file(pvstate_t, unsigned int, int);
@@ -398,5 +408,3 @@ void pv_watchpid_setname(pvstate_t, pvwatchfd_t);
#endif
#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_name_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_fd_set(pvstate_t, int);
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);
#ifdef SA_SIGINFO
#ifdef SIGINFO_PROVIDES_PID
/*
* 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);
#if ! HAVE_SETPROCTITLE
void initproctitle(int, char **);
void setproctitle(const char *, ...);
#endif
#ifdef ENABLE_DEBUGGING
# if __STDC_VERSION__ < 199901L && !defined(__func__)
@@ -280,7 +285,7 @@ extern void pv_state_free(/*@only@*/ pvstate_t);
# endif
# define debug(x,...) debugging_output(__func__, __FILE__, __LINE__, x, __VA_ARGS__)
#else
# define debug(x,...) do { } while (0)
# define debug(x,...) /*@-noeffect@*/ do { } while (0) /*@+noeffect@*/
#endif
/*
@@ -299,5 +304,3 @@ void debugging_output(const char *, const char *, int, const char *, ...);
#endif
#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.
*/
void debugging_output_destination( __attribute__((unused))
void debugging_output_destination( /*@unused@ */ __attribute__((unused))
const char *filename)
{
}
@@ -109,14 +109,12 @@ void debugging_output_destination( __attribute__((unused))
/*
* Stub debugging output function.
*/
void debugging_output( __attribute__((unused))
const char *function, __attribute__((unused))
const char *file, __attribute__((unused))
int line, __attribute__((unused))
void debugging_output( /*@unused@ */ __attribute__((unused))
const char *function, /*@unused@ */ __attribute__((unused))
const char *file, /*@unused@ */ __attribute__((unused))
int line, /*@unused@ */ __attribute__((unused))
const char *format, ...)
{
}
#endif /* ENABLE_DEBUGGING */
/* EOF */
+20 -21
View File
@@ -298,18 +298,9 @@ void display_help(void)
{ "-a", "--average-rate", NULL,
N_("show data transfer average rate counter"),
{ 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,
N_("show number of bytes transferred"),
{ 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,
N_("show percentage of transfer buffer in use"),
{ 0, 0, 0, 0} },
@@ -319,9 +310,6 @@ void display_help(void)
{ "-F", "--format", N_("FORMAT"),
N_("set output format to FORMAT"),
{ 0, 0, 0, 0} },
{ "-v", "--stats", NULL,
N_("output transfer statistics at the end"),
{ 0, 0, 0, 0} },
{ "-n", "--numeric", NULL,
N_("output percentages, not visual information"),
{ 0, 0, 0, 0} },
@@ -329,6 +317,12 @@ void display_help(void)
N_("do not output any transfer information at all"),
{ 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,
N_("display nothing until first byte transferred"),
{ 0, 0, 0, 0} },
@@ -350,6 +344,9 @@ void display_help(void)
{ "-i", "--interval", N_("SEC"),
N_("update every SEC seconds"),
{ 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"),
N_("assume terminal is WIDTH characters wide"),
{ 0, 0, 0, 0} },
@@ -359,6 +356,12 @@ void display_help(void)
{ "-N", "--name", N_("NAME"),
N_("prefix visual information with NAME"),
{ 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,
N_("output even if standard error is not a terminal"),
{ 0, 0, 0, 0} },
@@ -399,20 +402,18 @@ void display_help(void)
{ "-U", "--store-and-forward", N_("FILE"),
N_("write all input to FILE before writing to output"),
{ 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"),
N_("update settings of process PID"),
{ 0, 0, 0, 0} },
#endif /* SA_SIGINFO */
#endif /* SIGINFO_PROVIDES_PID */
{ "", NULL, NULL, NULL, { 0, 0, 0, 0} },
{ "-P", "--pidfile", N_("FILE"),
N_("save process ID in FILE"),
{ 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,
N_("show this help and exit"),
{ 0, 0, 0, 0} },
@@ -607,5 +608,3 @@ void display_help(void)
printf("\n");
}
/* EOF */
+26 -7
View File
@@ -26,7 +26,10 @@ void pv_remote_init(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)
{
@@ -35,14 +38,27 @@ static int pv__write_pidfile(opts_t opts)
int pidfile_tmp_fd;
FILE *pidfile_tmp_fptr;
mode_t prev_umask;
const char *pidfile_template = "%s.XXXXXX";
if (NULL == opts->pidfile)
return 0;
pidfile_tmp_bufsize = 16 + strlen(opts->pidfile); /* flawfinder: ignore */
/*
* flawfinder rationale: pidfile was supplied as an argument
* so we have to assume it is \0 terminated.
* The buffer needs to be long enough to hold the pidfile with the
* 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);
if (NULL == pidfile_tmp_name) {
@@ -50,7 +66,7 @@ static int pv__write_pidfile(opts_t opts)
return PV_ERROREXIT_REMOTE_OR_PID;
}
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 */
prev_umask = umask(0000); /* flawfinder: ignore */
@@ -264,6 +280,10 @@ int main(int argc, char **argv)
int retcode = 0;
bool can_have_eta = true;
#if ! HAVE_SETPROCTITLE
initproctitle(argc, argv);
#endif
#ifdef ENABLE_NLS
/* Initialise language translation. */
(void) setlocale(LC_ALL, "");
@@ -474,6 +494,7 @@ int main(int argc, char **argv)
pv_state_size_set(state, opts->size);
pv_state_name_set(state, opts->name);
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_fd_set(state, opts->watch_fd);
pv_state_average_rate_window_set(state, opts->average_rate_window);
@@ -524,5 +545,3 @@ int main(int argc, char **argv)
return retcode;
}
/* EOF */
+15 -4
View File
@@ -19,10 +19,12 @@
#include <sys/sysmacros.h>
#ifdef major
#ifdef minor
#ifdef HAVE_STRUCT_STAT_ST_RDEV
#define CAN_BUILD_SYSFS_FILENAME 1
#endif
#endif
#endif
#endif
#include <fcntl.h>
#include <unistd.h>
#ifdef HAVE_GETOPT_H
@@ -57,6 +59,8 @@ void opts_free( /*@only@ */ opts_t opts)
free(opts->output);
if (NULL != opts->store_and_forward_file)
free(opts->store_and_forward_file);
if (NULL != opts->extra_display)
free(opts->extra_display);
if (NULL != opts->argv)
free(opts->argv);
/*@+keeptrans@ */
@@ -293,6 +297,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
{ "height", 1, NULL, (int) 'H' },
{ "name", 1, NULL, (int) 'N' },
{ "format", 1, NULL, (int) 'F' },
{ "extra-display", 1, NULL, (int) 'x' },
{ "stats", 0, NULL, (int) 'v' },
{ "rate-limit", 1, NULL, (int) 'L' },
{ "buffer-size", 1, NULL, (int) 'B' },
@@ -317,7 +322,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
/*@+nullassign@ */
int option_index = 0;
#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
"!:"
#endif
@@ -617,7 +622,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
}
break;
case 'R':
opts->remote = pv_getnum_count(optarg, false);
opts->remote = (pid_t) pv_getnum_count(optarg, false);
break;
case 'P':
opts->pidfile = pv_strdup(optarg);
@@ -635,6 +640,14 @@ opts_t opts_parse(unsigned int argc, char **argv)
return NULL;
}
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':
parse_pid = 0;
parse_fd = -1;
@@ -773,5 +786,3 @@ opts_t opts_parse(unsigned int argc, char **argv)
return opts;
}
/* EOF */
+8 -8
View File
@@ -21,7 +21,7 @@
#include <sys/time.h>
#include <sys/stat.h>
#ifdef SA_SIGINFO
#ifdef SIGINFO_PROVIDES_PID
void pv_error(pvstate_t, char *, ...);
struct remote_msg {
@@ -57,10 +57,12 @@ struct remote_msg {
* file associated with a particular process ID; it will be opened for
* 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)
{
int open_flags, open_mode, control_fd;
FILE *control_fptr;
/*@dependent@ */ FILE *control_fptr = NULL;
open_flags = O_RDONLY;
#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.
*/
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) {
pv_error(state, "%s", strerror(errno));
return PV_ERROREXIT_REMOTE_OR_PID;
@@ -331,7 +333,7 @@ void pv_remote_check(pvstate_t state)
memset(control_filename, 0, sizeof(control_filename));
control_fptr = pv__control_file(control_filename, sizeof(control_filename), signal_sender, false);
if (NULL == control_fptr) {
pv_error(state, "%s", strerror(errno));
pv_error(state, "%s: %s", control_filename, strerror(errno));
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)
{
@@ -432,5 +434,3 @@ int pv_remote_set( /*@unused@ */
}
#endif /* SA_SIGINFO */
/* EOF */
-2
View File
@@ -31,5 +31,3 @@ void display_version(void)
/* Project web site link */
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)
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);
}
}
/* 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.
*/
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 segment;
if (NULL == state)
return;
if (NULL == display)
return;
state->display.format_segment_count = 0;
memset(state->display.format, 0, PV_FORMAT_ARRAY_MAX * sizeof(state->display.format[0]));
memset(state->display.component, 0, PV_COMPONENT__MAX * sizeof(state->display.component[0]));
display->format_segment_count = 0;
memset(display->format, 0, PV_FORMAT_ARRAY_MAX * sizeof(display->format[0]));
memset(display->component, 0, PV_COMPONENT__MAX * sizeof(display->component[0]));
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);
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(). */
}
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;
/*
@@ -473,11 +475,11 @@ static void pv__format_init(pvstate_t state)
* of these segments together.
*/
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;
size_t str_start, str_length;
if ('%' == formatstr[strpos]) {
if ('%' == format_used[strpos]) {
unsigned long number_prefix;
#if HAVE_STRTOUL
char *number_end_ptr;
@@ -491,15 +493,15 @@ static void pv__format_init(pvstate_t state)
*/
#if HAVE_STRTOUL
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'))
break;
if (number_end_ptr > &(formatstr[strpos]))
strpos += (number_end_ptr - &(formatstr[strpos]));
if (number_end_ptr > &(format_used[strpos]))
strpos += (number_end_ptr - &(format_used[strpos]));
#else /* !HAVE_STRTOUL */
while (isdigit((int) (formatstr[strpos]))) {
while (isdigit((int) (format_used[strpos]))) {
number_prefix = number_prefix * 10;
number_prefix += formatstr[strpos] - '0';
number_prefix += format_used[strpos] - '0';
strpos++;
}
#endif /* !HAVE_STRTOUL */
@@ -508,7 +510,7 @@ static void pv__format_init(pvstate_t state)
str_start = 0;
str_length = 0;
switch (formatstr[strpos]) {
switch (format_used[strpos]) {
case 'p':
seg_type = PV_COMPONENT_PROGRESS;
break;
@@ -527,7 +529,7 @@ static void pv__format_init(pvstate_t state)
number_prefix = PV_SIZEOF_LASTOUTPUT_BUFFER;
if (number_prefix < 1)
number_prefix = 1;
state->display.lastoutput_length = (size_t) number_prefix;
display->lastoutput_length = (size_t) number_prefix;
break;
case 'r':
seg_type = PV_COMPONENT_RATE;
@@ -567,12 +569,12 @@ static void pv__format_init(pvstate_t state)
const char *searchptr;
int foundlength;
searchptr = strchr(&(formatstr[strpos]), '%');
searchptr = strchr(&(format_used[strpos]), '%');
if (NULL == searchptr) {
foundlength = (int) strlen(&(formatstr[strpos])); /* flawfinder: ignore */
/* flawfinder: formatstr is explicitly \0-terminated. */
foundlength = (int) strlen(&(format_used[strpos])); /* flawfinder: ignore */
/* flawfinder: format_used is explicitly \0-terminated. */
} else {
foundlength = searchptr - &(formatstr[strpos]);
foundlength = searchptr - &(format_used[strpos]);
}
seg_type = PV_COMPONENT_STRING;
@@ -583,12 +585,12 @@ static void pv__format_init(pvstate_t state)
}
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;
state->display.format[segment].str_start = str_start;
state->display.format[segment].str_length = str_length;
state->display.format_segment_count++;
display->format[segment].type = seg_type;
display->format[segment].str_start = str_start;
display->format[segment].str_length = str_length;
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.
*
* 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
* an average over the whole transfer; otherwise the current rate is shown.
*
* Returns true if the display buffer can be used, false if not.
*
* When returning true, this function will have also set
* state->display.display_string_len to the length of the string in
* state->display.display_buffer, in bytes.
* display->display_string_len to the length of the string in
* 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;
int static_portion_size;
pv_display_component component_type;
size_t segment;
size_t new_display_string_len;
const char *formatstr;
const char *format_used;
pv__transfercount_t count_type;
/* Quick safety check - state must exist. */
/* Quick safety check - state and display must exist. */
if (NULL == state)
return false;
if (NULL == display)
return false;
/*
* If the display options need reparsing, do so to generate new
* formatting parameters.
*/
if (0 != state->flag.reparse_display) {
pv__format_init(state);
state->flag.reparse_display = 0;
}
/* Reinitialise if we were asked to. */
if (reinitialise)
pv__format_init(state, format_supplied, display);
/* The format string is needed for the static segments. */
formatstr = state->control.format_string ? state->control.format_string : state->control.default_format;
if (NULL == formatstr)
format_used = NULL == format_supplied ? state->control.default_format : format_supplied;
if (NULL == format_used)
return false;
/* 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.
*/
if (state->display.display_buffer != NULL
&& state->display.display_buffer_size < (size_t) ((state->control.width * 2))) {
free(state->display.display_buffer);
state->display.display_buffer = NULL;
state->display.display_buffer_size = 0;
if (display->display_buffer != NULL && display->display_buffer_size < (size_t) ((state->control.width * 2))) {
free(display->display_buffer);
display->display_buffer = NULL;
display->display_buffer_size = 0;
}
/*
* Allocate output buffer if there isn't one.
*/
if (NULL == state->display.display_buffer) {
if (NULL == display->display_buffer) {
char *new_buffer;
size_t new_size;
@@ -677,13 +680,13 @@ bool pv_format(pvstate_t state, bool final)
if (NULL == new_buffer) {
pv_error(state, "%s: %s", _("buffer allocation failed"), strerror(errno));
state->status.exit_status |= PV_ERROREXIT_MEMORY;
state->display.display_buffer = NULL;
display->display_buffer = NULL;
return false;
}
state->display.display_buffer = new_buffer;
state->display.display_buffer_size = new_size;
state->display.display_buffer[0] = '\0';
display->display_buffer = new_buffer;
display->display_buffer_size = new_size;
display->display_buffer[0] = '\0';
}
/*
@@ -713,14 +716,14 @@ bool pv_format(pvstate_t state, bool final)
show_percentage = true;
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 ? "" : " ",
state->transfer.elapsed_seconds);
first_item = false;
}
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),
"%s%lld", first_item ? "" : " ",
(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';
if (state->display.component[PV_COMPONENT_RATE].required) {
if (display->component[PV_COMPONENT_RATE].required) {
(void) pv_snprintf(msg_rate, sizeof(msg_rate),
"%s%.4Lf", first_item ? "" : " ",
((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;
}
(void) pv_snprintf(state->display.display_buffer,
state->display.display_buffer_size, "%.39s%.39s%.39s%.39s\n", msg_timer, msg_bytes,
(void) pv_snprintf(display->display_buffer,
display->display_buffer_size, "%.39s%.39s%.39s%.39s\n", msg_timer, msg_bytes,
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(). */
return true;
@@ -771,7 +774,7 @@ bool pv_format(pvstate_t state, bool final)
struct tm *time_ptr;
char *time_format;
if (!state->display.component[component_type].required)
if (!display->component[component_type].required)
continue;
/*
@@ -781,12 +784,12 @@ bool pv_format(pvstate_t state, bool final)
*/
if (state->control.size < 1
&& ((component_type == PV_COMPONENT_ETA) || (component_type == PV_COMPONENT_FINETA))) {
state->display.component[component_type].content[0] = '\0';
state->display.component[component_type].length = 0;
display->component[component_type].content[0] = '\0';
display->component[component_type].length = 0;
continue;
}
component_content = state->display.component[component_type].content;
component_content = display->component[component_type].content;
component_content[0] = '\0';
component_buf_size = PV_SIZEOF_COMPONENT_STR;
@@ -879,8 +882,8 @@ bool pv_format(pvstate_t state, bool final)
case PV_COMPONENT_ETA:
/* Estimated time remaining until completion - if size is known. */
eta =
pv__seconds_remaining((state->transfer.transferred - state->display.initial_offset),
state->control.size - state->display.initial_offset,
pv__seconds_remaining((state->transfer.transferred - display->initial_offset),
state->control.size - display->initial_offset,
state->calc.current_avg_rate);
/*
@@ -934,8 +937,8 @@ bool pv_format(pvstate_t state, bool final)
*/
eta =
pv__seconds_remaining(state->transfer.transferred - state->display.initial_offset,
state->control.size - state->display.initial_offset,
pv__seconds_remaining(state->transfer.transferred - display->initial_offset,
state->control.size - display->initial_offset,
state->calc.current_avg_rate);
/*
@@ -1012,9 +1015,9 @@ bool pv_format(pvstate_t state, bool final)
case PV_COMPONENT_OUTPUTBUF:
/* 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;
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] = '\0';
@@ -1025,7 +1028,7 @@ bool pv_format(pvstate_t state, bool final)
}
/* 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(). */
}
@@ -1036,11 +1039,11 @@ bool pv_format(pvstate_t state, bool final)
* (i.e. the progress bar).
*/
static_portion_size = 0;
for (segment = 0; segment < state->display.format_segment_count; segment++) {
if (state->display.format[segment].type == PV_COMPONENT_STRING) {
static_portion_size += state->display.format[segment].str_length;
} else if (state->display.format[segment].type != PV_COMPONENT_PROGRESS) {
static_portion_size += state->display.component[state->display.format[segment].type].length;
for (segment = 0; segment < display->format_segment_count; segment++) {
if (display->format[segment].type == PV_COMPONENT_STRING) {
static_portion_size += display->format[segment].str_length;
} else if (display->format[segment].type != PV_COMPONENT_PROGRESS) {
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.
*/
if (state->display.component[PV_COMPONENT_PROGRESS].required) {
if (display->component[PV_COMPONENT_PROGRESS].required) {
char *component_content;
size_t component_buf_size;
char after_bar[32]; /* flawfinder: ignore - only populated by pv_snprintf(). */
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_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. */
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(). */
/*
* 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) {
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.
*/
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;
for (segment = 0; segment < state->display.format_segment_count; segment++) {
for (segment = 0; segment < display->format_segment_count; segment++) {
const char *segment_content;
size_t segment_length;
if (state->display.format[segment].type == PV_COMPONENT_STRING) {
segment_content = &(formatstr[state->display.format[segment].str_start]);
segment_length = state->display.format[segment].str_length;
if (display->format[segment].type == PV_COMPONENT_STRING) {
segment_content = &(format_used[display->format[segment].str_start]);
segment_length = display->format[segment].str_length;
} else {
segment_content = state->display.component[state->display.format[segment].type].content;
segment_length = state->display.component[state->display.format[segment].type].length;
segment_content = display->component[display->format[segment].type].content;
segment_length = display->component[display->format[segment].type].length;
}
/* 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
* overflow the buffer.
*/
if (segment_length + new_display_string_len > state->display.display_buffer_size - 2)
segment_length = state->display.display_buffer_size - new_display_string_len - 2;
if (segment_length + new_display_string_len > display->display_buffer_size - 2)
segment_length = display->display_buffer_size - new_display_string_len - 2;
if (segment_length < 1)
break;
@@ -1228,7 +1231,7 @@ bool pv_format(pvstate_t state, bool final)
break;
/* 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. */
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);
/* 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. */
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
* spaces at the end, so that we don't leave dangling bits behind.
*/
if ((new_display_string_len < state->display.display_string_len)
&& (state->control.width >= state->display.prev_screen_width)) {
if ((new_display_string_len < display->display_string_len)
&& (state->control.width >= display->prev_screen_width)) {
char spaces[32]; /* flawfinder: ignore - terminated, bounded */
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 */
if (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) {
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;
state->display.prev_screen_width = state->control.width;
display->display_string_len = new_display_string_len;
display->prev_screen_width = state->control.width;
return true;
}
@@ -1278,6 +1281,8 @@ bool pv_format(pvstate_t state, bool final)
*/
void pv_display(pvstate_t state, bool final)
{
bool reinitialise = false;
if (NULL == state)
return;
@@ -1285,9 +1290,23 @@ void pv_display(pvstate_t state, bool 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;
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)
return;
@@ -1307,6 +1326,23 @@ void pv_display(pvstate_t state, bool final)
}
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() */
#endif
}
/* EOF */
-2
View File
@@ -447,5 +447,3 @@ int pv_next_file(pvstate_t state, unsigned int filenum, int oldfd)
/*@+onlytrans@ */
/*@+observertrans@ */
}
/* EOF */
+2 -2
View File
@@ -649,6 +649,7 @@ int pv_watchfd_loop(pvstate_t state)
state->display.initial_offset = position_now;
first_check = false;
}
state->transfer.transferred = 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) {
info_array[idx].state->transfer.transferred = position_now;
info_array[idx].state->transfer.total_written = position_now;
pv_display(info_array[idx].state, false);
displayed_lines++;
@@ -1023,5 +1025,3 @@ int pv_watchpid_loop(pvstate_t state)
return 0;
}
/* EOF */
-2
View File
@@ -295,5 +295,3 @@ int pv_percentage(off_t amount, const off_t total)
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
* the sending PID.
@@ -239,8 +239,8 @@ static void pv_sig_usr2( /*@unused@ */ __attribute__((unused))
return;
if (NULL == info)
return;
pv_sig_state->signal.rxusr2 = 1;
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;
(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
* 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(SIGHUP, &(pv_sig_state->signal.old_sighup), 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);
#endif
(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);
#endif
}
/* EOF */
+63 -2
View File
@@ -61,6 +61,9 @@ void pv_state_reset(pvstate_t state)
state->display.initial_offset = 0;
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()
* is not recommended for this.
@@ -190,6 +193,10 @@ void pv_state_free(pvstate_t state)
free(state->display.display_buffer);
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) {
free(state->control.name);
state->control.name = NULL;
@@ -200,6 +207,11 @@ void pv_state_free(pvstate_t state)
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@ */
if (NULL != 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);
}
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)
{
state->control.watch_pid = val;
@@ -527,5 +590,3 @@ void pv_state_inputfiles(pvstate_t state, unsigned int input_file_count, const c
/*@+nullstate@*/
/* 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;
#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;
}
/* EOF */
+7 -2
View File
@@ -281,6 +281,13 @@ off_t pv_watchfd_position(pvwatchfd_t info)
(void) fclose(fptr);
#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;
}
@@ -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);
}
/* EOF */
@@ -4,8 +4,8 @@
# 1MiB, described here:
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=586763
# 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.
#
@@ -28,5 +28,3 @@ test "${lineLengthCount}" = "1" && exit 0
echo "variable line lengths detected"
tr '\r' '\n' < "${workFile1}"
exit 1
# EOF
@@ -4,7 +4,8 @@
# but for rate, not bytes transferred.
# 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.
#
@@ -29,5 +30,3 @@ test "${lineLengthCount}" = "1" && exit 0
echo "variable line lengths detected"
tr '\r' '\n' < "${workFile1}"
exit 1
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
#
# Test that "make install" installs the expected minimum set of files.
# 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'}"
makeDir="${testSubject%/*}"
if ! test -d "${makeDir}"; then
@@ -39,5 +39,3 @@ fi
rm -rf "${testInstallDir}"
exit "${exitStatus}"
# EOF
+2 -4
View File
@@ -3,8 +3,8 @@
# Check that the average transfer rate counter changes, but not more than it
# should.
# 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 210 bytes as 100 bytes, a 1 second gap, 110 bytes, and another 1
# second gap.
@@ -27,5 +27,3 @@ test "${lineCount}" -lt 2 && exit 0
echo "average rate varied more than expected"
tr '\r' '\n' < "${workFile1}"
exit 1
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
#
# Check that the byte counter counts in bits when --bits is selected.
# 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'}"
dd if=/dev/zero bs=100 count=1 2>/dev/null \
| "${testSubject}" -f -b -8 >/dev/null 2>"${workFile1}"
@@ -13,5 +13,3 @@ test "${counterValue}" = "800b" && exit 0
echo "unexpected bit counter value: ${counterValue}"
exit 1
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
#
# Check that "--buffer-percent" displays correctly.
# 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'}"
# 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.
@@ -17,5 +17,3 @@ test "${differentLines}" -gt 1 && exit 0
echo "expected output changes not seen"
tr '\r' '\n' < "${workFile1}" | sed 's/^ *$/d' | sort | uniq
exit 1
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
#
# Check that the byte counter counts.
# 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'}"
dd if=/dev/zero bs=100 count=1 2>/dev/null \
| "${testSubject}" -f -b >/dev/null 2>"${workFile1}"
@@ -13,5 +13,3 @@ test "${counterValue}" = "100B" && exit 0
echo "unexpected byte counter value: ${counterValue}"
exit 1
# EOF
@@ -2,8 +2,8 @@
#
# Check that the estimated time counter counts.
# 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'}"
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}"
@@ -29,5 +29,3 @@ if ! test "${valueCount}" -lt 12; then
fi
exit 0
# EOF
@@ -2,8 +2,8 @@
#
# Check that the estimated time counter can show the end time of day.
# 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'}"
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}"
@@ -28,5 +28,3 @@ if ! test "${valueCount}" -lt 8; then
fi
exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
#
# Check that "--last-written" works.
# 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'}"
# 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
@@ -30,5 +30,3 @@ if ! test "${lastLine}" = "${expectedLastLine}"; then
fi
exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
#
# Check that numeric output outputs some percentages.
# 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'}"
# Process 100 bytes at 100 bytes per second, updating every 0.1 seconds for
# around 10 output lines.
@@ -31,5 +31,3 @@ if ! test "${finalLine}" = "100"; then
fi
exit 0
# EOF
+2 -4
View File
@@ -3,8 +3,8 @@
# Check that numeric output gives a byte count instead of a percentage when
# used with -b.
# 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'}"
# Process 500 bytes at 500 bytes per second, updating every 0.1 seconds for
# around 10 output lines.
@@ -30,5 +30,3 @@ if ! test "${finalLine}" = "500"; then
echo "final byte count was not 500 (${finalLine})"
exit 1
fi
# EOF
@@ -3,8 +3,9 @@
# Check that numeric output shows line counts instead of percentages, when
# used in line mode together with bytes mode.
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"
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'}"
# Pass through 100 lines.
#
@@ -33,5 +34,3 @@ if ! test "${finalStdoutLine}" = "100"; then
fi
exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
#
# Check that numeric output gives a timer when used with -t.
# 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'}"
# Process 100 bytes at 100 bytes per second, updating every 0.1 seconds for
# around 10 output lines.
@@ -37,5 +37,3 @@ if ! test "${finalPercentage}" = "100"; then
fi
exit 0
# EOF
@@ -2,8 +2,8 @@
#
# Check that the progress bar moves when data is coming in.
# 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'}"
dd if=/dev/zero bs=100 count=1 2>/dev/null \
| "${testSubject}" -f -p -i 0.1 -L 500 >/dev/null 2>"${workFile1}"
@@ -18,5 +18,3 @@ if ! test "${lineCount}" -gt 2; then
fi
exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
#
# Check that the progress bar increases in size when data is coming in.
# 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'}"
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}"
@@ -28,5 +28,3 @@ if ! test "${differentBarLengthsCount}" -gt 5; then
fi
exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
#
# Check that the -q option shuts everything up.
# 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'}"
dd if=/dev/zero bs=1000 count=5 2>/dev/null \
| "${testSubject}" -f -q -i 0.1 -L 5000 >/dev/null 2>"${workFile1}"
@@ -15,5 +15,3 @@ if test -s "${workFile1}"; then
fi
exit 0
# EOF
@@ -2,8 +2,8 @@
#
# Check that the transfer rate counter changes.
# 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 200 bytes as two 100-byte blocks with a 2-second gap between.
#
@@ -27,5 +27,3 @@ if ! test "${rateCount}" -gt 2; then
fi
exit 0
# EOF
@@ -2,8 +2,8 @@
#
# Check that the elapsed time counter does count up.
# 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 a zero amount of data, but take 3 seconds to do it.
#
@@ -18,5 +18,3 @@ if ! test "${valueCount}" -gt 1; then
fi
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
# manual.
# 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'}"
# Check we can run "kill -s 0".
if ! kill -s 0 $$ >/dev/null 2>&1; then
@@ -46,5 +46,3 @@ if ! test "${pidValid}" = "1"; then
fi
exit 0
# EOF
@@ -2,8 +2,7 @@
#
# Check that size arguments are processed correctly.
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"
true "${testSubject:?not set - call this from 'make check'}"
# Pass size argument $1 and check that the last reported number is $2.
checkSizeArgument () {
@@ -20,5 +19,3 @@ checkSizeArgument 1M 1048576
checkSizeArgument 8G 8589934592
exit 0
# EOF
+1 -4
View File
@@ -2,8 +2,7 @@
#
# Check that data can be just passed straight through.
# Dummy assignment for "shellcheck".
testSubject="${testSubject:-false}"
true "${testSubject:?not set - call this from 'make check'}"
inputString="TESTING"
outputString=$(printf "%s" "${inputString}" | "${testSubject}" 2>/dev/null) || { echo "unexpected failure code"; exit 1; }
@@ -23,5 +22,3 @@ if ! test "${inputString}" = "${outputString}"; then
fi
exit 0
# EOF
+3 -4
View File
@@ -3,8 +3,9 @@
# Transfer a large chunk of data through pv and check data correctness
# afterwards.
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"
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'}"
# generate some data
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
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
# bursty fashion, and check data correctness afterwards.
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"
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'}"
# generate some data
dd if=/dev/urandom of="${workFile1}" bs=1024 count=10240 2>/dev/null
@@ -52,5 +53,3 @@ if ! test "${inputChecksum}" = "${outputChecksum}"; then
fi
exit 0
# EOF
+3 -4
View File
@@ -2,8 +2,9 @@
#
# Make sure that files larger than 2GB are supported.
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"
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'}"
# Check there is enough free space for this test.
workFile1Dir="${workFile1%/*}"
@@ -76,5 +77,3 @@ if ! test "${bytesReported}" -eq "${fileSize}"; then
fi
exit 0
# EOF
+1 -4
View File
@@ -2,8 +2,7 @@
#
# Check that there is no SIGPIPE or dropped data on bigger data transfers.
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"
true "${testSubject:?not set - call this from 'make check'}"
# We nead GNU head. On some platforms it is named ghead instead of head.
HEAD="head"
@@ -36,5 +35,3 @@ if ! test "${stopAtByteCount}" = "${bytesTransferred}"; then
fi
exit 0
# EOF
@@ -3,8 +3,11 @@
# Try repeatedly messaging a transfer process, and make sure the data stays
# intact.
# Dummy assignments for "shellcheck".
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.
if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then
@@ -57,5 +60,3 @@ if ! test "${inputChecksum}" = "${outputChecksum}"; then
fi
exit 0
# EOF
+6 -4
View File
@@ -3,8 +3,12 @@
# Run valgrind's memory checker against a process using various different
# transfer options.
# Dummy assignments for "shellcheck".
sourcePath="${sourcePath:-.}"; testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"; workFile3="${workFile3:-.tmp3}"; workFile4="${workFile4:-.tmp4}"
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"
@@ -34,5 +38,3 @@ seq -w 3 1 100 \
| { runWithValgrind -bnl -i 0.2 -f -L 100 2>"${workFile1}" > "${workFile2}"; } 4>&1 || exit 1
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.
# Dummy assignments for "shellcheck".
sourcePath="${sourcePath:-.}"; testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"; workFile3="${workFile3:-.tmp3}"; workFile4="${workFile4:-.tmp4}"
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'}"
# Do nothing if it is not supported.
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
exit 0
# EOF
@@ -3,8 +3,12 @@
# Run valgrind's memory checker while using remote control to control
# another process.
# Dummy assignments for "shellcheck".
sourcePath="${sourcePath:-.}"; testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"; workFile3="${workFile3:-.tmp3}"; workFile4="${workFile4:-.tmp4}"
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'}"
# Do nothing if it is not supported.
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
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
# data is not being corrupted.
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"
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'}"
# generate some data
dd if=/dev/urandom of="${workFile1}" bs=1024 count=2560 2>/dev/null
@@ -51,5 +52,3 @@ if ! test "${doubleInputChecksum}" = "${outputChecksum}"; then
fi
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
# when it is not, providing stderr is a file.
# 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'}"
dd if=/dev/zero bs=100 count=1 2>/dev/null \
| "${testSubject}" -f -p -i 0.1 -L 100 >/dev/null 2>"${workFile1}"
@@ -32,5 +32,3 @@ if test -s "${workFile1}"; then
fi
exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
#
# Check that the update interval can be set.
# 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'}"
sleep 1 | "${testSubject}" -f -i 0.1 >/dev/null 2>"${workFile1}"
@@ -17,5 +17,3 @@ if ! test "${lineCount}" -gt 6; then
fi
exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
#
# Check that line mode counts lines instead of bytes.
# 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'}"
# Pass through 100 lines.
#
@@ -28,5 +28,3 @@ if ! test "${lineCount}" -gt 3; then
fi
exit 0
# EOF
+2 -4
View File
@@ -2,8 +2,8 @@
#
# Check that "--size" affects the percentage shown.
# 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'}"
# Process 100 bytes at 100 bytes per second, updating every 0.1 seconds for
# around 10 output lines, but set the size to 200.
@@ -52,5 +52,3 @@ if ! test "${finalLine}" = "200"; then
fi
exit 0
# EOF
+3 -4
View File
@@ -3,8 +3,9 @@
# Similar to the "--size" check but, instead, using another file's size with
# "--size @".
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"
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'}"
# 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
@@ -45,5 +46,3 @@ sizeCheck 200 50
sizeCheck 50 200
exit 0
# EOF
+3 -4
View File
@@ -5,8 +5,9 @@
# check that fdatasync() is actually being called, it just checks that data
# is not being corrupted.
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"
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'}"
# generate some data
dd if=/dev/urandom of="${workFile1}" bs=1024 count=2560 2>/dev/null
@@ -41,5 +42,3 @@ if ! test "${inputChecksum}" = "${outputChecksum}"; then
fi
exit 0
# EOF
+3 -4
View File
@@ -2,8 +2,9 @@
#
# Check that the terminal width is detected on startup.
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"
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 `tmux' is not available.
if ! command -v tmux >/dev/null 2>&1; then
@@ -86,5 +87,3 @@ widthTest 400
widthTest 20
exit 0
# EOF
+1 -4
View File
@@ -2,8 +2,7 @@
#
# A simple test of rate limiting.
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"
true "${testSubject:?not set - call this from 'make check'}"
# Transfer 102 bytes at 100 bytes/sec. It should take at least 1 second.
#
@@ -17,5 +16,3 @@ if test "${startTime}" = "${endTime}"; then
fi
exit 0
# EOF
+5 -4
View File
@@ -2,8 +2,11 @@
#
# Try changing the format of a transfer remotely.
# Dummy assignments for "shellcheck".
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.
if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then
@@ -32,5 +35,3 @@ if ! test "${line_lengths}" -gt 1; then
fi
exit 0
# EOF
+3 -4
View File
@@ -2,8 +2,9 @@
#
# Make sure -S stops at the given size.
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"
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'}"
# generate some data
dd if=/dev/urandom of="${workFile1}" bs=1024 count=10 2>/dev/null
@@ -23,5 +24,3 @@ if ! test "${inputChecksum}" = "${outputChecksum}"; then
fi
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.
valgrindOutputFile="valgrind.out"
# Dummy assignments for "shellcheck".
testSubject="${testSubject:-false}"; workFile4="${workFile4:-.tmp4}"
true "${testSubject:?not set - call this from 'make check'}"
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
echo "test requires \`valgrind'"
@@ -36,13 +37,27 @@ done
runWithValgrind () {
cat > "${workFile5}" <<EOF
{
ignore-initproctitle-leak
Memcheck:Leak
fun:malloc
fun:initproctitle
fun:main
}
EOF
true > "${workFile4}"
valgrind --tool=memcheck \
--verbose --show-error-list=yes --log-fd=3 \
--verbose \
--show-error-list=yes \
--suppressions="${workFile5}" \
--log-file="${workFile4}" \
--error-exitcode=125 \
--track-fds=yes \
--leak-check=full \
"${testSubject}" "$@" \
3>"${workFile4}" 4<&-
4<&- 9<&-
returnValue=$?
@@ -62,5 +77,3 @@ runWithValgrind () {
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
# 99 for a fatal error with the test framework.
true "${srcdir:?not set - call this from 'make check'}"
# Parameters.
testSubject="./pv"
sourcePath="${srcdir}"
@@ -20,9 +22,10 @@ workFile1=$(mktemp 2>/dev/null) || workFile1="./.tmp1"
workFile2=$(mktemp 2>/dev/null) || workFile2="./.tmp2"
workFile3=$(mktemp 2>/dev/null) || workFile3="./.tmp3"
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.
trap 'rm -f "${workFile1}" "${workFile2}" "${workFile3}" "${workFile4}"' EXIT
trap 'rm -f "${workFile1}" "${workFile2}" "${workFile3}" "${workFile4}" "${workFile5}"' EXIT
# Variables used by the test scripts.
export testSubject sourcePath workFile1 workFile2 workFile3 workFile4
export testSubject sourcePath workFile1 workFile2 workFile3 workFile4 workFile5