Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
16177a3b9d | ||
|
|
16a16460fc | ||
|
|
24d3351d5d | ||
|
|
daa06e5415 | ||
|
|
dc6cd1819d | ||
|
|
1ef1d858f8 | ||
|
|
74c75d36cc | ||
|
|
7a4264fe1e | ||
|
|
5decddeb42 | ||
|
|
0f08153214 | ||
|
|
5c3743e1f8 | ||
|
|
4a287f96fd | ||
|
|
0c35ae8d9e | ||
|
|
ddb2ff9b06 | ||
|
|
32398dd5fb | ||
|
|
cec252f98f | ||
|
|
c186198a7e | ||
|
|
ec46261757 | ||
|
|
ff0355ca9c | ||
|
|
2bd364fee8 | ||
|
|
823350a186 | ||
|
|
c58ddb4d66 | ||
|
|
447ec06234 | ||
|
|
21ca350946 | ||
|
|
46902e1c0c | ||
|
|
02bf302f96 | ||
|
|
76327fdf01 | ||
|
|
0044ed18ae | ||
|
|
a9bbb55220 | ||
|
|
69a2358d47 | ||
|
|
8664395e5b | ||
|
|
3c09b31f92 | ||
|
|
43e2eaa4db | ||
|
|
f3e98da13b | ||
|
|
25eaa2661a | ||
|
|
4f58a3d751 | ||
|
|
7d18083dda | ||
|
|
f0aca0a2ce | ||
|
|
18c76175b2 | ||
|
|
6dbde0c559 | ||
|
|
8fa9df6e7a | ||
|
|
e3382b1a62 | ||
|
|
29c7a21725 | ||
|
|
7a0ee9c7fa | ||
|
|
cb71277df4 | ||
|
|
9f5923864b | ||
|
|
60563f3e3c | ||
|
|
c49abf1608 | ||
|
|
250a794873 | ||
|
|
78f4a60bf7 | ||
|
|
2a93e33d38 | ||
|
|
5efd4d045f | ||
|
|
0516ba53bd | ||
|
|
1d76c0bc64 | ||
|
|
73bc1ab139 | ||
|
|
35fdb331e4 | ||
|
|
9ceda2059d | ||
|
|
0e24c9f453 | ||
|
|
ad54067b48 | ||
|
|
e99a58b430 | ||
|
|
51a5de71c1 | ||
|
|
06eca8cefa | ||
|
|
a4494159ea | ||
|
|
c95e25776e | ||
|
|
c2a5be6aa9 | ||
|
|
135eb71a75 | ||
|
|
af99120067 | ||
|
|
2d28520ae4 | ||
|
|
35d5b9efab | ||
|
|
f495303177 | ||
|
|
fb2e6b4074 | ||
|
|
4ffdee0002 | ||
|
|
5c5d53e1d1 | ||
|
|
269d2f5729 | ||
|
|
57149c2d03 | ||
|
|
838ebcb78f | ||
|
|
6298a7be9d | ||
|
|
cfea00b200 | ||
|
|
3d52919411 | ||
|
|
52ea1b5ba2 | ||
|
|
619a84949f | ||
|
|
c3648af57f | ||
|
|
53b5ea54c6 | ||
|
|
c4c7b9ec00 | ||
|
|
b428e7613d | ||
|
|
0e9534c10e | ||
|
|
7f8aa3f985 | ||
|
|
238e07e7d7 | ||
|
|
b6462ad865 | ||
|
|
2d7d854a97 | ||
|
|
0626737a15 | ||
|
|
17a1c9d639 | ||
|
|
31ea20dbd3 | ||
|
|
97c48c8901 | ||
|
|
bb339ba519 | ||
|
|
499f8418bf | ||
|
|
b84432ec7f | ||
|
|
111b514a05 | ||
|
|
90829dad51 | ||
|
|
943e433f7e | ||
|
|
02e6d0e04c | ||
|
|
1e7c92a107 | ||
|
|
2a97d699a8 | ||
|
|
2d0321e544 | ||
|
|
ebb209a371 | ||
|
|
ddd9430bc9 | ||
|
|
cc37877607 | ||
|
|
b35591ff8d | ||
|
|
29423f1f9a | ||
|
|
d51c57379a |
+18
-5
@@ -5,10 +5,10 @@ AUTOMAKE_OPTIONS = subdir-objects
|
|||||||
SUBDIRS = po
|
SUBDIRS = po
|
||||||
|
|
||||||
bin_PROGRAMS = pv
|
bin_PROGRAMS = pv
|
||||||
dist_doc_DATA = README.md docs/INSTALL docs/COPYING docs/NEWS.md docs/ACKNOWLEDGEMENTS.md docs/DEVELOPERS.md docs/benchmark.sh
|
dist_doc_DATA = README.md docs/INSTALL docs/COPYING docs/NEWS.md docs/ACKNOWLEDGEMENTS.md docs/DEVELOPERS.md
|
||||||
dist_man1_MANS = docs/pv.1
|
dist_man1_MANS = docs/pv.1
|
||||||
|
|
||||||
EXTRA_DIST = docs/pv.1.md
|
EXTRA_DIST = docs/pv.1.md docs/benchmark.sh docs/test-on-vm-lab.sh docs/build-package.sh docs/release.sh
|
||||||
|
|
||||||
pv_SOURCES = \
|
pv_SOURCES = \
|
||||||
src/main/debug.c \
|
src/main/debug.c \
|
||||||
@@ -22,6 +22,19 @@ src/pv/cursor.c \
|
|||||||
src/pv/display.c \
|
src/pv/display.c \
|
||||||
src/pv/elapsedtime.c \
|
src/pv/elapsedtime.c \
|
||||||
src/pv/file.c \
|
src/pv/file.c \
|
||||||
|
src/pv/format/averagerate.c \
|
||||||
|
src/pv/format/barstyle.c \
|
||||||
|
src/pv/format/bufferpercent.c \
|
||||||
|
src/pv/format/bytes.c \
|
||||||
|
src/pv/format/eta.c \
|
||||||
|
src/pv/format/fineta.c \
|
||||||
|
src/pv/format/lastwritten.c \
|
||||||
|
src/pv/format/name.c \
|
||||||
|
src/pv/format/previousline.c \
|
||||||
|
src/pv/format/progressbar.c \
|
||||||
|
src/pv/format/rate.c \
|
||||||
|
src/pv/format/sgr.c \
|
||||||
|
src/pv/format/timer.c \
|
||||||
src/pv/loop.c \
|
src/pv/loop.c \
|
||||||
src/pv/number.c \
|
src/pv/number.c \
|
||||||
src/pv/proctitle.c \
|
src/pv/proctitle.c \
|
||||||
@@ -102,10 +115,10 @@ SUFFIXES = .c .o .e
|
|||||||
-flawfinder $< >> $@ 2>&1
|
-flawfinder $< >> $@ 2>&1
|
||||||
|
|
||||||
indent:
|
indent:
|
||||||
cd $(srcdir) && indent -npro -kr -i8 -cd42 -c45 -l120 src/*/*.c
|
cd $(srcdir) && indent -npro -kr -i8 -cd42 -c45 -l120 src/*/*.c src/*/*/*.c
|
||||||
|
|
||||||
indentclean:
|
indentclean:
|
||||||
rm -f $(srcdir)/*/*.c~
|
rm -f $(srcdir)/src/*/*.c~ $(srcdir)/src/*/*/*.c~
|
||||||
|
|
||||||
analyse: $(pv_SOURCES:.c=.e) FORCE
|
analyse: $(pv_SOURCES:.c=.e) FORCE
|
||||||
grep -E -e '^Finished checking --' -e 'Hits = ' $+ 2>/dev/null || true
|
grep -E -e '^Finished checking --' -e 'Hits = ' $+ 2>/dev/null || true
|
||||||
@@ -113,7 +126,7 @@ analyse: $(pv_SOURCES:.c=.e) FORCE
|
|||||||
FORCE:
|
FORCE:
|
||||||
|
|
||||||
clean-local:
|
clean-local:
|
||||||
rm -f src/*/*.e
|
rm -f src/*/*.e src/*/*/*.e
|
||||||
|
|
||||||
# Convenience alias for "make check": "make test"
|
# Convenience alias for "make check": "make test"
|
||||||
test: check
|
test: check
|
||||||
|
|||||||
+31
-7
@@ -4,7 +4,7 @@ dnl Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood
|
|||||||
dnl
|
dnl
|
||||||
dnl License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
dnl License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
|
||||||
AC_INIT([pv], [1.9.7], [pv@ivarch.com], [pv], [https://www.ivarch.com/programs/pv.shtml])
|
AC_INIT([pv], [1.9.25], [pv@ivarch.com], [pv], [https://www.ivarch.com/programs/pv.shtml])
|
||||||
AC_CONFIG_SRCDIR([src/include/config.h.in])
|
AC_CONFIG_SRCDIR([src/include/config.h.in])
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
AC_CONFIG_HEADERS([src/include/config.h])
|
AC_CONFIG_HEADERS([src/include/config.h])
|
||||||
@@ -33,6 +33,7 @@ AC_CHECK_FUNCS([setitimer])
|
|||||||
AC_CHECK_FUNCS([setproctitle])
|
AC_CHECK_FUNCS([setproctitle])
|
||||||
AC_CHECK_HEADERS([getopt.h])
|
AC_CHECK_HEADERS([getopt.h])
|
||||||
AC_CHECK_HEADERS([limits.h])
|
AC_CHECK_HEADERS([limits.h])
|
||||||
|
AC_CHECK_HEADERS([langinfo.h])
|
||||||
AC_CHECK_HEADERS([wctype.h])
|
AC_CHECK_HEADERS([wctype.h])
|
||||||
AC_CHECK_HEADERS([termios.h])
|
AC_CHECK_HEADERS([termios.h])
|
||||||
AC_CHECK_HEADERS([libgen.h])
|
AC_CHECK_HEADERS([libgen.h])
|
||||||
@@ -40,10 +41,13 @@ AC_CHECK_HEADERS([sys/ioctl.h])
|
|||||||
AC_CHECK_HEADERS([libintl.h locale.h])
|
AC_CHECK_HEADERS([libintl.h locale.h])
|
||||||
AC_CHECK_HEADERS([sys/sysmacros.h])
|
AC_CHECK_HEADERS([sys/sysmacros.h])
|
||||||
AC_CHECK_MEMBERS([struct stat.st_blksize])
|
AC_CHECK_MEMBERS([struct stat.st_blksize])
|
||||||
|
AC_CHECK_DECLS([SA_SIGINFO], [], [], [[#include <signal.h>]])
|
||||||
|
|
||||||
AC_SEARCH_LIBS([sqrtl],[m])
|
AC_SEARCH_LIBS([sqrtl],[m])
|
||||||
|
AC_SEARCH_LIBS([fmod],[m])
|
||||||
AC_CHECK_HEADERS([math.h])
|
AC_CHECK_HEADERS([math.h])
|
||||||
AC_CHECK_FUNCS([sqrtl])
|
AC_CHECK_FUNCS([sqrtl])
|
||||||
|
AC_CHECK_FUNCS([fmod])
|
||||||
|
|
||||||
dnl Libraries that may contain key functions.
|
dnl Libraries that may contain key functions.
|
||||||
AC_SEARCH_LIBS([clock_gettime],[rt])
|
AC_SEARCH_LIBS([clock_gettime],[rt])
|
||||||
@@ -92,18 +96,22 @@ static void receiveUSR2( __attribute__((unused))
|
|||||||
(void) sigaction(SIGUSR2, &sa, NULL);
|
(void) sigaction(SIGUSR2, &sa, NULL);
|
||||||
raise(SIGUSR2);
|
raise(SIGUSR2);
|
||||||
#endif
|
#endif
|
||||||
return signalSender == 0 ? 1 : 0;
|
return signalSender < 1 ? 1 : 0;
|
||||||
]])], [
|
]])], [
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
AC_DEFINE([SIGINFO_PROVIDES_PID], [1], [Signal handlers can determine the sending PID])
|
AC_DEFINE([SIGINFO_PROVIDES_PID], [1], [Signal handlers can determine the sending PID])
|
||||||
], [
|
], [
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
])
|
], [
|
||||||
|
AC_MSG_RESULT([cannot check, assuming yes])
|
||||||
|
AC_DEFINE([SIGINFO_PROVIDES_PID], [1], [Signal handlers can determine the sending PID])
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
AH_BOTTOM([#include "config-aux.h"])
|
AH_BOTTOM([#include "config-aux.h"])
|
||||||
|
|
||||||
AC_ARG_ENABLE([debugging],
|
AC_ARG_ENABLE([debugging],
|
||||||
[ --enable-debugging compile with debugging support],
|
[AS_HELP_STRING([--enable-debugging], [compile with debugging support])],
|
||||||
if test "$enable_debugging" = "yes"; then
|
if test "$enable_debugging" = "yes"; then
|
||||||
CFLAGS="$CFLAGS -g -Wall"
|
CFLAGS="$CFLAGS -g -Wall"
|
||||||
AC_DEFINE([ENABLE_DEBUGGING], [1], [Debugging support enabled])
|
AC_DEFINE([ENABLE_DEBUGGING], [1], [Debugging support enabled])
|
||||||
@@ -111,14 +119,15 @@ AC_ARG_ENABLE([debugging],
|
|||||||
)
|
)
|
||||||
|
|
||||||
AC_ARG_ENABLE([profiling],
|
AC_ARG_ENABLE([profiling],
|
||||||
[ --enable-profiling compile with profiling support],
|
[AS_HELP_STRING([--enable-profiling], [compile with profiling support])],
|
||||||
if test "$enable_profiling" = "yes"; then
|
if test "$enable_profiling" = "yes"; then
|
||||||
CFLAGS="-pg $CFLAGS"
|
CFLAGS="-pg $CFLAGS"
|
||||||
fi
|
fi
|
||||||
)
|
)
|
||||||
|
|
||||||
SPLICE_SUPPORT="no"
|
SPLICE_SUPPORT="no"
|
||||||
AC_ARG_ENABLE([splice], [ --disable-splice do not use splice system call],
|
AC_ARG_ENABLE([splice],
|
||||||
|
[AS_HELP_STRING([--disable-splice], [do not use splice system call])],
|
||||||
if test "$enable_splice" = "yes"; then
|
if test "$enable_splice" = "yes"; then
|
||||||
SPLICE_SUPPORT="yes"
|
SPLICE_SUPPORT="yes"
|
||||||
fi,
|
fi,
|
||||||
@@ -126,13 +135,28 @@ AC_ARG_ENABLE([splice], [ --disable-splice do not use splice system call
|
|||||||
)
|
)
|
||||||
|
|
||||||
IPC_SUPPORT="no"
|
IPC_SUPPORT="no"
|
||||||
AC_ARG_ENABLE([ipc], [ --disable-ipc turn off IPC messaging],
|
AC_ARG_ENABLE([ipc],
|
||||||
|
[AS_HELP_STRING([--disable-ipc], [turn off IPC messaging])],
|
||||||
if test "$enable_ipc" = "yes"; then
|
if test "$enable_ipc" = "yes"; then
|
||||||
IPC_SUPPORT="yes"
|
IPC_SUPPORT="yes"
|
||||||
fi,
|
fi,
|
||||||
IPC_SUPPORT="yes"
|
IPC_SUPPORT="yes"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
AC_ARG_WITH([ncurses],
|
||||||
|
[AS_HELP_STRING([--without-ncurses], [disable the use of ncurses for terminal info])],
|
||||||
|
[],
|
||||||
|
[with_curses=yes])
|
||||||
|
AS_IF([test "x$with_ncurses" != xno],
|
||||||
|
[
|
||||||
|
AC_SEARCH_LIBS([tigetnum],[tinfo ncurses], [
|
||||||
|
AC_CHECK_HEADERS([term.h],[
|
||||||
|
AC_DEFINE([ENABLE_NCURSES], [1], [Build with ncurses support])
|
||||||
|
])
|
||||||
|
], [])
|
||||||
|
],
|
||||||
|
[])
|
||||||
|
|
||||||
AC_ARG_ENABLE([static],
|
AC_ARG_ENABLE([static],
|
||||||
[AS_HELP_STRING([--enable-static], [enable static linking])],
|
[AS_HELP_STRING([--enable-static], [enable static linking])],
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -103,6 +103,9 @@ is acknowledged and greatly appreciated:
|
|||||||
* Joachim Haga - suggested showing progress in the window title ([#3](https://codeberg.org/a-j-wood/pv/issues/3))
|
* 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))
|
* [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))
|
* [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))
|
||||||
|
* [heitbaum](https://codeberg.org/heitbaum) - assisted with cross-compilation fault introduced in 1.9.7 ([#120](https://codeberg.org/a-j-wood/pv/issues/120))
|
||||||
|
* [meego](https://codeberg.org/meego) - suggested "**%nL**", the last line preview ([#121](https://codeberg.org/a-j-wood/pv/issues/121))
|
||||||
|
* [Alexander Petrossian](https://github.com/neopaf) - suggested using Unicode output for a more granular progress bar, and provided the codepoints to use ([#15](https://codeberg.org/a-j-wood/pv/issues/15))
|
||||||
|
|
||||||
Translations provided through [Codeberg Weblate](https://translate.codeberg.org/projects/pv/):
|
Translations provided through [Codeberg Weblate](https://translate.codeberg.org/projects/pv/):
|
||||||
|
|
||||||
|
|||||||
+48
-47
@@ -1,30 +1,30 @@
|
|||||||
# Notes for developers and translators
|
# Notes for developers and translators
|
||||||
|
|
||||||
The following "`configure`" options will be of interest to developers and
|
The following _configure_ options will be of interest to developers and
|
||||||
translators:
|
translators:
|
||||||
|
|
||||||
* `--enable-debugging` - build in debugging support
|
* **--enable-debugging** - build in debugging support
|
||||||
* `--enable-profiling` - build in support for profiling
|
* **--enable-profiling** - build in support for profiling
|
||||||
|
|
||||||
These "`make`" targets are available:
|
These targets are available when running _make_:
|
||||||
|
|
||||||
* `make analyse` - run _splint_ and _flawfinder_ on all C source files
|
* "`make analyse`" - run _splint_ and _flawfinder_ on all C source files
|
||||||
|
|
||||||
|
|
||||||
## Debugging and profiling support
|
## Debugging and profiling support
|
||||||
|
|
||||||
When "`./configure --enable-debugging`" is used, the "`pv`" produced by
|
When "`./configure --enable-debugging`" is used, the _pv_ produced by _make_
|
||||||
"`make`" will support an extra option, "`--debug FILE`", which will cause
|
will support an extra option, "**--debug FILE**", which will cause debugging
|
||||||
debugging output to be written to *FILE*. This is not recommended for
|
output to be written to *FILE*. This is not recommended for production
|
||||||
production builds due to the extra processing it introduces, and the
|
builds due to the extra processing it introduces, and the potential size of
|
||||||
potential size of the output.
|
the output.
|
||||||
|
|
||||||
Within the code, "`debug()`" is used in a similar way to "`printf()`". It
|
Within the code, "**debug()**" is used in a similar way to "**printf()**".
|
||||||
will automatically include the calling function, source file, and line
|
It will automatically include the calling function, source file, and line
|
||||||
number, so they don't need to be included in the parameters. When debugging
|
number, so they don't need to be included in the parameters. When debugging
|
||||||
support is not enabled, it evaluates to a null statement.
|
support is not enabled, it evaluates to a null statement.
|
||||||
|
|
||||||
This does mean that if you call "`debug()`", make sure it has no side
|
This does mean that if you call "**debug()**", make sure it has no side
|
||||||
effects, as they won't be present in builds without debugging support.
|
effects, as they won't be present in builds without debugging support.
|
||||||
|
|
||||||
Builds produced after "`./configure --enable-profiling`" will write profile
|
Builds produced after "`./configure --enable-profiling`" will write profile
|
||||||
@@ -35,11 +35,11 @@ Please note that the memory safety checks will fail with profiling enabled.
|
|||||||
## Source code analysis
|
## Source code analysis
|
||||||
|
|
||||||
Running "`make analyse`" runs _splint_ and _flawfinder_ on all C sources,
|
Running "`make analyse`" runs _splint_ and _flawfinder_ on all C sources,
|
||||||
writing the output of both programs to files named "`*.e`" for each "`*.c`".
|
writing the output of both programs to files named _"*.e"_ for each _"*.c"_.
|
||||||
|
|
||||||
There are no dependency rules set up for these "`.e`" files, so if a header
|
There are no dependency rules set up for these _".e"_ files, so if a header
|
||||||
file is altered, manually remove the relevant "`.e`" files, or update the
|
file is altered, manually remove the relevant _".e"_ files, or update the
|
||||||
timestamp of the relevant "`.c`" files, before running "`make analyse`"
|
timestamp of the relevant _".c"_ files, before running "`make analyse`"
|
||||||
again.
|
again.
|
||||||
|
|
||||||
The goal is for all C source files to generate zero warnings from either
|
The goal is for all C source files to generate zero warnings from either
|
||||||
@@ -65,8 +65,8 @@ Alternatively, read on for details of how to maintain the translations
|
|||||||
directly within the source tree.
|
directly within the source tree.
|
||||||
|
|
||||||
The message catalogues used to translate program messages into other
|
The message catalogues used to translate program messages into other
|
||||||
languages are in the "`po/`" directory, named "`xx.po`", where "`xx`"
|
languages are in the _"po/"_ directory, named _"xx.po"_, where _"xx"_
|
||||||
is the ISO 639-1 2-letter language code, such as "`fr`" for French.
|
is the ISO 639-1 2-letter language code, such as "**fr**" for French.
|
||||||
|
|
||||||
Each of these files contains lines like this:
|
Each of these files contains lines like this:
|
||||||
|
|
||||||
@@ -74,16 +74,16 @@ Each of these files contains lines like this:
|
|||||||
msgid "failed to get terminal name"
|
msgid "failed to get terminal name"
|
||||||
msgstr "erro ao ler o nome do terminal"
|
msgstr "erro ao ler o nome do terminal"
|
||||||
|
|
||||||
The comment line, starting "`#`", shows the source filename and line number
|
The comment line, starting _"#"_, shows the source filename and line number
|
||||||
at which this message can be found. The "`msgid`" is the original message
|
at which this message can be found. The _"msgid"_ is the original message
|
||||||
in the program, in English. The "`msgstr`" is the translated text.
|
in the program, in English. The _"msgstr"_ is the translated text.
|
||||||
|
|
||||||
It is the "`msgstr`" lines which need to be updated by translators.
|
It is the _"msgstr"_ lines which need to be updated by translators.
|
||||||
|
|
||||||
Message catalogue files should all be encoded as UTF-8.
|
Message catalogue files should all be encoded as UTF-8.
|
||||||
|
|
||||||
After making a change to a "`.po`" file, test it by compiling it and installing
|
After making a change to a _".po"_ file, test it by compiling it and
|
||||||
to a temporary location, like this:
|
installing to a temporary location, like this:
|
||||||
|
|
||||||
./configure --enable-debugging --prefix=/tmp/yourtest
|
./configure --enable-debugging --prefix=/tmp/yourtest
|
||||||
make clean
|
make clean
|
||||||
@@ -96,40 +96,40 @@ to a temporary location, like this:
|
|||||||
/tmp/yourtest/bin/pv --help
|
/tmp/yourtest/bin/pv --help
|
||||||
exit
|
exit
|
||||||
|
|
||||||
Replace "`--help`" with whatever is appropriate for your test. In this
|
Replace "**--help**" with whatever is appropriate for your test. In this
|
||||||
example, the language being tested is "`de`" (German), on a system which is
|
example, the language being tested is _"de"_ (German), on a system which is
|
||||||
running with UTF-8 support.
|
running with UTF-8 support.
|
||||||
|
|
||||||
In the example above, a new shell is started by typing "`bash`" so that
|
In the example above, a new shell is started by typing "`bash`" so that
|
||||||
after your tests, "`exit`" will return you to your previous shell with your
|
after your tests, "`exit`" will return you to your previous shell with your
|
||||||
language settings intact.
|
language settings intact.
|
||||||
|
|
||||||
Note that at the start, you have to re-run "`configure`" with "`--prefix`"
|
Note that at the start, you have to re-run _configure_ with "**--prefix**"
|
||||||
rather than using "`make DESTDIR=...`", because the locale directory is set
|
rather than using "`make DESTDIR=...`", because the locale directory is set
|
||||||
at compile time. Also, on Debian at least, both "`LC_ALL`" and "`LANGUAGE`"
|
at compile time. Also, on Debian at least, both the environment variables
|
||||||
must be set.
|
_"LC_ALL"_ and _"LANGUAGE"_ must be set.
|
||||||
|
|
||||||
To find untranslated strings in a language that's already supported but
|
To find untranslated strings in a language that's already supported but
|
||||||
which you can help with gaps in, use this command:
|
which you can help with gaps in, use this command:
|
||||||
|
|
||||||
msgattrib --untranslated < po/fr.po
|
msgattrib --untranslated < po/fr.po
|
||||||
|
|
||||||
replacing "`po/fr.po`" as appropriate.
|
replacing _"po/fr.po"_ as appropriate.
|
||||||
|
|
||||||
To add a new language, create the new message catalogue file under "`po/`"
|
To add a new language, create the new message catalogue file under _"po/"_
|
||||||
by copying "`po/pv.pot`" to "`po/xx.po`", where "`xx`" is the language code,
|
by copying _"po/pv.pot"_ to _"po/xx.po"_, where _"xx"_ is the language code,
|
||||||
and adjusting it. The "`.pot`" file is generated automatically by "`make`".
|
and adjusting it. The _".pot"_ file is generated automatically by _make_.
|
||||||
|
|
||||||
Next, add the language code to "`po/LINGUAS`" - this is a list of the
|
Next, add the language code to _"po/LINGUAS"_ - this is a list of the
|
||||||
2-letter codes of the supported languages.
|
2-letter codes of the supported languages.
|
||||||
|
|
||||||
Finally, run "`./config.status`" and "`make -C po update-po`".
|
Finally, run "`./config.status`" and "`make -C po update-po`".
|
||||||
|
|
||||||
When the source code is updated, running "`make -C po update-po`" will
|
When the source code is updated, running "`make -C po update-po`" will
|
||||||
update the "`pv.pot`" file so that it lists where all the messages are in
|
update the _"pv.pot"_ file so that it lists where all the messages are in
|
||||||
the source. It will also use _msgmerge_ to update all of the "`.po`" files
|
the source. It will also use _msgmerge_ to update all of the _".po"_ files
|
||||||
from the updated "`pv.pot`" file. After doing this, look for missing
|
from the updated _"pv.pot"_ file. After doing this, look for missing
|
||||||
translations (empty "`msgstr`" lines) or translations marked as "fuzzy", as
|
translations (empty _"msgstr"_ lines) or translations marked as "fuzzy", as
|
||||||
these will need to be corrected by translators.
|
these will need to be corrected by translators.
|
||||||
|
|
||||||
|
|
||||||
@@ -146,24 +146,25 @@ The package maintainer should run through these steps for a new release:
|
|||||||
* <https://cvsweb.openbsd.org/ports/sysutils/pv/>
|
* <https://cvsweb.openbsd.org/ports/sysutils/pv/>
|
||||||
* <https://packages.fedoraproject.org/pkgs/pv/pv/>
|
* <https://packages.fedoraproject.org/pkgs/pv/pv/>
|
||||||
* Run "`make indent; make indent indentclean check`"
|
* Run "`make indent; make indent indentclean check`"
|
||||||
* Check that `po/POTFILES.in` is up to date
|
* Check that _po/POTFILES.in_ is up to date
|
||||||
* Run "`make -C po update-po`"
|
* Run "`make -C po update-po`"
|
||||||
* Run "`make analyse`" and see whether remaining warnings can be addressed
|
* Run "`make analyse`" and see whether remaining warnings can be addressed
|
||||||
* Version bump and documentation checks:
|
* Version bump and documentation checks:
|
||||||
* Update the version in `configure.ac` and `docs/NEWS.md`
|
* Update the version in _configure.ac_ and _docs/NEWS.md_
|
||||||
* Check that `docs/NEWS.md` is up to date
|
* Check that _docs/NEWS.md_ is up to date
|
||||||
* Check that the manual `docs/pv.1` is up to date
|
* Check that the manual _docs/pv.1_ is up to date
|
||||||
* Run "`make docs/pv.1.md`" and, if using VPATH, copy the result to the source directory
|
* Run "`make docs/pv.1.md`" and, if using VPATH, copy the result to the source directory
|
||||||
* Check that the year displayed by src/main/version.c is correct
|
* Check that the year displayed by _src/main/version.c_ is correct
|
||||||
* Ensure everything has been committed to the repository
|
* Ensure everything has been committed to the repository
|
||||||
* Run "`autoreconf`" in the source directory
|
* Run "`autoreconf -is`" in the source directory
|
||||||
* Consistency and build checks:
|
* Consistency and build checks:
|
||||||
* Wipe the build directory, and run "`configure`" there
|
* Wipe the build directory, and run _configure_ there
|
||||||
* Run "`make distcheck`"
|
* Run "`make distcheck`"
|
||||||
* Run "`./configure && make check`" on all test systems including Cygwin, using the `tar.gz` that was just created
|
* Run "`./configure && make check`" on all test systems including Cygwin, using the `tar.gz` that was just created
|
||||||
|
* Run a cross-compilation check
|
||||||
* Run "`make release MAINTAINER=<signing-user>`"
|
* Run "`make release MAINTAINER=<signing-user>`"
|
||||||
* Update the project web site:
|
* Update the project web site:
|
||||||
* Copy the release `.tar.gz`, `.txt`, and `.asc` files to the web site
|
* Copy the release _.tar.gz_, _.txt_, and _.asc_ files to the web site
|
||||||
* Use "`pandoc --from markdown --to html`" to convert the news and manual to HTML
|
* Use "`pandoc --from markdown --to html`" to convert the news and manual to HTML
|
||||||
* Update the news and manual on the web site
|
* Update the news and manual on the web site
|
||||||
* Update the version numbers on the web site
|
* Update the version numbers on the web site
|
||||||
|
|||||||
@@ -1,3 +1,32 @@
|
|||||||
|
### 1.9.25 - 22 December 2024
|
||||||
|
|
||||||
|
* *fix:* test failure of **--watchfd** on macOS corrected ([#124](https://codeberg.org/a-j-wood/pv/issues/124))
|
||||||
|
|
||||||
|
### 1.9.24 - 19 December 2024
|
||||||
|
|
||||||
|
* *feature:* new **--format** sequences for graphical progress bars - "**%{bar-block}**", "**%{bar-granular}**", and "**%{bar-shaded}**" ([#15](https://codeberg.org/a-j-wood/pv/issues/15))
|
||||||
|
* *feature:* new **--format** sequence "**%{sgr:colour,...}**" to use ECMA-48 Select Graphic Rendition codes to add colours
|
||||||
|
* *feature:* new **--bar-style** option to change the default bar style ([#15](https://codeberg.org/a-j-wood/pv/issues/15))
|
||||||
|
* *feature:* allow decimal values such as "1.5G" with "**--size**", "**--rate-limit**", "**--buffer-size**", and "**error-skip-block**" ([#35](https://codeberg.org/a-j-wood/pv/issues/35))
|
||||||
|
* *cleanup:* improve progress bar granularity on wide displays by internally tracking the transfer percentage as a decimal number
|
||||||
|
* *cleanup:* correct detection of **--remote** usability on GNU Hurd
|
||||||
|
* *cleanup:* reduce likelihood of race conditions in tests when running on slow systems
|
||||||
|
* *cleanup:* reduce memory footprint
|
||||||
|
* *docs:* simplified the synopsis section of the manual
|
||||||
|
|
||||||
|
### 1.9.15 - 8 December 2024
|
||||||
|
|
||||||
|
* *feature:* new **--format** sequence "**%nL**", showing the most recent line written ([#121](https://codeberg.org/a-j-wood/pv/issues/121))
|
||||||
|
* *feature:* each **--format** sequence now has a more readable equivalent name, for example "**%r**" can be written as "**%{rate}**"
|
||||||
|
* *feature:* new **--format** sequences "**%{progress-bar-only}**" and "**%{progress-amount-only}**"
|
||||||
|
* *fix:* allow **--format** to include "%nA" more than once, with different "n" values ([#122](https://codeberg.org/a-j-wood/pv/issues/122))
|
||||||
|
* *fix:* allow **--format** to include "%p" more than once, with optional width prefix
|
||||||
|
* *fix:* calculate width correctly when wide characters are in **--format** strings
|
||||||
|
* *fix:* add _configure_ script fallback for **--remote** check when cross-compiling ([#120](https://codeberg.org/a-j-wood/pv/issues/120))
|
||||||
|
* *fix:* allow **extra-display** to be changed by **--remote** ([#123](https://codeberg.org/a-j-wood/pv/issues/123))
|
||||||
|
* *cleanup:* refactored display formatters into separate functions
|
||||||
|
* *cleanup:* improve format parser handling of dangling or invalid "%" sequences
|
||||||
|
|
||||||
### 1.9.7 - 2 December 2024
|
### 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))
|
* *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))
|
||||||
|
|||||||
Executable
+146
@@ -0,0 +1,146 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Usage: sh build-package.sh source-1.2.3.tar.gz
|
||||||
|
#
|
||||||
|
# Given a tar.gz, build a package for the current OS.
|
||||||
|
#
|
||||||
|
# Supports these packaging types:
|
||||||
|
#
|
||||||
|
# .deb (Debian, Ubuntu, etc) - requires dpkg-dev, debhelper
|
||||||
|
# .rpm (AlmaLinux, Rocky Linux, OpenSUSE etc) - requires rpmbuild
|
||||||
|
#
|
||||||
|
# If the MAINTAINER environment variable is set, this is used as a GPG key
|
||||||
|
# ID for package signing.
|
||||||
|
#
|
||||||
|
# The packages built with this script are not "official", in that they are
|
||||||
|
# not part of any Linux distribution and may not follow the distribution's
|
||||||
|
# policies. Use at your own risk.
|
||||||
|
|
||||||
|
sourceArchive="$1"
|
||||||
|
test -n "${sourceArchive}" && test -f "${sourceArchive}" \
|
||||||
|
|| { printf "%s: %s: %s\n" "${0##*/}" "${sourceArchive}" "source archive not found" 1>&2; exit 1; }
|
||||||
|
|
||||||
|
packageName="pv"
|
||||||
|
packageSummary="Shell pipeline element to meter data passing through"
|
||||||
|
packageDescription="\
|
||||||
|
pv (Pipe Viewer) can be inserted into any normal pipeline between two
|
||||||
|
processes to give a visual indication of how quickly data is passing
|
||||||
|
through, how long it has taken, how near to completion it is, and an
|
||||||
|
estimate of how long it will be until completion."
|
||||||
|
packageUrl="https://www.ivarch.com/programs/pv.shtml"
|
||||||
|
sourceUrl="https://www.ivarch.com/programs/sources/${packageName}-%{version}.tar.gz"
|
||||||
|
packageEmail="Andrew Wood <pv@ivarch.com>"
|
||||||
|
|
||||||
|
workDir="$(mktemp -d)" || exit 1
|
||||||
|
trap 'rm -rf "${workDir}"' EXIT
|
||||||
|
|
||||||
|
# Infer the version from the most recent NEWS entry.
|
||||||
|
version="$(tar xzf "${sourceArchive}" --wildcards -O '*/docs/NEWS.md' 2>/dev/null | awk '/^### [0-9]/{print $2}' | sed -n 1p)"
|
||||||
|
|
||||||
|
if command -v rpmbuild >/dev/null 2>&1; then
|
||||||
|
# Build an RPM.
|
||||||
|
cat > "${workDir}"/spec <<EOF
|
||||||
|
Summary: ${packageSummary}
|
||||||
|
Name: ${packageName}
|
||||||
|
Version: ${version}
|
||||||
|
Release: 1%{?dist}
|
||||||
|
License: GPLv3+
|
||||||
|
Source: ${sourceUrl}
|
||||||
|
Url: ${packageUrl}
|
||||||
|
|
||||||
|
%description
|
||||||
|
${packageDescription}
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
|
||||||
|
%build
|
||||||
|
%configure
|
||||||
|
make %{?_smp_mflags}
|
||||||
|
|
||||||
|
%install
|
||||||
|
test -n "\${RPM_BUILD_ROOT}" && test "\${RPM_BUILD_ROOT}" != '/' && rm -rf "\${RPM_BUILD_ROOT}"
|
||||||
|
make install DESTDIR="\${RPM_BUILD_ROOT}"
|
||||||
|
rm -rf "\${RPM_BUILD_ROOT}/usr/share/doc"
|
||||||
|
%find_lang %{name}
|
||||||
|
|
||||||
|
%check
|
||||||
|
make check SKIP_VALGRIND_TESTS=1
|
||||||
|
|
||||||
|
%clean
|
||||||
|
test -n "\${RPM_BUILD_ROOT}" && test "\${RPM_BUILD_ROOT}" != '/' && rm -rf "\${RPM_BUILD_ROOT}"
|
||||||
|
|
||||||
|
%files -f %{name}.lang
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%{_bindir}/*
|
||||||
|
%{_mandir}/man1/*
|
||||||
|
|
||||||
|
%doc README.md docs/NEWS.md docs/ACKNOWLEDGEMENTS.md docs/COPYING
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* $(date '+%a %b %d %Y') ${packageEmail} - ${version}-1
|
||||||
|
- Package built from main source.
|
||||||
|
EOF
|
||||||
|
mkdir "${workDir}/SOURCES"
|
||||||
|
cp "${sourceArchive}" "${workDir}/SOURCES/${packageName}-${version}.tar.gz"
|
||||||
|
rpmbuild -D "%_topdir ${workDir}" -bb "${workDir}/spec" || exit 1
|
||||||
|
if test -n "${MAINTAINER}"; then
|
||||||
|
# Sign the RPMs.
|
||||||
|
rpm -D "%_gpg_name ${MAINTAINER}" --addsign "${workDir}/RPMS"/*/*.rpm || exit 1
|
||||||
|
fi
|
||||||
|
cp -v "${workDir}/RPMS"/*/*.rpm .
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v dpkg-buildpackage >/dev/null 2>&1; then
|
||||||
|
# Build a Debian package.
|
||||||
|
mkdir "${workDir}/build" "${workDir}/build/debian" "${workDir}/build/debian/source"
|
||||||
|
|
||||||
|
tar xzf "${sourceArchive}" -C "${workDir}/build" --strip-components=1
|
||||||
|
|
||||||
|
printf "%s\n" "10" > "${workDir}/build/debian/compat"
|
||||||
|
touch "${workDir}/build/debian/copyright"
|
||||||
|
printf "%s\n" "3.0 (quilt)" > "${workDir}/build/debian/source/format"
|
||||||
|
|
||||||
|
cat > "${workDir}/build/debian/rules" <<EOF
|
||||||
|
#!/usr/bin/make -f
|
||||||
|
export DH_VERBOSE = 1
|
||||||
|
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
||||||
|
export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic
|
||||||
|
export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh \$@
|
||||||
|
EOF
|
||||||
|
chmod 700 "${workDir}/build/debian/rules"
|
||||||
|
|
||||||
|
cat > "${workDir}/build/debian/control" <<EOF
|
||||||
|
Source: ${packageName}
|
||||||
|
Maintainer: ${packageEmail}
|
||||||
|
Section: misc
|
||||||
|
Priority: optional
|
||||||
|
Standards-Version: 3.9.2
|
||||||
|
Build-Depends: debhelper (>= 9)
|
||||||
|
|
||||||
|
Package: ${packageName}
|
||||||
|
Architecture: any
|
||||||
|
Depends: \${misc:Depends}
|
||||||
|
Description: ${packageSummary}
|
||||||
|
$(printf "%s\n.\n" "${packageDescription}" | sed 's,^, ,')
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "${workDir}/build/debian/changelog" <<EOF
|
||||||
|
${packageName} (${version}-1) UNRELEASED; urgency=low
|
||||||
|
|
||||||
|
* Package built from main source.
|
||||||
|
|
||||||
|
-- ${packageEmail} $(date -R)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if test -n "${MAINTAINER}"; then
|
||||||
|
(cd "${workDir}/build" && dpkg-buildpackage --build=binary --force-sign --sign-key="${MAINTAINER}") || exit 1
|
||||||
|
else
|
||||||
|
(cd "${workDir}/build" && dpkg-buildpackage --build=binary) || exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp -v "${workDir}"/*.deb . || exit 1
|
||||||
|
fi
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
.TH PV 1 2024-12-02 pv-1.9.7 "User Commands"
|
.TH PV 1 2024-12-22 pv-1.9.25 "User Commands"
|
||||||
.\"
|
.\"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
pv \- monitor the progress of data through a pipe
|
pv \- monitor the progress of data through a pipe
|
||||||
@@ -7,98 +7,9 @@ pv \- monitor the progress of data through a pipe
|
|||||||
.B pv
|
.B pv
|
||||||
[\fIOPTION\fR]... [\fIFILE\fR]...
|
[\fIOPTION\fR]... [\fIFILE\fR]...
|
||||||
.PP
|
.PP
|
||||||
.SY pv
|
\fBpv\fR \fB\-d\fR|\fB\-\-watchfd\fR \fIPID\fR[:\fIFD\fR] [\fIOPTION\fR]...
|
||||||
.OP \-pteIrab8kTv
|
|
||||||
.OP \-A NUM
|
|
||||||
.OP \-F FORMAT
|
|
||||||
.OP \-x SPEC
|
|
||||||
.OP \-Wgl0fc
|
|
||||||
.OP \-D SEC
|
|
||||||
.OP \-s SIZE
|
|
||||||
.OP \-i SEC
|
|
||||||
.OP \-m SEC
|
|
||||||
.OP \-w WIDTH
|
|
||||||
.OP \-H HEIGHT
|
|
||||||
.OP \-N NAME
|
|
||||||
.OP \-o FILE
|
|
||||||
.OP \-L RATE
|
|
||||||
.OP \-B BYTES
|
|
||||||
.OP \-CESYKX
|
|
||||||
.OP \-Z BYTES
|
|
||||||
.OP \-U FILE
|
|
||||||
.OP \-P FILE
|
|
||||||
.RI [ FILE
|
|
||||||
\&.\|.\|.\&]
|
|
||||||
.PP
|
.PP
|
||||||
.SY pv
|
\fBpv\fR \fB\-R\fR|\fB\-\-remote\fR \fIPID\fR [\fIOPTION\fR]...
|
||||||
.B \-n
|
|
||||||
.OP \-trbv
|
|
||||||
.OP \-Wl0
|
|
||||||
.OP \-D SEC
|
|
||||||
.OP \-s SIZE
|
|
||||||
.OP \-i SEC
|
|
||||||
.OP \-o FILE
|
|
||||||
.OP \-L RATE
|
|
||||||
.OP \-B BYTES
|
|
||||||
.OP \-CESYKX
|
|
||||||
.OP \-Z BYTES
|
|
||||||
.OP \-U FILE
|
|
||||||
.OP \-P FILE
|
|
||||||
.RI [ FILE
|
|
||||||
\&.\|.\|.\&]
|
|
||||||
.PP
|
|
||||||
.SY pv
|
|
||||||
.B \-q
|
|
||||||
.OP \-v
|
|
||||||
.OP \-s SIZE
|
|
||||||
.OP \-o FILE
|
|
||||||
.OP \-L RATE
|
|
||||||
.OP \-B BYTES
|
|
||||||
.OP \-CESYKX
|
|
||||||
.OP \-Z BYTES
|
|
||||||
.OP \-U FILE
|
|
||||||
.OP \-P FILE
|
|
||||||
.RI [ FILE
|
|
||||||
\&.\|.\|.\&]
|
|
||||||
.PP
|
|
||||||
.SY pv
|
|
||||||
.B \-R
|
|
||||||
.I PID
|
|
||||||
.OP \-pteIrabT
|
|
||||||
.OP \-A NUM
|
|
||||||
.OP \-F FORMAT
|
|
||||||
.OP \-s SIZE
|
|
||||||
.OP \-i SEC
|
|
||||||
.OP \-w WIDTH
|
|
||||||
.OP \-H HEIGHT
|
|
||||||
.OP \-N NAME
|
|
||||||
.OP \-L RATE
|
|
||||||
.OP \-B BYTES
|
|
||||||
.PP
|
|
||||||
.SY pv
|
|
||||||
.B \-d
|
|
||||||
.I PID:FD
|
|
||||||
.OP \-pteIrab8kTnq
|
|
||||||
.OP \-F FORMAT
|
|
||||||
.OP \-i SEC
|
|
||||||
.OP \-w WIDTH
|
|
||||||
.OP \-H HEIGHT
|
|
||||||
.PP
|
|
||||||
.SY pv
|
|
||||||
.B \-d
|
|
||||||
.I PID
|
|
||||||
.OP \-pteIrab8kTnq
|
|
||||||
.OP \-F FORMAT
|
|
||||||
.OP \-i SEC
|
|
||||||
.OP \-w WIDTH
|
|
||||||
.OP \-H HEIGHT
|
|
||||||
.PP
|
|
||||||
.SY pv
|
|
||||||
.B \-h
|
|
||||||
.PP
|
|
||||||
.SY pv
|
|
||||||
.B \-V
|
|
||||||
.YS
|
|
||||||
.\"
|
.\"
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
Show the progress of data through a pipeline by giving information such as
|
Show the progress of data through a pipeline by giving information such as
|
||||||
@@ -293,6 +204,14 @@ Useful in conjunction with \*(lq\fB\-\-cursor\fR\*(rq if you have a
|
|||||||
complicated pipeline and you want to be able to tell different parts of it
|
complicated pipeline and you want to be able to tell different parts of it
|
||||||
apart.
|
apart.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-u\ STYLE \fR,\ \fB\-\-bar\-style\ STYLE
|
||||||
|
Change the default progress bar style shown by \*(lq\fB\-\-progress\fR\*(rq,
|
||||||
|
or by the \*(lq\fB\-\-format\fR\*(rq sequences \*(lq\fB%{progress}\fR\*(rq
|
||||||
|
or \*(lq\fB%{progress\-bar\-only}\fR\*(rq, to \fISTYLE\fR.
|
||||||
|
The \fISTYLE\fR can be one of \fBplain\fR (the default), \fBblock\fR,
|
||||||
|
\fBgranular\fR, or \fBshaded\fR.
|
||||||
|
These styles are described in the \fBFORMATTING\fR section below.
|
||||||
|
.TP
|
||||||
.BI \-x\ SPEC \fR,\ \fB\-\-extra\-display\ SPEC
|
.BI \-x\ SPEC \fR,\ \fB\-\-extra\-display\ SPEC
|
||||||
As well as displaying progress to the terminal, also write it to \fISPEC\fR.
|
As well as displaying progress to the terminal, also write it to \fISPEC\fR.
|
||||||
The \fISPEC\fR must start with a comma-separated list of destinations, and
|
The \fISPEC\fR must start with a comma-separated list of destinations, and
|
||||||
@@ -340,7 +259,7 @@ The same suffixes as \*(lq\fB\-\-size\fR\*(rq can be used.
|
|||||||
The default buffer size is the block size of the input file's filesystem
|
The default buffer size is the block size of the input file's filesystem
|
||||||
multiplied by 32 (512KiB max), or 400KiB if the block size cannot be
|
multiplied by 32 (512KiB max), or 400KiB if the block size cannot be
|
||||||
determined.
|
determined.
|
||||||
This can be useful on platforms like MacOS with pipelines that perform
|
This can be useful on platforms like macOS with pipelines that perform
|
||||||
better with specific buffer sizes such as 1024.
|
better with specific buffer sizes such as 1024.
|
||||||
Implies \*(lq\fB\-\-no\-splice\fR\*(rq.
|
Implies \*(lq\fB\-\-no\-splice\fR\*(rq.
|
||||||
.TP
|
.TP
|
||||||
@@ -427,6 +346,9 @@ size, so you can see its progress.
|
|||||||
Note that when doing this with relatively small amounts of data,
|
Note that when doing this with relatively small amounts of data,
|
||||||
\*(lq\fB\-\-no-splice\fR\*(rq may be preferable so that pipe buffering
|
\*(lq\fB\-\-no-splice\fR\*(rq may be preferable so that pipe buffering
|
||||||
doesn't affect the progress display.
|
doesn't affect the progress display.
|
||||||
|
.\"
|
||||||
|
.\"
|
||||||
|
.SS "Alternative operating modes"
|
||||||
.TP
|
.TP
|
||||||
.BI \-d\ PID\fR[\fB:\fR\fIFD\fR],\ \fB\-\-watchfd\ PID\fR[\fB:\fR\fIFD\fR]
|
.BI \-d\ PID\fR[\fB:\fR\fIFD\fR],\ \fB\-\-watchfd\ PID\fR[\fB:\fR\fIFD\fR]
|
||||||
Instead of transferring data, watch file descriptor \fIFD\fR of process
|
Instead of transferring data, watch file descriptor \fIFD\fR of process
|
||||||
@@ -452,7 +374,7 @@ Note that some options cannot be changed while running, such as
|
|||||||
\*(lq\fB\-\-force\fR\*(rq, \*(lq\fB\-\-delay\-start\fR\*(rq,
|
\*(lq\fB\-\-force\fR\*(rq, \*(lq\fB\-\-delay\-start\fR\*(rq,
|
||||||
\*(lq\fB\-\-skip\-errors\fR\*(rq, and \*(lq\fB\-\-stop\-at\-size\fR\*(rq.
|
\*(lq\fB\-\-skip\-errors\fR\*(rq, and \*(lq\fB\-\-stop\-at\-size\fR\*(rq.
|
||||||
.\"
|
.\"
|
||||||
.SS "General options"
|
.SS "Other options"
|
||||||
.TP
|
.TP
|
||||||
.BI \-P\ FILE \fR,\ \fB\-\-pidfile\ FILE
|
.BI \-P\ FILE \fR,\ \fB\-\-pidfile\ FILE
|
||||||
Save the process ID of \fBpv\fR in \fIFILE\fR.
|
Save the process ID of \fBpv\fR in \fIFILE\fR.
|
||||||
@@ -471,61 +393,159 @@ Print version information on standard output and exit successfully.
|
|||||||
Format strings used by \*(lq\fB\-\-format\fR\*(rq and
|
Format strings used by \*(lq\fB\-\-format\fR\*(rq and
|
||||||
\*(lq\fB\-\-extra\-display\fR\*(rq can contain the following sequences:
|
\*(lq\fB\-\-extra\-display\fR\*(rq can contain the following sequences:
|
||||||
.TP
|
.TP
|
||||||
.B %p
|
.BR %p ", " %{progress}
|
||||||
Progress bar.
|
Progress bar (suffixed with a percentage if the size is known).
|
||||||
Expands to fill the remaining space.
|
|
||||||
Should only be specified once.
|
|
||||||
Equivalent to \*(lq\fB\-\-progress\fR\*(rq.
|
Equivalent to \*(lq\fB\-\-progress\fR\*(rq.
|
||||||
|
Expands to fill the remaining space unless prefixed by a number to set the
|
||||||
|
width, such as \*(lq\fB%20p\fR\*(rq or \*(lq\fB%20{progress}\fR\*(rq.
|
||||||
.TP
|
.TP
|
||||||
.B %t
|
.BR %{progress\-bar\-only}
|
||||||
|
Progress bar, without any sides, and without any percentage displayed
|
||||||
|
afterwards.
|
||||||
|
Expands to fill the remaining space unless prefixed by a number.
|
||||||
|
.TP
|
||||||
|
.B %{progress\-amount\-only}
|
||||||
|
The percentage completion (or maximum rate, with \*(lq\fB\-\-gauge\fR\*(rq
|
||||||
|
when the size is unknown).
|
||||||
|
.TP
|
||||||
|
.B %{bar\-plain}
|
||||||
|
Progress bar in the standard plain format, without any sides, and without
|
||||||
|
any percentage displayed afterwards.
|
||||||
|
Expands to fill the remaining space unless prefixed by a number.
|
||||||
|
.TP
|
||||||
|
.B %{bar\-block}
|
||||||
|
Progress bar using Unicode full blocks, without any sides, and without any
|
||||||
|
percentage displayed afterwards.
|
||||||
|
Expands to fill the remaining space unless prefixed by a number.
|
||||||
|
If UTF-8 output is not available, the plain format is used.
|
||||||
|
.TP
|
||||||
|
.B %{bar\-granular}
|
||||||
|
Progress bar using Unicode full blocks, and 1/8th blocks for partial fills,
|
||||||
|
providing a more granular display.
|
||||||
|
Like the other \*(lq%{bar}\*(rq strings this shows the bar without any
|
||||||
|
sides, and without any percentage displayed afterwards, and expands to fill
|
||||||
|
the remaining space unless prefixed by a number.
|
||||||
|
If UTF-8 output is not available, the plain format is used.
|
||||||
|
.TP
|
||||||
|
.B %{bar\-shaded}
|
||||||
|
Progress bar using Unicode full blocks and shade characters - dark and
|
||||||
|
medium shade are used for partial fills, and the light shade is used for the
|
||||||
|
background.
|
||||||
|
Like the other \*(lq%{bar}\*(rq strings this shows the bar without any
|
||||||
|
sides, and without any percentage displayed afterwards, and expands to fill
|
||||||
|
the remaining space unless prefixed by a number.
|
||||||
|
If UTF-8 output is not available, the plain format is used.
|
||||||
|
.TP
|
||||||
|
.BR %t ", " %{timer}
|
||||||
Elapsed time.
|
Elapsed time.
|
||||||
Equivalent to \*(lq\fB\-\-timer\fR\*(rq.
|
Equivalent to \*(lq\fB\-\-timer\fR\*(rq.
|
||||||
.TP
|
.TP
|
||||||
.B %e
|
.BR %e ", " %{eta}
|
||||||
ETA as time remaining.
|
ETA as time remaining.
|
||||||
Equivalent to \*(lq\fB\-\-eta\fR\*(rq.
|
Equivalent to \*(lq\fB\-\-eta\fR\*(rq.
|
||||||
.TP
|
.TP
|
||||||
.B %I
|
.BR %I ", " %{fineta}
|
||||||
ETA as local time at which the transfer will finish.
|
ETA as local time at which the transfer will finish.
|
||||||
Equivalent to \*(lq\fB\-\-fineta\fR\*(rq.
|
Equivalent to \*(lq\fB\-\-fineta\fR\*(rq.
|
||||||
.TP
|
.TP
|
||||||
.B %r
|
.BR %r ", " %{rate}
|
||||||
Current data transfer rate.
|
Current data transfer rate.
|
||||||
Equivalent to \*(lq\fB\-\-rate\fR\*(rq.
|
Equivalent to \*(lq\fB\-\-rate\fR\*(rq.
|
||||||
.TP
|
.TP
|
||||||
.B %a
|
.BR %a ", " %{average\-rate}
|
||||||
Average data transfer rate.
|
Average data transfer rate.
|
||||||
Equivalent to \*(lq\fB\-\-average\-rate\fR\*(rq.
|
Equivalent to \*(lq\fB\-\-average\-rate\fR\*(rq.
|
||||||
.TP
|
.TP
|
||||||
.B %b
|
.BR %b ", " %{bytes} ", " %{transferred}
|
||||||
Bytes transferred so far (or lines if \*(lq\fB\-\-line\-mode\fR\*(rq was specified).
|
Bytes transferred so far (or lines if \*(lq\fB\-\-line\-mode\fR\*(rq was specified).
|
||||||
Equivalent to \*(lq\fB\-\-bytes\fR\*(rq.
|
Equivalent to \*(lq\fB\-\-bytes\fR\*(rq.
|
||||||
If \*(lq\fB\-\-bits\fR\*(rq was specified, \*(lq\fB%b\fR\*(rq shows the bits
|
If \*(lq\fB\-\-bits\fR\*(rq was specified, \*(lq\fB%b\fR\*(rq shows the bits
|
||||||
transferred so far, not bytes.
|
transferred so far, not bytes.
|
||||||
.TP
|
.TP
|
||||||
.B %T
|
.BR %T ", " %{buffer\-percent}
|
||||||
Percentage of the transfer buffer in use.
|
Percentage of the transfer buffer in use.
|
||||||
Equivalent to \*(lq\fB\-\-buffer\-percent\fR\*(rq.
|
Equivalent to \*(lq\fB\-\-buffer\-percent\fR\*(rq.
|
||||||
Displays \*(lq{\-\-\-\-}\*(rq if the transfer is being done with
|
Displays \*(lq{\-\-\-\-}\*(rq if the transfer is being done with
|
||||||
\fBsplice\fR(2), since splicing to or from pipes does not use the buffer.
|
\fBsplice\fR(2), since splicing to or from pipes does not use the buffer.
|
||||||
.TP
|
.TP
|
||||||
.B %nA
|
.BR %nA ", " %n{last\-written}
|
||||||
Show the last \fIn\fR bytes written (for example, \*(lq\fB%16A\fR\*(rq shows
|
Show the last \fIn\fR bytes written (for example, \*(lq\fB%16A\fR\*(rq shows
|
||||||
the last 16 bytes).
|
the last 16 bytes).
|
||||||
Shows only dots if the transfer is being done with \fBsplice\fR(2), since
|
Shows only dots if the transfer is being done with \fBsplice\fR(2), since
|
||||||
splicing to or from pipes does not use the buffer.
|
splicing to or from pipes does not use the buffer.
|
||||||
.TP
|
.TP
|
||||||
.B %N
|
.BR %nL ", " %n{previous\-line}
|
||||||
|
Show the first \fIn\fR bytes of the most recently written line (for example,
|
||||||
|
\*(lq\fB%40L\fR\*(rq shows the first 40 bytes).
|
||||||
|
If no \fIn\fR is given, then this expands to fill the available space.
|
||||||
|
Shows only spaces if the transfer is being done with \fBsplice\fR(2).
|
||||||
|
.TP
|
||||||
|
.BR %N ", " %{name}
|
||||||
Show the name prefix given by \*(lq\fB\-\-name\fR\*(rq.
|
Show the name prefix given by \*(lq\fB\-\-name\fR\*(rq.
|
||||||
Padded to 9 characters with spaces, and suffixed with \*(lq:\*(rq.
|
Padded to 9 characters with spaces, and suffixed with \*(lq:\*(rq.
|
||||||
.TP
|
.TP
|
||||||
|
.B %{sgr:colour,...}
|
||||||
|
Emit ECMA-48 SGR (Select Graphic Rendition) codes if the terminal supports
|
||||||
|
colours, where \fIcolour,...\fR is a comma-separated list of any of the
|
||||||
|
keywords below, or the numeric values from \fBconsole_codes\fR(4). If
|
||||||
|
colour support is not available, nothing is emitted.
|
||||||
|
.TP
|
||||||
|
.B ""
|
||||||
|
Supported keywords are:
|
||||||
|
\fBreset\fR or \fBnone\fR,
|
||||||
|
\fBblack\fR,
|
||||||
|
\fBred\fR,
|
||||||
|
\fBgreen\fR,
|
||||||
|
\fBbrown\fR or \fByellow\fR,
|
||||||
|
\fBblue\fR,
|
||||||
|
\fBmagenta\fR,
|
||||||
|
\fBcyan\fR,
|
||||||
|
\fBwhite\fR,
|
||||||
|
\fBfg\-black\fR,
|
||||||
|
\fBfg\-red\fR,
|
||||||
|
\fBfg\-green\fR,
|
||||||
|
\fBfg\-brown\fR or \fBfg\-yellow\fR,
|
||||||
|
\fBfg\-blue\fR,
|
||||||
|
\fBfg\-magenta\fR,
|
||||||
|
\fBfg\-cyan\fR,
|
||||||
|
\fBfg\-white\fR,
|
||||||
|
\fBfg\-default\fR,
|
||||||
|
\fBbg\-black\fR,
|
||||||
|
\fBbg\-red\fR,
|
||||||
|
\fBbg\-green\fR,
|
||||||
|
\fBbg\-brown\fR or \fBbg\-yellow\fR,
|
||||||
|
\fBbg\-blue\fR,
|
||||||
|
\fBbg\-magenta\fR,
|
||||||
|
\fBbg\-cyan\fR,
|
||||||
|
\fBbg\-white\fR,
|
||||||
|
\fBbg\-default\fR,
|
||||||
|
\fBbold\fR,
|
||||||
|
\fBdim\fR,
|
||||||
|
\fBitalic\fR,
|
||||||
|
\fBunderscore\fR or \fBunderline\fR,
|
||||||
|
\fBblink\fR,
|
||||||
|
\fBreverse\fR,
|
||||||
|
\fBno\-bold\fR or \fBno\-dim\fR,
|
||||||
|
\fBno\-italic\fR,
|
||||||
|
\fBno\-underscore\fR or \fBno\-underline\fR,
|
||||||
|
\fBno\-blink\fR,
|
||||||
|
\fBno\-reverse\fR.
|
||||||
|
.TP
|
||||||
|
.B ""
|
||||||
|
With colours, the optional "fg-" prefix indicates foreground; a prefix of
|
||||||
|
"bg-" indicates background.
|
||||||
|
.TP
|
||||||
|
.B ""
|
||||||
|
For example, \*(lq\fB%{sgr:green,bold}TEXT%{sgr:reset}\fR\*(lq will make
|
||||||
|
\fITEXT\fR bold green on supported terminals.
|
||||||
|
.TP
|
||||||
.B %%
|
.B %%
|
||||||
A single \*(lq%\*(rq.
|
A single \*(lq%\*(rq.
|
||||||
.PP
|
.PP
|
||||||
Any other contents are reproduced in the progress display as-is.
|
Any other contents are reproduced in the progress display as-is.
|
||||||
.PP
|
.PP
|
||||||
The format string equivalent of turning on all display switches is
|
The format string equivalent of the default display switches is
|
||||||
\*(lq\fB%N\~%b\~%T\~%t\~%r\~%a\~%p\~%e\~%I\~%8A\fR\*(rq.
|
\*(lq\fB%b\~%t\~%r\~%p\~%e\fR\*(rq.
|
||||||
.\"
|
.\"
|
||||||
.SH EXAMPLES
|
.SH EXAMPLES
|
||||||
Some suggested common switch combinations:
|
Some suggested common switch combinations:
|
||||||
@@ -553,7 +573,7 @@ Show only the elapsed time - useful as a simple timer, such as
|
|||||||
The default behaviour: progress bar, elapsed time, estimated completion
|
The default behaviour: progress bar, elapsed time, estimated completion
|
||||||
time, current rate, and byte counter.
|
time, current rate, and byte counter.
|
||||||
.PP
|
.PP
|
||||||
On MacOS, it may be useful to specify \*(lq\fB\-\-buffer\-size\~1024\fR\*(rq
|
On macOS, it may be useful to specify \*(lq\fB\-\-buffer\-size\~1024\fR\*(rq
|
||||||
in a pipeline, as this may improve performance.
|
in a pipeline, as this may improve performance.
|
||||||
.PP
|
.PP
|
||||||
To watch how quickly a file is transferred using \fBnc\fR(1):
|
To watch how quickly a file is transferred using \fBnc\fR(1):
|
||||||
@@ -569,19 +589,18 @@ expected size to \fBpv\fR:
|
|||||||
.PP
|
.PP
|
||||||
.in +4
|
.in +4
|
||||||
.EX
|
.EX
|
||||||
cat file | pv \-s 12345 | nc \-w 1 somewhere.com 3000
|
cat file | pv \-\-size 12345 | nc \-w 1 somewhere.com 3000
|
||||||
.EE
|
.EE
|
||||||
.in
|
.in
|
||||||
.PP
|
.PP
|
||||||
A more complicated example using numeric output to feed into the
|
To watch the progress of creating a tar.gz archive:
|
||||||
\fBdialog\fR(1) program for a full-screen progress display:
|
|
||||||
.PP
|
.PP
|
||||||
.in +4
|
.in +4
|
||||||
.EX
|
.EX
|
||||||
(tar cf \- . \e
|
tar cf \- directory/ \e
|
||||||
| pv \-n \-s $(du \-sb . | awk '{print $1}') \e
|
| pv \-\-size $(du \-sb directory/ | awk '{print $1}') \e
|
||||||
| gzip \-9 > out.tgz) 2>&1 \e
|
| gzip \-9 \e
|
||||||
| dialog \-\-gauge 'Progress' 7 70
|
> out.tar.gz
|
||||||
.EE
|
.EE
|
||||||
.in
|
.in
|
||||||
.PP
|
.PP
|
||||||
@@ -614,19 +633,37 @@ device, then the size of the block device will be used and \fBpv\fR will
|
|||||||
automatically stop at that size as if \*(lq\fB\-\-stop\-at\-size\fR\*(rq had
|
automatically stop at that size as if \*(lq\fB\-\-stop\-at\-size\fR\*(rq had
|
||||||
been given.
|
been given.
|
||||||
.PP
|
.PP
|
||||||
(Linux only): Watching file descriptor 3 opened by another process 1234:
|
(Linux and macOS only): Watching file descriptor 3 opened by another process 1234:
|
||||||
.PP
|
.PP
|
||||||
.in +4
|
.in +4
|
||||||
.EX
|
.EX
|
||||||
pv \-d 1234:3
|
pv \-\-watchfd 1234:3
|
||||||
.EE
|
.EE
|
||||||
.in
|
.in
|
||||||
.PP
|
.PP
|
||||||
(Linux only): Watching all file descriptors used by process 1234:
|
(Linux and macOS only): Watching all file descriptors used by process 1234:
|
||||||
.PP
|
.PP
|
||||||
.in +4
|
.in +4
|
||||||
.EX
|
.EX
|
||||||
pv \-d 1234
|
pv \-\-watchfd 1234
|
||||||
|
.EE
|
||||||
|
.in
|
||||||
|
.PP
|
||||||
|
Rate-limiting the transfer between two processes in a pipeline, with no
|
||||||
|
display:
|
||||||
|
.PP
|
||||||
|
.in +4
|
||||||
|
.EX
|
||||||
|
producer | pv \-\-quiet \-\-rate\-limit 1M | consumer
|
||||||
|
.EE
|
||||||
|
.in
|
||||||
|
.PP
|
||||||
|
Sending logs to a processing script, showing the most recent line as part of
|
||||||
|
the progress display:
|
||||||
|
.PP
|
||||||
|
.in +4
|
||||||
|
.EX
|
||||||
|
pv \-\-format '%a %p : %L' big.log | processing-script
|
||||||
.EE
|
.EE
|
||||||
.in
|
.in
|
||||||
.\"
|
.\"
|
||||||
@@ -635,23 +672,23 @@ An exit status of 1 indicates a problem with the \*(lq\fB\-\-remote\fR\*(rq
|
|||||||
or \*(lq\fB\-\-pidfile\fR\*(rq options.
|
or \*(lq\fB\-\-pidfile\fR\*(rq options.
|
||||||
.PP
|
.PP
|
||||||
Any other exit status is a bitmask of the following:
|
Any other exit status is a bitmask of the following:
|
||||||
.TP
|
.TP 5
|
||||||
.B 2
|
\~\fB2\fR
|
||||||
One or more files could not be accessed, \fBstat\fR(2)ed, or opened.
|
One or more files could not be accessed, \fBstat\fR(2)ed, or opened.
|
||||||
.TP
|
.TP
|
||||||
.B 4
|
\~\fB4\fR
|
||||||
An input file was the same as the output file.
|
An input file was the same as the output file.
|
||||||
.TP
|
.TP
|
||||||
.B 8
|
\~\fB8\fR
|
||||||
Internal error with closing a file or moving to the next file.
|
Internal error with closing a file or moving to the next file.
|
||||||
.TP
|
.TP
|
||||||
.B 16
|
\~\fB16\fR
|
||||||
There was an error while transferring data from one or more input files.
|
There was an error while transferring data from one or more input files.
|
||||||
.TP
|
.TP
|
||||||
.B 32
|
\~\fB32\fR
|
||||||
A signal was caught that caused an early exit.
|
A signal was caught that caused an early exit.
|
||||||
.TP
|
.TP
|
||||||
.B 64
|
\~\fB64\fR
|
||||||
Memory allocation failed.
|
Memory allocation failed.
|
||||||
.PP
|
.PP
|
||||||
A zero exit status indicates no problems.
|
A zero exit status indicates no problems.
|
||||||
@@ -721,6 +758,25 @@ If the input size cannot be calculated, and the output is a block device,
|
|||||||
then \fBpv\fR will read the output device's size, use that as if it had been
|
then \fBpv\fR will read the output device's size, use that as if it had been
|
||||||
passed to \*(lq\fB\-\-size\fR\*(rq, and activate
|
passed to \*(lq\fB\-\-size\fR\*(rq, and activate
|
||||||
\*(lq\fB\-\-stop\-at\-size\fR\*(rq.
|
\*(lq\fB\-\-stop\-at\-size\fR\*(rq.
|
||||||
|
.PP
|
||||||
|
The \*(lq\fB%nA\fR\*(rq and \*(lq\fB%nL\fR\*(rq format sequences may not be
|
||||||
|
effective with small input files, and \*(lq\fB%nL\fR\*(rq may be a few lines
|
||||||
|
out due to buffering within the pipeline itself.
|
||||||
|
.PP
|
||||||
|
Numbers passed to \*(lq\fB\-\-size\fR\*(rq, \*(lq\fB\-\-rate\-limit\fR\*(rq,
|
||||||
|
\*(lq\fB\-\-buffer\-size\fR\*(rq, and \*(lq\fB\-\-error\-skip\-block\fR\*(rq
|
||||||
|
may all be expressed as decimals if followed by a suffix, so for example
|
||||||
|
\*(lq\fI\-\-size\~1.5G\fR\*(rq is equivalent to
|
||||||
|
\*(lq\fI\-\-size\~1536M\fR\*(rq.
|
||||||
|
.PP
|
||||||
|
Numbers passed to \*(lq\fB\-\-interval\fR\*(rq and
|
||||||
|
\*(lq\fB\-\-delay\-start\fR\*(rq may be integers or decimals, but may not
|
||||||
|
have a suffix.
|
||||||
|
.PP
|
||||||
|
Numbers passed to \*(lq\fB\-\-last\-written\fR\*(rq,
|
||||||
|
\*(lq\fB\-\-width\fR\*(rq, \*(lq\fB\-\-height\fR\*(rq,
|
||||||
|
\*(lq\fB\-\-average\-rate\-window\fR\*(rq, and \*(lq\fB\-\-remote\fR\*(rq
|
||||||
|
must be integers with no suffix.
|
||||||
.\"
|
.\"
|
||||||
.SH REPORTING BUGS
|
.SH REPORTING BUGS
|
||||||
Please report any bugs to \fBpv@ivarch.com\fR.
|
Please report any bugs to \fBpv@ivarch.com\fR.
|
||||||
@@ -732,11 +788,11 @@ Alternatively, use the issue tracker linked from the
|
|||||||
.\"
|
.\"
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR cat (1),
|
.BR cat (1),
|
||||||
.BR dialog (1),
|
|
||||||
.BR splice (2),
|
.BR splice (2),
|
||||||
.BR fdatasync (2),
|
.BR fdatasync (2),
|
||||||
.BR open (2)
|
.BR open (2)
|
||||||
(for \fBO_DIRECT\fR)
|
(for \fBO_DIRECT\fR),
|
||||||
|
.BR console_codes (4)
|
||||||
.\"
|
.\"
|
||||||
.SH COPYRIGHT
|
.SH COPYRIGHT
|
||||||
Copyright \(co 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood.
|
Copyright \(co 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2024 Andrew Wood.
|
||||||
|
|||||||
+152
-64
@@ -6,35 +6,9 @@ pv - monitor the progress of data through a pipe
|
|||||||
|
|
||||||
**pv** \[*OPTION*\]\... \[*FILE*\]\...
|
**pv** \[*OPTION*\]\... \[*FILE*\]\...
|
||||||
|
|
||||||
**pv** \[ **-pteIrab8kTv** \] \[ **-A** NUM \] \[ **-F** FORMAT \] \[
|
**pv** **-d**\|**\--watchfd** *PID*\[:*FD*\] \[*OPTION*\]\...
|
||||||
**-x** SPEC \] \[ **-Wgl0fc** \] \[ **-D** SEC \] \[ **-s** SIZE \] \[
|
|
||||||
**-i** SEC \] \[ **-m** SEC \] \[ **-w** WIDTH \] \[ **-H** HEIGHT \] \[
|
|
||||||
**-N** NAME \] \[ **-o** FILE \] \[ **-L** RATE \] \[ **-B** BYTES \] \[
|
|
||||||
**-CESYKX** \] \[ **-Z** BYTES \] \[ **-U** FILE \] \[ **-P** FILE \]
|
|
||||||
[*FILE* . . .\]
|
|
||||||
|
|
||||||
**pv** **-n** \[ **-trbv** \] \[ **-Wl0** \] \[ **-D** SEC \] \[ **-s**
|
**pv** **-R**\|**\--remote** *PID* \[*OPTION*\]\...
|
||||||
SIZE \] \[ **-i** SEC \] \[ **-o** FILE \] \[ **-L** RATE \] \[ **-B**
|
|
||||||
BYTES \] \[ **-CESYKX** \] \[ **-Z** BYTES \] \[ **-U** FILE \] \[
|
|
||||||
**-P** FILE \] \[*FILE* . . .\]
|
|
||||||
|
|
||||||
**pv** **-q** \[ **-v** \] \[ **-s** SIZE \] \[ **-o** FILE \] \[ **-L**
|
|
||||||
RATE \] \[ **-B** BYTES \] \[ **-CESYKX** \] \[ **-Z** BYTES \] \[
|
|
||||||
**-U** FILE \] \[ **-P** FILE \] \[*FILE* . . .\]
|
|
||||||
|
|
||||||
**pv** **-R** *PID* \[ **-pteIrabT** \] \[ **-A** NUM \] \[ **-F**
|
|
||||||
FORMAT \] \[ **-s** SIZE \] \[ **-i** SEC \] \[ **-w** WIDTH \] \[
|
|
||||||
**-H** HEIGHT \] \[ **-N** NAME \] \[ **-L** RATE \] \[ **-B** BYTES \]
|
|
||||||
|
|
||||||
**pv** **-d** *PID:FD* \[ **-pteIrab8kTnq** \] \[ **-F** FORMAT \] \[
|
|
||||||
**-i** SEC \] \[ **-w** WIDTH \] \[ **-H** HEIGHT \]
|
|
||||||
|
|
||||||
**pv** **-d** *PID* \[ **-pteIrab8kTnq** \] \[ **-F** FORMAT \] \[
|
|
||||||
**-i** SEC \] \[ **-w** WIDTH \] \[ **-H** HEIGHT \]
|
|
||||||
|
|
||||||
**pv** **-h**
|
|
||||||
|
|
||||||
**pv** **-V**
|
|
||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
@@ -235,6 +209,14 @@ are explicitly switched on will be shown.
|
|||||||
with "**\--cursor**" if you have a complicated pipeline and you want
|
with "**\--cursor**" if you have a complicated pipeline and you want
|
||||||
to be able to tell different parts of it apart.
|
to be able to tell different parts of it apart.
|
||||||
|
|
||||||
|
**-u STYLE, \--bar-style STYLE**
|
||||||
|
|
||||||
|
: Change the default progress bar style shown by "**\--progress**", or
|
||||||
|
by the "**\--format**" sequences "**%{progress}**" or
|
||||||
|
"**%{progress-bar-only}**", to *STYLE*. The *STYLE* can be one of
|
||||||
|
**plain** (the default), **block**, **granular**, or **shaded**.
|
||||||
|
These styles are described in the **FORMATTING** section below.
|
||||||
|
|
||||||
**-x SPEC, \--extra-display SPEC**
|
**-x SPEC, \--extra-display SPEC**
|
||||||
|
|
||||||
: As well as displaying progress to the terminal, also write it to
|
: As well as displaying progress to the terminal, also write it to
|
||||||
@@ -284,7 +266,7 @@ are explicitly switched on will be shown.
|
|||||||
"**\--size**" can be used. The default buffer size is the block size
|
"**\--size**" can be used. The default buffer size is the block size
|
||||||
of the input file\'s filesystem multiplied by 32 (512KiB max), or
|
of the input file\'s filesystem multiplied by 32 (512KiB max), or
|
||||||
400KiB if the block size cannot be determined. This can be useful on
|
400KiB if the block size cannot be determined. This can be useful on
|
||||||
platforms like MacOS with pipelines that perform better with
|
platforms like macOS with pipelines that perform better with
|
||||||
specific buffer sizes such as 1024. Implies "**\--no-splice**".
|
specific buffer sizes such as 1024. Implies "**\--no-splice**".
|
||||||
|
|
||||||
**-C, \--no-splice**
|
**-C, \--no-splice**
|
||||||
@@ -373,6 +355,8 @@ are explicitly switched on will be shown.
|
|||||||
be preferable so that pipe buffering doesn\'t affect the progress
|
be preferable so that pipe buffering doesn\'t affect the progress
|
||||||
display.
|
display.
|
||||||
|
|
||||||
|
## Alternative operating modes
|
||||||
|
|
||||||
**-d PID\[:FD\], \--watchfd PID\[:FD\]**
|
**-d PID\[:FD\], \--watchfd PID\[:FD\]**
|
||||||
|
|
||||||
: Instead of transferring data, watch file descriptor *FD* of process
|
: Instead of transferring data, watch file descriptor *FD* of process
|
||||||
@@ -398,7 +382,7 @@ are explicitly switched on will be shown.
|
|||||||
"**\--delay-start**", "**\--skip-errors**", and
|
"**\--delay-start**", "**\--skip-errors**", and
|
||||||
"**\--stop-at-size**".
|
"**\--stop-at-size**".
|
||||||
|
|
||||||
## General options
|
## Other options
|
||||||
|
|
||||||
**-P FILE, \--pidfile FILE**
|
**-P FILE, \--pidfile FILE**
|
||||||
|
|
||||||
@@ -420,65 +404,142 @@ are explicitly switched on will be shown.
|
|||||||
Format strings used by "**\--format**" and "**\--extra-display**" can
|
Format strings used by "**\--format**" and "**\--extra-display**" can
|
||||||
contain the following sequences:
|
contain the following sequences:
|
||||||
|
|
||||||
**%p**
|
**%p**, **%{progress}**
|
||||||
|
|
||||||
: Progress bar. Expands to fill the remaining space. Should only be
|
: Progress bar (suffixed with a percentage if the size is known).
|
||||||
specified once. Equivalent to "**\--progress**".
|
Equivalent to "**\--progress**". Expands to fill the remaining space
|
||||||
|
unless prefixed by a number to set the width, such as "**%20p**" or
|
||||||
|
"**%20{progress}**".
|
||||||
|
|
||||||
**%t**
|
**%{progress-bar-only}**
|
||||||
|
|
||||||
|
: Progress bar, without any sides, and without any percentage
|
||||||
|
displayed afterwards. Expands to fill the remaining space unless
|
||||||
|
prefixed by a number.
|
||||||
|
|
||||||
|
**%{progress-amount-only}**
|
||||||
|
|
||||||
|
: The percentage completion (or maximum rate, with "**\--gauge**" when
|
||||||
|
the size is unknown).
|
||||||
|
|
||||||
|
**%{bar-plain}**
|
||||||
|
|
||||||
|
: Progress bar in the standard plain format, without any sides, and
|
||||||
|
without any percentage displayed afterwards. Expands to fill the
|
||||||
|
remaining space unless prefixed by a number.
|
||||||
|
|
||||||
|
**%{bar-block}**
|
||||||
|
|
||||||
|
: Progress bar using Unicode full blocks, without any sides, and
|
||||||
|
without any percentage displayed afterwards. Expands to fill the
|
||||||
|
remaining space unless prefixed by a number. If UTF-8 output is not
|
||||||
|
available, the plain format is used.
|
||||||
|
|
||||||
|
**%{bar-granular}**
|
||||||
|
|
||||||
|
: Progress bar using Unicode full blocks, and 1/8th blocks for partial
|
||||||
|
fills, providing a more granular display. Like the other "%{bar}"
|
||||||
|
strings this shows the bar without any sides, and without any
|
||||||
|
percentage displayed afterwards, and expands to fill the remaining
|
||||||
|
space unless prefixed by a number. If UTF-8 output is not available,
|
||||||
|
the plain format is used.
|
||||||
|
|
||||||
|
**%{bar-shaded}**
|
||||||
|
|
||||||
|
: Progress bar using Unicode full blocks and shade characters - dark
|
||||||
|
and medium shade are used for partial fills, and the light shade is
|
||||||
|
used for the background. Like the other "%{bar}" strings this shows
|
||||||
|
the bar without any sides, and without any percentage displayed
|
||||||
|
afterwards, and expands to fill the remaining space unless prefixed
|
||||||
|
by a number. If UTF-8 output is not available, the plain format is
|
||||||
|
used.
|
||||||
|
|
||||||
|
**%t**, **%{timer}**
|
||||||
|
|
||||||
: Elapsed time. Equivalent to "**\--timer**".
|
: Elapsed time. Equivalent to "**\--timer**".
|
||||||
|
|
||||||
**%e**
|
**%e**, **%{eta}**
|
||||||
|
|
||||||
: ETA as time remaining. Equivalent to "**\--eta**".
|
: ETA as time remaining. Equivalent to "**\--eta**".
|
||||||
|
|
||||||
**%I**
|
**%I**, **%{fineta}**
|
||||||
|
|
||||||
: ETA as local time at which the transfer will finish. Equivalent to
|
: ETA as local time at which the transfer will finish. Equivalent to
|
||||||
"**\--fineta**".
|
"**\--fineta**".
|
||||||
|
|
||||||
**%r**
|
**%r**, **%{rate}**
|
||||||
|
|
||||||
: Current data transfer rate. Equivalent to "**\--rate**".
|
: Current data transfer rate. Equivalent to "**\--rate**".
|
||||||
|
|
||||||
**%a**
|
**%a**, **%{average-rate}**
|
||||||
|
|
||||||
: Average data transfer rate. Equivalent to "**\--average-rate**".
|
: Average data transfer rate. Equivalent to "**\--average-rate**".
|
||||||
|
|
||||||
**%b**
|
**%b**, **%{bytes}**, **%{transferred}**
|
||||||
|
|
||||||
: Bytes transferred so far (or lines if "**\--line-mode**" was
|
: Bytes transferred so far (or lines if "**\--line-mode**" was
|
||||||
specified). Equivalent to "**\--bytes**". If "**\--bits**" was
|
specified). Equivalent to "**\--bytes**". If "**\--bits**" was
|
||||||
specified, "**%b**" shows the bits transferred so far, not bytes.
|
specified, "**%b**" shows the bits transferred so far, not bytes.
|
||||||
|
|
||||||
**%T**
|
**%T**, **%{buffer-percent}**
|
||||||
|
|
||||||
: Percentage of the transfer buffer in use. Equivalent to
|
: Percentage of the transfer buffer in use. Equivalent to
|
||||||
"**\--buffer-percent**". Displays "{\-\-\--}" if the transfer is
|
"**\--buffer-percent**". Displays "{\-\-\--}" if the transfer is
|
||||||
being done with **splice**(2), since splicing to or from pipes does
|
being done with **splice**(2), since splicing to or from pipes does
|
||||||
not use the buffer.
|
not use the buffer.
|
||||||
|
|
||||||
**%nA**
|
**%nA**, **%n{last-written}**
|
||||||
|
|
||||||
: Show the last *n* bytes written (for example, "**%16A**" shows the
|
: Show the last *n* bytes written (for example, "**%16A**" shows the
|
||||||
last 16 bytes). Shows only dots if the transfer is being done with
|
last 16 bytes). Shows only dots if the transfer is being done with
|
||||||
**splice**(2), since splicing to or from pipes does not use the
|
**splice**(2), since splicing to or from pipes does not use the
|
||||||
buffer.
|
buffer.
|
||||||
|
|
||||||
**%N**
|
**%nL**, **%n{previous-line}**
|
||||||
|
|
||||||
|
: Show the first *n* bytes of the most recently written line (for
|
||||||
|
example, "**%40L**" shows the first 40 bytes). If no *n* is given,
|
||||||
|
then this expands to fill the available space. Shows only spaces if
|
||||||
|
the transfer is being done with **splice**(2).
|
||||||
|
|
||||||
|
**%N**, **%{name}**
|
||||||
|
|
||||||
: Show the name prefix given by "**\--name**". Padded to 9 characters
|
: Show the name prefix given by "**\--name**". Padded to 9 characters
|
||||||
with spaces, and suffixed with ":".
|
with spaces, and suffixed with ":".
|
||||||
|
|
||||||
|
**%{sgr:colour,\...}**
|
||||||
|
|
||||||
|
: Emit ECMA-48 SGR (Select Graphic Rendition) codes if the terminal
|
||||||
|
supports colours, where *colour,\...* is a comma-separated list of
|
||||||
|
any of the keywords below, or the numeric values from
|
||||||
|
**console_codes**(4). If colour support is not available, nothing is
|
||||||
|
emitted.
|
||||||
|
|
||||||
|
: Supported keywords are: **reset** or **none**, **black**, **red**,
|
||||||
|
**green**, **brown** or **yellow**, **blue**, **magenta**, **cyan**,
|
||||||
|
**white**, **fg-black**, **fg-red**, **fg-green**, **fg-brown** or
|
||||||
|
**fg-yellow**, **fg-blue**, **fg-magenta**, **fg-cyan**,
|
||||||
|
**fg-white**, **fg-default**, **bg-black**, **bg-red**,
|
||||||
|
**bg-green**, **bg-brown** or **bg-yellow**, **bg-blue**,
|
||||||
|
**bg-magenta**, **bg-cyan**, **bg-white**, **bg-default**, **bold**,
|
||||||
|
**dim**, **italic**, **underscore** or **underline**, **blink**,
|
||||||
|
**reverse**, **no-bold** or **no-dim**, **no-italic**,
|
||||||
|
**no-underscore** or **no-underline**, **no-blink**, **no-reverse**.
|
||||||
|
|
||||||
|
: With colours, the optional \"fg-\" prefix indicates foreground; a
|
||||||
|
prefix of \"bg-\" indicates background.
|
||||||
|
|
||||||
|
: For example, "**%{sgr:green,bold}TEXT%{sgr:reset}**" will make
|
||||||
|
*TEXT* bold green on supported terminals.
|
||||||
|
|
||||||
**%%**
|
**%%**
|
||||||
|
|
||||||
: A single "%".
|
: A single "%".
|
||||||
|
|
||||||
Any other contents are reproduced in the progress display as-is.
|
Any other contents are reproduced in the progress display as-is.
|
||||||
|
|
||||||
The format string equivalent of turning on all display switches is
|
The format string equivalent of the default display switches is
|
||||||
"**%N %b %T %t %r %a %p %e %I %8A**".
|
"**%b %t %r %p %e**".
|
||||||
|
|
||||||
# EXAMPLES
|
# EXAMPLES
|
||||||
|
|
||||||
@@ -512,7 +573,7 @@ Some suggested common switch combinations:
|
|||||||
: The default behaviour: progress bar, elapsed time, estimated
|
: The default behaviour: progress bar, elapsed time, estimated
|
||||||
completion time, current rate, and byte counter.
|
completion time, current rate, and byte counter.
|
||||||
|
|
||||||
On MacOS, it may be useful to specify "**\--buffer-size 1024**" in a
|
On macOS, it may be useful to specify "**\--buffer-size 1024**" in a
|
||||||
pipeline, as this may improve performance.
|
pipeline, as this may improve performance.
|
||||||
|
|
||||||
To watch how quickly a file is transferred using **nc**(1):
|
To watch how quickly a file is transferred using **nc**(1):
|
||||||
@@ -522,15 +583,14 @@ To watch how quickly a file is transferred using **nc**(1):
|
|||||||
A similar example, transferring a file from another process and passing
|
A similar example, transferring a file from another process and passing
|
||||||
the expected size to **pv**:
|
the expected size to **pv**:
|
||||||
|
|
||||||
cat file | pv -s 12345 | nc -w 1 somewhere.com 3000
|
cat file | pv --size 12345 | nc -w 1 somewhere.com 3000
|
||||||
|
|
||||||
A more complicated example using numeric output to feed into the
|
To watch the progress of creating a tar.gz archive:
|
||||||
**dialog**(1) program for a full-screen progress display:
|
|
||||||
|
|
||||||
(tar cf - . \
|
tar cf - directory/ \
|
||||||
| pv -n -s $(du -sb . | awk '{print $1}') \
|
| pv --size $(du -sb directory/ | awk '{print $1}') \
|
||||||
| gzip -9 > out.tgz) 2>&1 \
|
| gzip -9 \
|
||||||
| dialog --gauge 'Progress' 7 70
|
> out.tar.gz
|
||||||
|
|
||||||
Taking an image of a disk, skipping errors:
|
Taking an image of a disk, skipping errors:
|
||||||
|
|
||||||
@@ -549,13 +609,25 @@ block device, then the size of the block device will be used and **pv**
|
|||||||
will automatically stop at that size as if "**\--stop-at-size**" had
|
will automatically stop at that size as if "**\--stop-at-size**" had
|
||||||
been given.
|
been given.
|
||||||
|
|
||||||
(Linux only): Watching file descriptor 3 opened by another process 1234:
|
(Linux and macOS only): Watching file descriptor 3 opened by another
|
||||||
|
process 1234:
|
||||||
|
|
||||||
pv -d 1234:3
|
pv --watchfd 1234:3
|
||||||
|
|
||||||
(Linux only): Watching all file descriptors used by process 1234:
|
(Linux and macOS only): Watching all file descriptors used by process
|
||||||
|
1234:
|
||||||
|
|
||||||
pv -d 1234
|
pv --watchfd 1234
|
||||||
|
|
||||||
|
Rate-limiting the transfer between two processes in a pipeline, with no
|
||||||
|
display:
|
||||||
|
|
||||||
|
producer | pv --quiet --rate-limit 1M | consumer
|
||||||
|
|
||||||
|
Sending logs to a processing script, showing the most recent line as
|
||||||
|
part of the progress display:
|
||||||
|
|
||||||
|
pv --format '%a %p : %L' big.log | processing-script
|
||||||
|
|
||||||
# EXIT STATUS
|
# EXIT STATUS
|
||||||
|
|
||||||
@@ -564,28 +636,28 @@ An exit status of 1 indicates a problem with the "**\--remote**" or
|
|||||||
|
|
||||||
Any other exit status is a bitmask of the following:
|
Any other exit status is a bitmask of the following:
|
||||||
|
|
||||||
**2**
|
**2**
|
||||||
|
|
||||||
: One or more files could not be accessed, **stat**(2)ed, or opened.
|
: One or more files could not be accessed, **stat**(2)ed, or opened.
|
||||||
|
|
||||||
**4**
|
**4**
|
||||||
|
|
||||||
: An input file was the same as the output file.
|
: An input file was the same as the output file.
|
||||||
|
|
||||||
**8**
|
**8**
|
||||||
|
|
||||||
: Internal error with closing a file or moving to the next file.
|
: Internal error with closing a file or moving to the next file.
|
||||||
|
|
||||||
**16**
|
**16**
|
||||||
|
|
||||||
: There was an error while transferring data from one or more input
|
: There was an error while transferring data from one or more input
|
||||||
files.
|
files.
|
||||||
|
|
||||||
**32**
|
**32**
|
||||||
|
|
||||||
: A signal was caught that caused an early exit.
|
: A signal was caught that caused an early exit.
|
||||||
|
|
||||||
**64**
|
**64**
|
||||||
|
|
||||||
: Memory allocation failed.
|
: Memory allocation failed.
|
||||||
|
|
||||||
@@ -644,6 +716,22 @@ If the input size cannot be calculated, and the output is a block
|
|||||||
device, then **pv** will read the output device\'s size, use that as if
|
device, then **pv** will read the output device\'s size, use that as if
|
||||||
it had been passed to "**\--size**", and activate "**\--stop-at-size**".
|
it had been passed to "**\--size**", and activate "**\--stop-at-size**".
|
||||||
|
|
||||||
|
The "**%nA**" and "**%nL**" format sequences may not be effective with
|
||||||
|
small input files, and "**%nL**" may be a few lines out due to buffering
|
||||||
|
within the pipeline itself.
|
||||||
|
|
||||||
|
Numbers passed to "**\--size**", "**\--rate-limit**",
|
||||||
|
"**\--buffer-size**", and "**\--error-skip-block**" may all be expressed
|
||||||
|
as decimals if followed by a suffix, so for example "*\--size 1.5G*" is
|
||||||
|
equivalent to "*\--size 1536M*".
|
||||||
|
|
||||||
|
Numbers passed to "**\--interval**" and "**\--delay-start**" may be
|
||||||
|
integers or decimals, but may not have a suffix.
|
||||||
|
|
||||||
|
Numbers passed to "**\--last-written**", "**\--width**",
|
||||||
|
"**\--height**", "**\--average-rate-window**", and "**\--remote**" must
|
||||||
|
be integers with no suffix.
|
||||||
|
|
||||||
# REPORTING BUGS
|
# REPORTING BUGS
|
||||||
|
|
||||||
Please report any bugs to **pv@ivarch.com**.
|
Please report any bugs to **pv@ivarch.com**.
|
||||||
@@ -653,8 +741,8 @@ page](https://www.ivarch.com/programs/pv.shtml).
|
|||||||
|
|
||||||
# SEE ALSO
|
# SEE ALSO
|
||||||
|
|
||||||
**cat**(1), **dialog**(1), **splice**(2), **fdatasync**(2), **open**(2)
|
**cat**(1), **splice**(2), **fdatasync**(2), **open**(2) (for
|
||||||
(for **O_DIRECT**)
|
**O_DIRECT**), **console_codes**(4)
|
||||||
|
|
||||||
# COPYRIGHT
|
# COPYRIGHT
|
||||||
|
|
||||||
|
|||||||
Executable
+205
@@ -0,0 +1,205 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Automate a portion of the release checklist. Expects to be run from a
|
||||||
|
# build directory, such as one in which "configure" has been run, i.e.
|
||||||
|
# there should be a Makefile present.
|
||||||
|
#
|
||||||
|
# If ~/.config/packaging-hosts exists, then build-package.sh is run on each
|
||||||
|
# one and the resultant packages (RPMs, DEBs, etc) are copied back.
|
||||||
|
#
|
||||||
|
# All of the release artefacts are placed in a "RELEASE-x" directory, where
|
||||||
|
# "x" is the version.
|
||||||
|
#
|
||||||
|
# Version: 0.0.2 / 16 Dec 2024
|
||||||
|
|
||||||
|
srcdir="$(awk '/^VPATH/{print $NF}' < Makefile | sed -n 1p)"
|
||||||
|
manuals="$(find "${srcdir}/docs" -mindepth 1 -maxdepth 1 -type f -name "*.[0-9]" -printf "%f\n")"
|
||||||
|
mainProgram="$(awk '/^[a-z]+_PROGRAMS/{print $3}' Makefile |cut -d '$' -f 1 | sed -n 1p)"
|
||||||
|
labTestScript="${srcdir}/docs/test-on-vm-lab.sh"
|
||||||
|
packageBuildScript="${srcdir}/docs/build-package.sh"
|
||||||
|
|
||||||
|
status () {
|
||||||
|
test -n "$*" && printf "\n"
|
||||||
|
printf '\e]0;%s\007\r' "$*" >&2
|
||||||
|
if test -n "$*"; then
|
||||||
|
tput rev >&2
|
||||||
|
printf " -- %s -- " "$*" >&2
|
||||||
|
tput sgr0 >&2
|
||||||
|
printf "\n\n"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
possiblyDie () {
|
||||||
|
printf "\n" >&2
|
||||||
|
tput bold >&2
|
||||||
|
printf "%s: %s\n" "release" "$*" >&2
|
||||||
|
tput sgr0 >&2
|
||||||
|
printf "\n%s\n" "Type 'y' and hit Enter to continue anyway."
|
||||||
|
read -r line
|
||||||
|
test "${line}" = "y" || { status ""; exit 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
test -e "${labTestScript}" || labTestScript=""
|
||||||
|
test -e "${packageBuildScript}" || packageBuildScript=""
|
||||||
|
|
||||||
|
# The checklist is re-ordered a little so that we defer making changes (like
|
||||||
|
# "make indent") until as late as possible, in case any checks fail.
|
||||||
|
|
||||||
|
status "Initial checks"
|
||||||
|
|
||||||
|
# Check MAINTAINER is provided.
|
||||||
|
test -n "${MAINTAINER}" || possiblyDie "environment variable MAINTAINER is empty"
|
||||||
|
|
||||||
|
# * Check that _po/POTFILES.in_ is up to date
|
||||||
|
if test -d "${srcdir}/po"; then
|
||||||
|
inFile="$(sort < "${srcdir}/po/POTFILES.in")"
|
||||||
|
realList="$(find "${srcdir}" -name "*.c" -printf "%P\n" | sort)"
|
||||||
|
test "${inFile}" = "${realList}" || possiblyDie "po/POTFILES.in is incorrect"
|
||||||
|
fi
|
||||||
|
|
||||||
|
status "Initial build"
|
||||||
|
make || possiblyDie "failed 'make'"
|
||||||
|
|
||||||
|
# * Run "_make analyse_" and see whether remaining warnings can be addressed
|
||||||
|
status "Source analysis"
|
||||||
|
make analyse || possiblyDie "failed 'make analyse'"
|
||||||
|
|
||||||
|
# * Version bump and documentation checks:
|
||||||
|
|
||||||
|
status "Version checks"
|
||||||
|
|
||||||
|
# * Check that _docs/NEWS.md_ is up to date
|
||||||
|
versionInNews="$(awk 'FNR==1{print $2}' "${srcdir}/docs/NEWS.md")"
|
||||||
|
printf "%s\n" "${versionInNews}" | grep -Eq '^[0-9]' || possiblyDie "version in NEWS.md (${versionInNews}) is not numeric"
|
||||||
|
|
||||||
|
# * Check the version in both _configure.ac_ and _docs/NEWS.md_ was updated
|
||||||
|
versionInConfig="$(grep ^AC_INIT "${srcdir}/configure.ac" | cut -d '[' -f 3 | cut -d ']' -f 1)"
|
||||||
|
test "${versionInConfig}" = "${versionInNews}" || possiblyDie "version in configure.ac (${versionInConfig}) mismatches NEWS.md (${versionInNews})"
|
||||||
|
|
||||||
|
# * Check that the manuals are up to date
|
||||||
|
for manPage in ${manuals}; do
|
||||||
|
versionInManual="$(awk 'FNR==1 {print $5}' "${srcdir}/docs/${manPage}" | cut -d - -f 2)"
|
||||||
|
test "${versionInManual}" = "${versionInNews}" || possiblyDie "version in ${manPage} (${versionInManual}) mismatches NEWS.md (${versionInNews})"
|
||||||
|
done
|
||||||
|
|
||||||
|
# * Check that the program version is correct
|
||||||
|
versionInVersionOutput="$(./"${mainProgram}" --version | awk 'FNR==1{print $NF}')"
|
||||||
|
test "${versionInVersionOutput}" = "${versionInNews}" || possiblyDie "version in '${mainProgram} --version' (${versionInVersionOutput}) mismatches NEWS.md (${versionInNews})"
|
||||||
|
|
||||||
|
# * Check that the year displayed by --version is correct
|
||||||
|
yearInVersion="$(./"${mainProgram}" --version | awk '/^Copyright/{print $2}')"
|
||||||
|
yearNow="$(date '+%Y')"
|
||||||
|
test "${yearInVersion}" = "${yearNow}" || possiblyDie "the year in '--version' (${yearInVersion}) is not this year (${yearNow})"
|
||||||
|
|
||||||
|
# * Make the Markdown version of the manuals and, if using VPATH, copy the result to the source directory
|
||||||
|
# We also wipe everything in "docs" so we don't accidentally package
|
||||||
|
# leftover working files.
|
||||||
|
|
||||||
|
status "Markdown manual"
|
||||||
|
|
||||||
|
rm -f docs/*
|
||||||
|
for manPage in ${manuals}; do
|
||||||
|
make "docs/${manPage}.md"
|
||||||
|
cp "docs/${manPage}.md" "${srcdir}/docs/${manPage}.md"
|
||||||
|
done
|
||||||
|
|
||||||
|
# * Run "_make indent; make indent indentclean check_"
|
||||||
|
status "Reformat source"
|
||||||
|
make indent
|
||||||
|
make indent indentclean
|
||||||
|
# The check will run later as part of "make distcheck".
|
||||||
|
|
||||||
|
# * Run "_make -C po update-po_"
|
||||||
|
status "Update po files"
|
||||||
|
if test -d "${srcdir}/po"; then
|
||||||
|
make -C po update-po || possiblyDie "update-po failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# * Run "_autoreconf_" in the source directory
|
||||||
|
status "Run autoreconf"
|
||||||
|
(cd "${srcdir}" && autoreconf -is) || possiblyDie "autoreconf failed"
|
||||||
|
|
||||||
|
# * Ensure everything has been committed to the repository
|
||||||
|
status "Commit check"
|
||||||
|
gitStatus="$(cd "${srcdir}" && git status --porcelain=v1)" || possiblyDie "failed to run 'git status'"
|
||||||
|
test -z "${gitStatus}" || possiblyDie "not everything is committed - 'git status' is not empty"
|
||||||
|
|
||||||
|
# * Consistency and build checks:
|
||||||
|
# * Wipe the build directory, and run "_configure_" there
|
||||||
|
# * Run "_make distcheck_"
|
||||||
|
# * Run "_make release MAINTAINER=<signing-user>_"
|
||||||
|
# NB "make release" implies "make distcheck".
|
||||||
|
# We set SKIP_VALGRIND_TESTS=1 because the full tests will run in the lab
|
||||||
|
# check.
|
||||||
|
status "Release archive"
|
||||||
|
workDir="$(mktemp -d)" || possiblyDie "mktemp failed"
|
||||||
|
trap 'chmod -R u+w "${workDir}"; rm -rf "${workDir}"' EXIT
|
||||||
|
(
|
||||||
|
cd "${workDir}" || exit 1
|
||||||
|
sh "${srcdir}/configure" || exit 1
|
||||||
|
make -j8 release SKIP_VALGRIND_TESTS=1 || exit 1
|
||||||
|
exit 0
|
||||||
|
) || possiblyDie "failed on 'make release'"
|
||||||
|
|
||||||
|
sourceArchive="$(find "${workDir}" -mindepth 1 -maxdepth 1 -type f -name "*.tar.gz")"
|
||||||
|
test -e "${sourceArchive}.asc" || possiblyDie "release was not signed"
|
||||||
|
|
||||||
|
# * Run "_./configure && make check_" on all test systems, using the _tar.gz_ that was just created
|
||||||
|
# * Run a cross-compilation check
|
||||||
|
if test -n "${labTestScript}"; then
|
||||||
|
status "Lab test"
|
||||||
|
sh "${labTestScript}" "${sourceArchive}" || possiblyDie "lab test failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# * Update the project web site:
|
||||||
|
# * Copy the release _.tar.gz_, _.txt_, and _.asc_ files to the web site
|
||||||
|
# * Use "_pandoc --from markdown --to html_" to convert the news and manual to HTML
|
||||||
|
status "Release dir"
|
||||||
|
rm -rf "RELEASE-${versionInNews}"
|
||||||
|
mkdir "RELEASE-${versionInNews}"
|
||||||
|
cp "${sourceArchive}" "${sourceArchive}.asc" "${sourceArchive}.txt" "RELEASE-${versionInNews}/" || possiblyDie "failed to copy release files"
|
||||||
|
|
||||||
|
status "HTML docs"
|
||||||
|
for manPage in ${manuals}; do
|
||||||
|
pandoc --from markdown --to html --shift-heading-level-by=1 < "${srcdir}/docs/${manPage}.md" > "RELEASE-${versionInNews}/${manPage}.html"
|
||||||
|
done
|
||||||
|
pandoc --from markdown --to html < "${srcdir}/docs/NEWS.md" > "RELEASE-${versionInNews}/news.html"
|
||||||
|
|
||||||
|
# Build OS packages.
|
||||||
|
packagingHosts="$(cat ~/.config/packaging-hosts 2>/dev/null)"
|
||||||
|
test -n "${packageBuildScript}" || packagingHosts=""
|
||||||
|
for buildHost in ${packagingHosts}; do
|
||||||
|
remoteWorkDir="$(ssh "${buildHost}" "mktemp -d")" || continue
|
||||||
|
test -n "${remoteWorkDir}" || continue
|
||||||
|
status "Package: ${buildHost}"
|
||||||
|
buildOK=true
|
||||||
|
scp "${packageBuildScript}" "${buildHost}:${remoteWorkDir}/build-package.sh" || buildOK=false
|
||||||
|
${buildOK} && scp "${sourceArchive}" "${buildHost}:${remoteWorkDir}/" || buildOK=false
|
||||||
|
# shellcheck disable=SC2029
|
||||||
|
${buildOK} && ssh -t "${buildHost}" "cd \"${remoteWorkDir}\" && SKIP_VALGRIND_TESTS=\"${SKIP_VALGRIND_TESTS}\" MAINTAINER=\"${MAINTAINER}\" sh ./build-package.sh ./*gz" || buildOK=false
|
||||||
|
# shellcheck disable=SC2029
|
||||||
|
${buildOK} && ssh "${buildHost}" "rm \"${remoteWorkDir}\"/${sourceArchive##*/} \"${remoteWorkDir}/build-package.sh\""
|
||||||
|
${buildOK} && mkdir -p "RELEASE-${versionInNews}/${buildHost}"
|
||||||
|
${buildOK} && scp "${buildHost}:${remoteWorkDir}/*" "RELEASE-${versionInNews}/${buildHost}/"
|
||||||
|
# shellcheck disable=SC2029
|
||||||
|
ssh "${buildHost}" "rm -rf \"${remoteWorkDir}\""
|
||||||
|
done
|
||||||
|
|
||||||
|
find "RELEASE-${versionInNews}/" -type f -exec chmod 644 '{}' ';'
|
||||||
|
find "RELEASE-${versionInNews}/" -type d -exec chmod 755 '{}' ';'
|
||||||
|
|
||||||
|
status "Done"
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
|
||||||
|
Files are under: RELEASE-${versionInNews}/
|
||||||
|
|
||||||
|
Still to do:
|
||||||
|
* Update the news and manual on the web site
|
||||||
|
* Update the version numbers on the web site
|
||||||
|
* Update the package index on the web site
|
||||||
|
* Create a new release in the repository, and apply the associated tag
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
exit 0
|
||||||
Executable
+340
@@ -0,0 +1,340 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Run "make check" from a source tarball, on a whole lab of VMs.
|
||||||
|
#
|
||||||
|
# The source tarball should contain a directory; this directory must contain
|
||||||
|
# a "configure" script. After running "configure", this script calls "make"
|
||||||
|
# and then "make check", from a build subdirectory.
|
||||||
|
#
|
||||||
|
# Hostnames need to be listed on the command line after the tarball, or in
|
||||||
|
# ~/.config/lab-hosts. They need to be reachable over SSH with no password.
|
||||||
|
#
|
||||||
|
# Cross-compilation is performed if the hostname is of the form "x:y", where
|
||||||
|
# "x" is a target like "arm-linux-gnueabi", and "y" is the name of a host of
|
||||||
|
# that architecture. The package is built locally with "--host=x" and the
|
||||||
|
# result is copied to "y" and "make check" is run.
|
||||||
|
#
|
||||||
|
# Displays progress to the terminal and produces a tarball of results. In
|
||||||
|
# the results, the file "latest-status.txt" contains the last status
|
||||||
|
# display, and there is a directory for each host. The directories contain
|
||||||
|
# SCW metrics files plus "output.log" (timestamped), "raw-output.log"
|
||||||
|
# (without timestamps), "framework-output.log" (messages from this script),
|
||||||
|
# and the "config.log", "test-suite.log", and "tests/" from the build area.
|
||||||
|
#
|
||||||
|
# Requires "scw" (https://www.ivarch.com/programs/scw.shtml).
|
||||||
|
#
|
||||||
|
# Version: 0.0.1 / 16 Dec 2024
|
||||||
|
|
||||||
|
# Number of tests to run in parallel on each host.
|
||||||
|
concurrency="1"
|
||||||
|
|
||||||
|
# Run a build and check, according to these environment variables:
|
||||||
|
#
|
||||||
|
# sourceArchive local source tarball path
|
||||||
|
# buildHost where to build, or "" for local
|
||||||
|
# checkHost where to test, or "" for local
|
||||||
|
# remoteBuildDir temp directory for remote build or check
|
||||||
|
# localBuildDir temp directory for local build
|
||||||
|
# configureArguments extra "configure" script arguments
|
||||||
|
#
|
||||||
|
# Does not return - always exits.
|
||||||
|
#
|
||||||
|
# Expects to be run under SCW, so writes status to fd 3.
|
||||||
|
#
|
||||||
|
testRunner () {
|
||||||
|
printf '%s %s\n' 'notice' 'creating build area' >&3
|
||||||
|
if test -n "${buildHost}"; then
|
||||||
|
ssh "${buildHost}" mkdir "${remoteBuildDir}" || exit 1
|
||||||
|
else
|
||||||
|
mkdir "${localBuildDir}" || exit 1
|
||||||
|
fi
|
||||||
|
printf '%s %s\n' 'ok' 'created build area' >&3
|
||||||
|
|
||||||
|
if test -n "${checkHost}"; then
|
||||||
|
printf '%s %s\n' 'notice' 'creating check area' >&3
|
||||||
|
ssh "${checkHost}" mkdir "${remoteBuildDir}" || exit 1
|
||||||
|
printf '%s %s\n' 'ok' 'created check area' >&3
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '%s %s\n' 'notice' 'copying source archive' >&3
|
||||||
|
if test -n "${buildHost}"; then
|
||||||
|
scp "${sourceArchive}" "${buildHost}:${remoteBuildDir}/" || exit 1
|
||||||
|
elif test -n "${checkHost}"; then
|
||||||
|
scp "${sourceArchive}" "${checkHost}:${remoteBuildDir}/" || exit 1
|
||||||
|
fi
|
||||||
|
printf '%s %s\n' 'ok' 'source archive copied' >&3
|
||||||
|
|
||||||
|
printf '%s %s\n' 'notice' 'extracting source archive' >&3
|
||||||
|
if test -n "${buildHost}"; then
|
||||||
|
ssh "${buildHost}" tar xzf "${remoteBuildDir}/${sourceArchive##*/}" -C "${remoteBuildDir}" || exit $?
|
||||||
|
else
|
||||||
|
tar xzf "${sourceArchive}" -C "${localBuildDir}" || exit $?
|
||||||
|
ssh "${checkHost}" tar xzf "${remoteBuildDir}/${sourceArchive##*/}" -C "${remoteBuildDir}" || exit $?
|
||||||
|
fi
|
||||||
|
printf '%s %s\n' 'ok' 'source archive extracted' >&3
|
||||||
|
|
||||||
|
stepResult="ok"
|
||||||
|
if test -n "${buildHost}"; then
|
||||||
|
printf '%s %s\n' 'notice' 'configuring' >&3
|
||||||
|
ssh "${buildHost}" "cd \"${remoteBuildDir}\" && mkdir BUILD && cd BUILD && ../*/configure ${configureArguments}" || exit $?
|
||||||
|
else
|
||||||
|
printf '%s %s\n' 'notice' 'configuring locally' >&3
|
||||||
|
( cd "${localBuildDir}" && mkdir BUILD && cd BUILD && ../*/configure ${configureArguments} ) || exit $?
|
||||||
|
printf '%s %s\n' 'notice' "configuring on ${checkHost}" >&3
|
||||||
|
ssh "${checkHost}" "cd \"${remoteBuildDir}\" && mkdir BUILD && cd BUILD && ../*/configure" \
|
||||||
|
|| { stepResult="warning"; printf '%s %s\n' 'warning' "configuration failed on ${checkHost}" >&3; }
|
||||||
|
fi
|
||||||
|
printf '%s %s\n' "${stepResult}" 'configuration completed' >&3
|
||||||
|
|
||||||
|
printf '%s %s\n' 'notice' 'building' >&3
|
||||||
|
if test -n "${buildHost}"; then
|
||||||
|
ssh "${buildHost}" "cd \"${remoteBuildDir}/BUILD\" && make -j${concurrency}" || exit $?
|
||||||
|
else
|
||||||
|
make -j${concurrency} -C "${localBuildDir}/BUILD" || exit $?
|
||||||
|
fi
|
||||||
|
printf '%s %s\n' 'ok' 'build completed' >&3
|
||||||
|
|
||||||
|
if test -n "${buildHost}"; then
|
||||||
|
printf '%s %s\n' 'notice' 'testing' >&3
|
||||||
|
ssh "${buildHost}" "cd \"${remoteBuildDir}/BUILD\" && make -j${concurrency} check" || exit $?
|
||||||
|
printf '%s %s\n' 'ok' 'testing completed' >&3
|
||||||
|
elif test -n "${checkHost}"; then
|
||||||
|
printf '%s %s\n' 'notice' "transferring build to ${checkHost}" >&3
|
||||||
|
tar cvf "${localBuildDir}/build.tar" -C "${localBuildDir}" BUILD || exit $?
|
||||||
|
scp "${localBuildDir}/build.tar" "${checkHost}:${remoteBuildDir}/build.tar" || exit $?
|
||||||
|
ssh "${checkHost}" "tar xf \"${remoteBuildDir}/build.tar\" -C \"${remoteBuildDir}\"" || exit $?
|
||||||
|
printf '%s %s\n' 'ok' "transferred build to ${checkHost}" >&3
|
||||||
|
printf '%s %s\n' 'notice' "testing on ${checkHost}" >&3
|
||||||
|
ssh "${checkHost}" "cd \"${remoteBuildDir}/BUILD\" && make -j${concurrency} check-TESTS XCTEST=1" || exit $?
|
||||||
|
printf '%s %s\n' 'ok' 'testing completed' >&3
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Using directory $1 for metrics and output, run the remaining arguments as
|
||||||
|
# a command using "scw" to capture metrics and record logs.
|
||||||
|
#
|
||||||
|
recordCommand () {
|
||||||
|
targetDir="$1"
|
||||||
|
shift
|
||||||
|
mkdir -p "${targetDir}"
|
||||||
|
scw -c /dev/null \
|
||||||
|
-s UserConfigFile=/dev/null \
|
||||||
|
-s ItemsDir=/dev/null \
|
||||||
|
-s MetricsDir="${targetDir}" \
|
||||||
|
-s CheckLockFile="${targetDir}/.widelock" \
|
||||||
|
-s OutputMap= \
|
||||||
|
-s OutputMap="OES stamped ${targetDir}/output.log" \
|
||||||
|
-s OutputMap="OES raw ${targetDir}/raw-output.log" \
|
||||||
|
-s Command="$*" \
|
||||||
|
run item
|
||||||
|
}
|
||||||
|
|
||||||
|
if test "$1" = "--testRunner"; then
|
||||||
|
testRunner
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
labHosts="$(cat ~/.config/lab-hosts 2>/dev/null)"
|
||||||
|
|
||||||
|
workDir=$(mktemp -d) || exit 1
|
||||||
|
trap 'rm -rf "${workDir}"' EXIT
|
||||||
|
|
||||||
|
sourceArchive="$1"
|
||||||
|
shift
|
||||||
|
hostList="$*"
|
||||||
|
test -n "${hostList}" || hostList="${labHosts}"
|
||||||
|
|
||||||
|
test -n "${sourceArchive}" || { echo "Usage: ${0##*/} TARBALL [HOST...]"; exit 1; }
|
||||||
|
test -s "${sourceArchive}" || { echo "${sourceArchive}: not found"; exit 1; }
|
||||||
|
|
||||||
|
attrBold="$(tput bold 2>/dev/null)"
|
||||||
|
attrUnderline="$(tput smul 2>/dev/null)"
|
||||||
|
attrRed="$(tput setaf 1 2>/dev/null)"
|
||||||
|
attrGreen="$(tput setaf 2 2>/dev/null)"
|
||||||
|
attrYellow="$(tput setaf 3 2>/dev/null)"
|
||||||
|
attrBlue="$(tput setaf 4 2>/dev/null)"
|
||||||
|
attrMagenta="$(tput setaf 5 2>/dev/null)"
|
||||||
|
attrCyan="$(tput setaf 6 2>/dev/null)"
|
||||||
|
attrWhite="$(tput setaf 7 2>/dev/null)"
|
||||||
|
attrNone="$(tput sgr0 2>/dev/null)"
|
||||||
|
|
||||||
|
dateStamp="$(date +%Y%m%d-%H%M)"
|
||||||
|
resultsArchive="result-${dateStamp}.tar.gz"
|
||||||
|
|
||||||
|
startEpoch="$(date +%s)"
|
||||||
|
|
||||||
|
|
||||||
|
for hostSpec in ${hostList}; do
|
||||||
|
localTestDir="${workDir}/${hostSpec}"
|
||||||
|
remoteBuildDir="test-${dateStamp}.$(date +%s).$$"
|
||||||
|
buildHost="${hostSpec}"
|
||||||
|
checkHost=""
|
||||||
|
configureArguments=""
|
||||||
|
|
||||||
|
xcFor="${hostSpec%:*}"
|
||||||
|
xcRunOn="${hostSpec#*:}"
|
||||||
|
|
||||||
|
if ! test "${xcFor}" = "${xcRunOn}"; then
|
||||||
|
localTestDir="${workDir}/${xcFor}-${xcRunOn}"
|
||||||
|
buildHost=""
|
||||||
|
checkHost="${xcRunOn}"
|
||||||
|
configureArguments="--host ${xcFor}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir "${localTestDir}"
|
||||||
|
printf "%s\n" "${hostSpec}" > "${localTestDir}/hostSpec"
|
||||||
|
|
||||||
|
localBuildDir="${localTestDir}/XC"
|
||||||
|
|
||||||
|
(
|
||||||
|
flock -x 3
|
||||||
|
|
||||||
|
export sourceArchive buildHost checkHost remoteBuildDir localBuildDir configureArguments
|
||||||
|
recordCommand "${localTestDir}" "sh \"$0\" --testRunner" 3<&-
|
||||||
|
|
||||||
|
exec >>"${localTestDir}/output.log" 2>&1
|
||||||
|
|
||||||
|
printf '*** %s\n' 'retrieving build and test artefacts'
|
||||||
|
mkdir "${localTestDir}/tests"
|
||||||
|
if test -n "${buildHost}"; then
|
||||||
|
scp "${buildHost}:${remoteBuildDir}/BUILD/config.log" "${localTestDir}/"
|
||||||
|
scp "${buildHost}:${remoteBuildDir}/BUILD/test-suite.log" "${localTestDir}/"
|
||||||
|
scp "${buildHost}:${remoteBuildDir}/BUILD/tests/*" "${localTestDir}/tests/"
|
||||||
|
elif test -n "${checkHost}"; then
|
||||||
|
scp "${checkHost}:${remoteBuildDir}/BUILD/config.log" "${localTestDir}/"
|
||||||
|
scp "${checkHost}:${remoteBuildDir}/BUILD/test-suite.log" "${localTestDir}/"
|
||||||
|
scp "${checkHost}:${remoteBuildDir}/BUILD/tests/*" "${localTestDir}/tests/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '*** %s\n' 'removing build area'
|
||||||
|
rm -rf "${localBuildDir}"
|
||||||
|
if test -n "${buildHost}"; then
|
||||||
|
ssh "${buildHost}" rm -rf "${remoteBuildDir}"
|
||||||
|
elif test -n "${checkHost}"; then
|
||||||
|
ssh "${checkHost}" rm -rf "${remoteBuildDir}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '\n'
|
||||||
|
|
||||||
|
flock -u 3
|
||||||
|
) > "${localTestDir}/framework-output.log" 2>&1 3>>"${localTestDir}/active" &
|
||||||
|
done
|
||||||
|
|
||||||
|
sleep 0.1
|
||||||
|
|
||||||
|
allTestHostDirs="$(find "${workDir}" -mindepth 1 -maxdepth 1 -name "[0-9A-Za-z_]*" -type d -printf "%f\n" | sort)"
|
||||||
|
|
||||||
|
hostCount=0
|
||||||
|
for testHostDir in ${allTestHostDirs}; do hostCount=$((1+hostCount)); done
|
||||||
|
exitedCount=0
|
||||||
|
overallStatus=""
|
||||||
|
|
||||||
|
while test "${exitedCount}" -lt "${hostCount}"; do
|
||||||
|
width="$(tput cols 2>/dev/null)"
|
||||||
|
test -n "${width}" || width=80
|
||||||
|
|
||||||
|
currentEpoch="$(date +%s)"
|
||||||
|
elapsedSeconds=$((currentEpoch-startEpoch))
|
||||||
|
|
||||||
|
{
|
||||||
|
nameWidth=0
|
||||||
|
runningCount=0
|
||||||
|
failedCount=0
|
||||||
|
passedCount=0
|
||||||
|
exitedCount=0
|
||||||
|
overallStatus=""
|
||||||
|
for testHostDir in ${allTestHostDirs}; do
|
||||||
|
hostSpec="${testHostDir}"
|
||||||
|
{ read -r hostSpec < "${workDir}/${testHostDir}/hostSpec"; } 2>/dev/null
|
||||||
|
test "${#hostSpec}" -gt "${nameWidth}" && nameWidth="${#hostSpec}"
|
||||||
|
|
||||||
|
exec 3>>"${workDir}/${testHostDir}/active"
|
||||||
|
flock -x -n 3 && exitedCount=$((1+exitedCount))
|
||||||
|
exec 3<&-
|
||||||
|
|
||||||
|
test -e "${workDir}/${testHostDir}/ended" || runningCount=$((1+runningCount))
|
||||||
|
if test -e "${workDir}/${testHostDir}/failed"; then
|
||||||
|
overallStatus="FAIL"
|
||||||
|
failedCount=$((1+failedCount))
|
||||||
|
elif test -e "${workDir}/${testHostDir}/succeeded"; then
|
||||||
|
test -z "${overallStatus}" && overallStatus="PASS"
|
||||||
|
passedCount=$((1+passedCount))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
test -n "${overallStatus}" || overallStatus="----"
|
||||||
|
|
||||||
|
printf "%sT+%04d - %s%s\n\n" "${attrUnderline}" "${elapsedSeconds}" "$(date '+%Y-%m-%d %H:%M:%S')" "${attrNone}"
|
||||||
|
|
||||||
|
for testHostDir in ${allTestHostDirs}; do
|
||||||
|
hostSpec="${testHostDir}"
|
||||||
|
{ read -r hostSpec < "${workDir}/${testHostDir}/hostSpec"; } 2>/dev/null
|
||||||
|
|
||||||
|
lastStatusWord="-"
|
||||||
|
lastStatusMessage="-"
|
||||||
|
{ read -r lastStatusWord lastStatusMessage < "${workDir}/${testHostDir}/last-status"; } 2>/dev/null
|
||||||
|
|
||||||
|
lastLine="-"
|
||||||
|
test -s "${workDir}/${testHostDir}/output.log" && lastLine="$(tail -n 1 "${workDir}/${testHostDir}/output.log" 2>/dev/null | expand)"
|
||||||
|
|
||||||
|
testResult="----"
|
||||||
|
test -e "${workDir}/${testHostDir}/failed" && testResult="FAIL"
|
||||||
|
test -e "${workDir}/${testHostDir}/succeeded" && testResult="PASS"
|
||||||
|
|
||||||
|
remainingWidth=$((width-nameWidth-20))
|
||||||
|
statusWidth=$((remainingWidth*2/3))
|
||||||
|
test "${statusWidth}" -gt 40 && statusWidth=40
|
||||||
|
lastLineWidth=$((remainingWidth-statusWidth))
|
||||||
|
|
||||||
|
printf " %s%${nameWidth}s%s " "${attrBold}${attrYellow}" "${hostSpec}" "${attrNone}"
|
||||||
|
case "${testResult}" in
|
||||||
|
"PASS") printf "%s%s%s" "${attrBold}${attrGreen}" "PASS" "${attrNone}" ;;
|
||||||
|
"FAIL") printf "%s%s%s" "${attrBold}${attrRed}" "FAIL" "${attrNone}" ;;
|
||||||
|
*) printf "%s" "----"
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "${lastStatusWord}" in
|
||||||
|
"(begin)"|"begin") printf " (%s%s%s) " "${attrBold}${attrMagenta}" "begin" "${attrNone}" ;;
|
||||||
|
"(end)"|"end") printf " (%s%s%s) " "${attrBold}${attrMagenta}" "end" "${attrNone}" ;;
|
||||||
|
"(notice)"|"notice") printf " (%s%s%s) " "${attrBold}${attrCyan}" "notice" "${attrNone}" ;;
|
||||||
|
"(ok)"|"ok") printf " (%s%s%s) " "${attrBold}${attrGreen}" "ok" "${attrNone}" ;;
|
||||||
|
"(warning)"|"warning") printf " (%s%s%s)" "${attrBold}${attrYellow}" "warning" "${attrNone}" ;;
|
||||||
|
"(error)"|"error") printf " (%s%s%s) " "${attrBold}${attrRed}" "error" "${attrNone}" ;;
|
||||||
|
*) printf " %7s " ""; lastStatusMessage="${lastStatusWord} ${lastStatusMessage}" ;;
|
||||||
|
esac
|
||||||
|
printf " %s%-${statusWidth}.${statusWidth}s%s" "${attrWhite}" "${lastStatusMessage}" "${attrNone}"
|
||||||
|
printf " %s%-${lastLineWidth}.${lastLineWidth}s%s" "${attrBlue}" "${lastLine}" "${attrNone}"
|
||||||
|
printf "\n"
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\n%s%s%s " "${attrBold}" "Overall status:" "${attrNone}"
|
||||||
|
case "${overallStatus}" in
|
||||||
|
"PASS") printf "%s%s%s" "${attrBold}${attrGreen}" "PASS" "${attrNone}" ;;
|
||||||
|
"FAIL") printf "%s%s%s" "${attrBold}${attrRed}" "FAIL" "${attrNone}" ;;
|
||||||
|
*) printf "%s" "----"
|
||||||
|
esac
|
||||||
|
|
||||||
|
printf " %s%s%s " "${attrBold}" "Running,Passed,Failed:" "${attrNone}"
|
||||||
|
printf "%sR%d%s" "${attrBold}${attrMagenta}" "${runningCount}" "${attrNone}"
|
||||||
|
printf ",%sP%d%s" "${attrBold}${attrGreen}" "${passedCount}" "${attrNone}"
|
||||||
|
printf ",%sF%d%s" "${attrBold}${attrRed}" "${failedCount}" "${attrNone}"
|
||||||
|
printf " = %d" "${hostCount}"
|
||||||
|
printf "\n\n"
|
||||||
|
} > "${workDir}/latest-status.txt"
|
||||||
|
|
||||||
|
cat "${workDir}/latest-status.txt"
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
endEpoch="$(date +%s)"
|
||||||
|
elapsedSeconds=$((endEpoch-startEpoch))
|
||||||
|
|
||||||
|
printf '%s\n' 'Generating results archive'
|
||||||
|
tar czf "${resultsArchive}" -C "${workDir}" .
|
||||||
|
|
||||||
|
printf '%s: %d%s\n' 'Total time taken' "${elapsedSeconds}" "s"
|
||||||
|
printf '%s: %s\n' 'Results archive' "${resultsArchive}"
|
||||||
|
|
||||||
|
test "${overallStatus}" = "PASS" || exit 1
|
||||||
@@ -9,6 +9,19 @@ src/pv/cursor.c
|
|||||||
src/pv/display.c
|
src/pv/display.c
|
||||||
src/pv/elapsedtime.c
|
src/pv/elapsedtime.c
|
||||||
src/pv/file.c
|
src/pv/file.c
|
||||||
|
src/pv/format/averagerate.c
|
||||||
|
src/pv/format/barstyle.c
|
||||||
|
src/pv/format/bufferpercent.c
|
||||||
|
src/pv/format/bytes.c
|
||||||
|
src/pv/format/eta.c
|
||||||
|
src/pv/format/fineta.c
|
||||||
|
src/pv/format/lastwritten.c
|
||||||
|
src/pv/format/name.c
|
||||||
|
src/pv/format/previousline.c
|
||||||
|
src/pv/format/progressbar.c
|
||||||
|
src/pv/format/rate.c
|
||||||
|
src/pv/format/sgr.c
|
||||||
|
src/pv/format/timer.c
|
||||||
src/pv/loop.c
|
src/pv/loop.c
|
||||||
src/pv/number.c
|
src/pv/number.c
|
||||||
src/pv/proctitle.c
|
src/pv/proctitle.c
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||||
"POT-Creation-Date: 2024-12-02 17:56+0000\n"
|
"POT-Creation-Date: 2024-12-22 12:09+0000\n"
|
||||||
"PO-Revision-Date: 2024-10-13 20:43+0000\n"
|
"PO-Revision-Date: 2024-10-13 20:43+0000\n"
|
||||||
"Last-Translator: mmatous <mmatous@users.noreply.translate.codeberg.org>\n"
|
"Last-Translator: mmatous <mmatous@users.noreply.translate.codeberg.org>\n"
|
||||||
"Language-Team: Czech <https://translate.codeberg.org/projects/pv/pv/cs/>\n"
|
"Language-Team: Czech <https://translate.codeberg.org/projects/pv/pv/cs/>\n"
|
||||||
@@ -12,264 +12,276 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||||
"X-Generator: Weblate 5.7.2\n"
|
"X-Generator: Weblate 5.7.2\n"
|
||||||
|
|
||||||
#: src/main/help.c:284
|
#: src/main/help.c:236
|
||||||
msgid "show progress bar"
|
msgid "show progress bar"
|
||||||
msgstr "ukaž indikátor průběhu"
|
msgstr "ukaž indikátor průběhu"
|
||||||
|
|
||||||
#: src/main/help.c:287
|
#: src/main/help.c:239
|
||||||
msgid "show elapsed time"
|
msgid "show elapsed time"
|
||||||
msgstr "ukaž uběhlý čas"
|
msgstr "ukaž uběhlý čas"
|
||||||
|
|
||||||
#: src/main/help.c:290
|
#: src/main/help.c:242
|
||||||
msgid "show estimated time of arrival (completion)"
|
msgid "show estimated time of arrival (completion)"
|
||||||
msgstr "ukaž přibližný zbývající čas"
|
msgstr "ukaž přibližný zbývající čas"
|
||||||
|
|
||||||
#: src/main/help.c:293
|
#: src/main/help.c:245
|
||||||
msgid "show absolute estimated time of arrival (completion)"
|
msgid "show absolute estimated time of arrival (completion)"
|
||||||
msgstr "ukaž přibližný čas dokončení"
|
msgstr "ukaž přibližný čas dokončení"
|
||||||
|
|
||||||
#: src/main/help.c:296
|
#: src/main/help.c:248
|
||||||
msgid "show data transfer rate counter"
|
msgid "show data transfer rate counter"
|
||||||
msgstr "ukaž okamžitou rychlost přenosu dat"
|
msgstr "ukaž okamžitou rychlost přenosu dat"
|
||||||
|
|
||||||
#: src/main/help.c:299
|
#: src/main/help.c:251
|
||||||
msgid "show data transfer average rate counter"
|
msgid "show data transfer average rate counter"
|
||||||
msgstr "ukaž průměrnou rychlost přenosu dat"
|
msgstr "ukaž průměrnou rychlost přenosu dat"
|
||||||
|
|
||||||
#: src/main/help.c:302
|
#: src/main/help.c:254
|
||||||
msgid "show number of bytes transferred"
|
msgid "show number of bytes transferred"
|
||||||
msgstr "ukaž počet přenesených bajtů"
|
msgstr "ukaž počet přenesených bajtů"
|
||||||
|
|
||||||
#: src/main/help.c:305
|
#: src/main/help.c:257
|
||||||
msgid "show percentage of transfer buffer in use"
|
msgid "show percentage of transfer buffer in use"
|
||||||
msgstr "ukaž procento využité vyrovnávací paměti"
|
msgstr "ukaž procento využité vyrovnávací paměti"
|
||||||
|
|
||||||
#: src/main/help.c:307
|
#: src/main/help.c:259
|
||||||
msgid "NUM"
|
msgid "NUM"
|
||||||
msgstr "ČÍS"
|
msgstr "ČÍS"
|
||||||
|
|
||||||
#: src/main/help.c:308
|
#: src/main/help.c:260
|
||||||
msgid "show NUM bytes last written"
|
msgid "show NUM bytes last written"
|
||||||
msgstr "zobraz ČÍS posledních zapsaných bajtů"
|
msgstr "zobraz ČÍS posledních zapsaných bajtů"
|
||||||
|
|
||||||
#: src/main/help.c:310
|
#: src/main/help.c:262
|
||||||
msgid "FORMAT"
|
msgid "FORMAT"
|
||||||
msgstr "FORMÁT"
|
msgstr "FORMÁT"
|
||||||
|
|
||||||
#: src/main/help.c:311
|
#: src/main/help.c:263
|
||||||
msgid "set output format to FORMAT"
|
msgid "set output format to FORMAT"
|
||||||
msgstr "nastav formát výstupu na FORMÁT"
|
msgstr "nastav formát výstupu na FORMÁT"
|
||||||
|
|
||||||
#: src/main/help.c:314
|
#: src/main/help.c:266
|
||||||
msgid "output percentages, not visual information"
|
msgid "output percentages, not visual information"
|
||||||
msgstr "vypisuj procenta, ne vizuální informace"
|
msgstr "vypisuj procenta, ne vizuální informace"
|
||||||
|
|
||||||
#: src/main/help.c:317
|
#: src/main/help.c:269
|
||||||
msgid "do not output any transfer information at all"
|
msgid "do not output any transfer information at all"
|
||||||
msgstr "nevypisuj žádné informace o přenosu"
|
msgstr "nevypisuj žádné informace o přenosu"
|
||||||
|
|
||||||
#: src/main/help.c:321
|
#: src/main/help.c:273
|
||||||
msgid "show number of bits transferred"
|
msgid "show number of bits transferred"
|
||||||
msgstr "ukaž počet přenesených bitů"
|
msgstr "ukaž počet přenesených bitů"
|
||||||
|
|
||||||
#: src/main/help.c:324
|
#: src/main/help.c:276
|
||||||
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
||||||
msgstr "zacházej se suffixy jako s násobky 1000 namísto 1024"
|
msgstr "zacházej se suffixy jako s násobky 1000 namísto 1024"
|
||||||
|
|
||||||
#: src/main/help.c:327
|
#: src/main/help.c:279
|
||||||
msgid "display nothing until first byte transferred"
|
msgid "display nothing until first byte transferred"
|
||||||
msgstr "nic nevypisuj, dokud není přenesen první byte"
|
msgstr "nic nevypisuj, dokud není přenesen první byte"
|
||||||
|
|
||||||
#: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
|
#: src/main/help.c:281 src/main/help.c:296 src/main/help.c:299
|
||||||
msgid "SEC"
|
msgid "SEC"
|
||||||
msgstr "SEK"
|
msgstr "SEK"
|
||||||
|
|
||||||
#: src/main/help.c:330
|
#: src/main/help.c:282
|
||||||
msgid "display nothing until SEC seconds have passed"
|
msgid "display nothing until SEC seconds have passed"
|
||||||
msgstr "nic nevypisuj, dokud neuplyne SEK sekund"
|
msgstr "nic nevypisuj, dokud neuplyne SEK sekund"
|
||||||
|
|
||||||
#: src/main/help.c:332
|
#: src/main/help.c:284
|
||||||
msgid "SIZE"
|
msgid "SIZE"
|
||||||
msgstr "VEL"
|
msgstr "VEL"
|
||||||
|
|
||||||
#: src/main/help.c:333
|
#: src/main/help.c:285
|
||||||
msgid "set estimated data size to SIZE bytes"
|
msgid "set estimated data size to SIZE bytes"
|
||||||
msgstr "nastav očekávanou velikost dat na VEL bajtů"
|
msgstr "nastav očekávanou velikost dat na VEL bajtů"
|
||||||
|
|
||||||
#: src/main/help.c:336
|
#: src/main/help.c:288
|
||||||
msgid "if size unknown, show rate vs max rate"
|
msgid "if size unknown, show rate vs max rate"
|
||||||
msgstr "pokud je velikost neznámá, ukaž rychlost vs maximální rychlost"
|
msgstr "pokud je velikost neznámá, ukaž rychlost vs maximální rychlost"
|
||||||
|
|
||||||
#: src/main/help.c:339
|
#: src/main/help.c:291
|
||||||
msgid "count lines instead of bytes"
|
msgid "count lines instead of bytes"
|
||||||
msgstr "počítej řádky místo bajtů"
|
msgstr "počítej řádky místo bajtů"
|
||||||
|
|
||||||
#: src/main/help.c:342
|
#: src/main/help.c:294
|
||||||
msgid "lines are null-terminated"
|
msgid "lines are null-terminated"
|
||||||
msgstr "řádky jsou zakončené nulovým znakem"
|
msgstr "řádky jsou zakončené nulovým znakem"
|
||||||
|
|
||||||
#: src/main/help.c:345
|
#: src/main/help.c:297
|
||||||
msgid "update every SEC seconds"
|
msgid "update every SEC seconds"
|
||||||
msgstr "aktualizuj každých SEK sekund"
|
msgstr "aktualizuj každých SEK sekund"
|
||||||
|
|
||||||
#: src/main/help.c:348
|
#: src/main/help.c:300
|
||||||
msgid "compute average rate over past SEC seconds (default 30s)"
|
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)"
|
msgstr "počítej průměrnou rychlost za posledních SEK sekund (výchozí: 30)"
|
||||||
|
|
||||||
#: src/main/help.c:350
|
#: src/main/help.c:302
|
||||||
msgid "WIDTH"
|
msgid "WIDTH"
|
||||||
msgstr "ŠÍŘ"
|
msgstr "ŠÍŘ"
|
||||||
|
|
||||||
#: src/main/help.c:351
|
#: src/main/help.c:303
|
||||||
msgid "assume terminal is WIDTH characters wide"
|
msgid "assume terminal is WIDTH characters wide"
|
||||||
msgstr "předpokládej šířku terminálu ŠÍŘ znaků"
|
msgstr "předpokládej šířku terminálu ŠÍŘ znaků"
|
||||||
|
|
||||||
#: src/main/help.c:353
|
#: src/main/help.c:305
|
||||||
msgid "HEIGHT"
|
msgid "HEIGHT"
|
||||||
msgstr "VÝŠ"
|
msgstr "VÝŠ"
|
||||||
|
|
||||||
#: src/main/help.c:354
|
#: src/main/help.c:306
|
||||||
msgid "assume terminal is HEIGHT rows high"
|
msgid "assume terminal is HEIGHT rows high"
|
||||||
msgstr "předpokládej výšku terminálu VÝŠ znaků"
|
msgstr "předpokládej výšku terminálu VÝŠ znaků"
|
||||||
|
|
||||||
#: src/main/help.c:356
|
#: src/main/help.c:308
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr "JMÉNO"
|
msgstr "JMÉNO"
|
||||||
|
|
||||||
#: src/main/help.c:357
|
#: src/main/help.c:309
|
||||||
msgid "prefix visual information with NAME"
|
msgid "prefix visual information with NAME"
|
||||||
msgstr "přidej JMÉNO před vizuální informace"
|
msgstr "přidej JMÉNO před vizuální informace"
|
||||||
|
|
||||||
#: src/main/help.c:359
|
#: src/main/help.c:311
|
||||||
|
msgid "STYLE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:312
|
||||||
|
msgid "set default bar style to NAME"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:314
|
||||||
msgid "SPEC"
|
msgid "SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:360
|
#: src/main/help.c:315
|
||||||
msgid "also send progress to SPEC"
|
msgid "also send progress to SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:363
|
#: src/main/help.c:318
|
||||||
msgid "output transfer statistics at the end"
|
msgid "output transfer statistics at the end"
|
||||||
msgstr "po dokončení vypiš údaje o přenosu"
|
msgstr "po dokončení vypiš údaje o přenosu"
|
||||||
|
|
||||||
#: src/main/help.c:366
|
#: src/main/help.c:321
|
||||||
msgid "output even if standard error is not a terminal"
|
msgid "output even if standard error is not a terminal"
|
||||||
msgstr "vypisuj výstup i pokud standardní chybový výstup není terminál"
|
msgstr "vypisuj výstup i pokud standardní chybový výstup není terminál"
|
||||||
|
|
||||||
#: src/main/help.c:369
|
#: src/main/help.c:324
|
||||||
msgid "use cursor positioning escape sequences"
|
msgid "use cursor positioning escape sequences"
|
||||||
msgstr "pozicuj kurzor pomocí řídících znaků"
|
msgstr "pozicuj kurzor pomocí řídících znaků"
|
||||||
|
|
||||||
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
|
#: src/main/help.c:327 src/main/help.c:357 src/main/help.c:369
|
||||||
#: src/main/help.c:424
|
#: src/main/help.c:379
|
||||||
msgid "FILE"
|
msgid "FILE"
|
||||||
msgstr "SOUBOR"
|
msgstr "SOUBOR"
|
||||||
|
|
||||||
#: src/main/help.c:373
|
#: src/main/help.c:328
|
||||||
msgid "write output to FILE instead of stdout"
|
msgid "write output to FILE instead of stdout"
|
||||||
msgstr "zapiš výstup do SOUBORu namísto standardního výstupu"
|
msgstr "zapiš výstup do SOUBORu namísto standardního výstupu"
|
||||||
|
|
||||||
#: src/main/help.c:375
|
#: src/main/help.c:330
|
||||||
msgid "RATE"
|
msgid "RATE"
|
||||||
msgstr "RYCH"
|
msgstr "RYCH"
|
||||||
|
|
||||||
#: src/main/help.c:376
|
#: src/main/help.c:331
|
||||||
msgid "limit transfer to RATE bytes per second"
|
msgid "limit transfer to RATE bytes per second"
|
||||||
msgstr "omez přenosovou rychlost na RYCH bajtů za sekundu"
|
msgstr "omez přenosovou rychlost na RYCH bajtů za sekundu"
|
||||||
|
|
||||||
#: src/main/help.c:378 src/main/help.c:387
|
#: src/main/help.c:333 src/main/help.c:342
|
||||||
msgid "BYTES"
|
msgid "BYTES"
|
||||||
msgstr "BAJT"
|
msgstr "BAJT"
|
||||||
|
|
||||||
#: src/main/help.c:379
|
#: src/main/help.c:334
|
||||||
msgid "use a buffer size of BYTES"
|
msgid "use a buffer size of BYTES"
|
||||||
msgstr "použij vyrovnávací pamět BAJT bajtů"
|
msgstr "použij vyrovnávací pamět BAJT bajtů"
|
||||||
|
|
||||||
#: src/main/help.c:382
|
#: src/main/help.c:337
|
||||||
msgid "never use splice(), always use read/write"
|
msgid "never use splice(), always use read/write"
|
||||||
msgstr "nepoužívej splice(), vždy použij read/write"
|
msgstr "nepoužívej splice(), vždy použij read/write"
|
||||||
|
|
||||||
#: src/main/help.c:385
|
#: src/main/help.c:340
|
||||||
msgid "skip read errors in input"
|
msgid "skip read errors in input"
|
||||||
msgstr "ignoruj chyby při čtení vstupu"
|
msgstr "ignoruj chyby při čtení vstupu"
|
||||||
|
|
||||||
#: src/main/help.c:388
|
#: src/main/help.c:343
|
||||||
msgid "skip errors in BYTES blocks at a time"
|
msgid "skip errors in BYTES blocks at a time"
|
||||||
msgstr "přeskakuj chyby v blocích BAJTů naráz"
|
msgstr "přeskakuj chyby v blocích BAJTů naráz"
|
||||||
|
|
||||||
#: src/main/help.c:391
|
#: src/main/help.c:346
|
||||||
msgid "stop after --size bytes have been transferred"
|
msgid "stop after --size bytes have been transferred"
|
||||||
msgstr "zastav po přenosu --size bajtů"
|
msgstr "zastav po přenosu --size bajtů"
|
||||||
|
|
||||||
#: src/main/help.c:394
|
#: src/main/help.c:349
|
||||||
msgid "flush cache to disk after every write"
|
msgid "flush cache to disk after every write"
|
||||||
msgstr "po každém zápisu vyprázdni cache na disk"
|
msgstr "po každém zápisu vyprázdni cache na disk"
|
||||||
|
|
||||||
#: src/main/help.c:397
|
#: src/main/help.c:352
|
||||||
msgid "use direct I/O to bypass cache"
|
msgid "use direct I/O to bypass cache"
|
||||||
msgstr "použij přímý V/V k obejítí cache"
|
msgstr "použij přímý V/V k obejítí cache"
|
||||||
|
|
||||||
#: src/main/help.c:400
|
#: src/main/help.c:355
|
||||||
msgid "discard input instead of writing to output"
|
msgid "discard input instead of writing to output"
|
||||||
msgstr "zahoď vstup namísto zápisu na výstup"
|
msgstr "zahoď vstup namísto zápisu na výstup"
|
||||||
|
|
||||||
#: src/main/help.c:403
|
#: src/main/help.c:358
|
||||||
msgid "write all input to FILE before writing to output"
|
msgid "write all input to FILE before writing to output"
|
||||||
msgstr "zapiš veškerý vstup do SOUBORu před výpisem na výstup"
|
msgstr "zapiš veškerý vstup do SOUBORu před výpisem na výstup"
|
||||||
|
|
||||||
#: src/main/help.c:405
|
#: src/main/help.c:360
|
||||||
msgid "PID[:FD]"
|
msgid "PID[:FD]"
|
||||||
msgstr "PID[:DS]"
|
msgstr "PID[:DS]"
|
||||||
|
|
||||||
#: src/main/help.c:406
|
#: src/main/help.c:361
|
||||||
msgid "watch file FD opened by process PID"
|
msgid "watch file FD opened by process PID"
|
||||||
msgstr "sleduj soubor DS otevřený procesem PID"
|
msgstr "sleduj soubor DS otevřený procesem PID"
|
||||||
|
|
||||||
#: src/main/help.c:409
|
#: src/main/help.c:364
|
||||||
msgid "PID"
|
msgid "PID"
|
||||||
msgstr "PID"
|
msgstr "PID"
|
||||||
|
|
||||||
#: src/main/help.c:410
|
#: src/main/help.c:365
|
||||||
msgid "update settings of process PID"
|
msgid "update settings of process PID"
|
||||||
msgstr "aktualizuj nastavení procesu PID"
|
msgstr "aktualizuj nastavení procesu PID"
|
||||||
|
|
||||||
#: src/main/help.c:415
|
#: src/main/help.c:370
|
||||||
msgid "save process ID in FILE"
|
msgid "save process ID in FILE"
|
||||||
msgstr "ulož id procesu do SOUBORu"
|
msgstr "ulož id procesu do SOUBORu"
|
||||||
|
|
||||||
#: src/main/help.c:418
|
#: src/main/help.c:373
|
||||||
msgid "show this help and exit"
|
msgid "show this help and exit"
|
||||||
msgstr "ukaž pomoc a skonči"
|
msgstr "ukaž pomoc a skonči"
|
||||||
|
|
||||||
#: src/main/help.c:421
|
#: src/main/help.c:376
|
||||||
msgid "show version information and exit"
|
msgid "show version information and exit"
|
||||||
msgstr "ukaž informace o verzi a skonči"
|
msgstr "ukaž informace o verzi a skonči"
|
||||||
|
|
||||||
#: src/main/help.c:425
|
#: src/main/help.c:380
|
||||||
msgid "write debug logs to FILE"
|
msgid "write debug logs to FILE"
|
||||||
msgstr "zapiš ladící záznamy do SOUBORu"
|
msgstr "zapiš ladící záznamy do SOUBORu"
|
||||||
|
|
||||||
#: src/main/help.c:450
|
#: src/main/help.c:406
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Usage: %s [OPTION] [FILE]..."
|
msgid "Usage: %s [OPTION] [FILE]..."
|
||||||
msgstr "Použití: %s [VOLBY] [SOUBOR]..."
|
msgstr "Použití: %s [VOLBY] [SOUBOR]..."
|
||||||
|
|
||||||
#: src/main/help.c:461
|
#: src/main/help.c:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Spoj SOUBOR(y) nebo standardní vstup na standardního výstup, s monitoringem."
|
"Spoj SOUBOR(y) nebo standardní vstup na standardního výstup, s monitoringem."
|
||||||
|
|
||||||
#: src/main/help.c:598
|
#: src/main/help.c:555
|
||||||
|
msgid "Supported format sequences:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:569
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please report any bugs to: %s"
|
msgid "Please report any bugs to: %s"
|
||||||
msgstr "Prosím, hlašte veškeré chyby na: %s"
|
msgstr "Prosím, hlašte veškeré chyby na: %s"
|
||||||
|
|
||||||
#: src/main/main.c:230
|
#: src/main/main.c:232
|
||||||
msgid "(input)"
|
msgid "(input)"
|
||||||
msgstr "(vstup)"
|
msgstr "(vstup)"
|
||||||
|
|
||||||
#: src/main/main.c:319
|
#: src/main/main.c:328
|
||||||
msgid "state allocation failed"
|
msgid "state allocation failed"
|
||||||
msgstr "selhala alokace stavu"
|
msgstr "selhala alokace stavu"
|
||||||
|
|
||||||
@@ -297,41 +309,45 @@ msgstr "selhalo otevření blokového zařízení"
|
|||||||
msgid "failed to determine size of block device"
|
msgid "failed to determine size of block device"
|
||||||
msgstr "selhalo zjištění velikosti blokového zařízení"
|
msgstr "selhalo zjištění velikosti blokového zařízení"
|
||||||
|
|
||||||
#: src/main/options.c:344
|
#: src/main/options.c:345
|
||||||
msgid "option structure allocation failed"
|
msgid "option structure allocation failed"
|
||||||
msgstr "selhala alokace struktury pro volby"
|
msgstr "selhala alokace struktury pro volby"
|
||||||
|
|
||||||
#: src/main/options.c:363
|
#: src/main/options.c:364
|
||||||
msgid "option structure argv allocation failed"
|
msgid "option structure argv allocation failed"
|
||||||
msgstr "selhala alokace struktury pro argv"
|
msgstr "selhala alokace struktury pro argv"
|
||||||
|
|
||||||
#: src/main/options.c:425
|
#: src/main/options.c:417
|
||||||
|
msgid "numeric value not understood"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/options.c:435
|
||||||
msgid "integer argument expected"
|
msgid "integer argument expected"
|
||||||
msgstr "očekáván celočíselný argument"
|
msgstr "očekáván celočíselný argument"
|
||||||
|
|
||||||
#: src/main/options.c:436
|
#: src/main/options.c:447
|
||||||
msgid "numeric argument expected"
|
msgid "numeric argument expected"
|
||||||
msgstr "očekáván číselný argument"
|
msgstr "očekáván číselný argument"
|
||||||
|
|
||||||
#: src/main/options.c:447
|
#: src/main/options.c:458
|
||||||
msgid "process ID or pid:fd pair expected"
|
msgid "process ID or pid:fd pair expected"
|
||||||
msgstr "očekáváno ID procesu nebo dvojice PID:DS"
|
msgstr "očekáváno ID procesu nebo dvojice PID:DS"
|
||||||
|
|
||||||
#: src/main/options.c:454
|
#: src/main/options.c:465
|
||||||
msgid "invalid process ID"
|
msgid "invalid process ID"
|
||||||
msgstr "neplatné ID procesu"
|
msgstr "neplatné ID procesu"
|
||||||
|
|
||||||
#: src/main/options.c:679
|
#: src/main/options.c:698
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s --help' for more information."
|
msgid "Try `%s --help' for more information."
|
||||||
msgstr "Zkuste `%s --help' pro více informací."
|
msgstr "Zkuste `%s --help' pro více informací."
|
||||||
|
|
||||||
#: src/main/options.c:681
|
#: src/main/options.c:700
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s -h' for more information."
|
msgid "Try `%s -h' for more information."
|
||||||
msgstr "Zkuste `%s --h' pro více informací."
|
msgstr "Zkuste `%s --h' pro více informací."
|
||||||
|
|
||||||
#: src/main/options.c:712
|
#: src/main/options.c:731
|
||||||
msgid ""
|
msgid ""
|
||||||
"cannot use line mode or transfer modifier options when watching file "
|
"cannot use line mode or transfer modifier options when watching file "
|
||||||
"descriptors"
|
"descriptors"
|
||||||
@@ -339,27 +355,27 @@ msgstr ""
|
|||||||
"při sledování deskriptorů souborů nelze použít řádkový mód nebo volby pro "
|
"při sledování deskriptorů souborů nelze použít řádkový mód nebo volby pro "
|
||||||
"modifikaci přenosu"
|
"modifikaci přenosu"
|
||||||
|
|
||||||
#: src/main/options.c:721
|
#: src/main/options.c:740
|
||||||
msgid "cannot use cursor positioning when watching file descriptors"
|
msgid "cannot use cursor positioning when watching file descriptors"
|
||||||
msgstr "při sledování deskriptorů souborů nelze pozicování kurzoru použít"
|
msgstr "při sledování deskriptorů souborů nelze pozicování kurzoru použít"
|
||||||
|
|
||||||
#: src/main/options.c:730
|
#: src/main/options.c:749
|
||||||
msgid "cannot use remote control when watching file descriptors"
|
msgid "cannot use remote control when watching file descriptors"
|
||||||
msgstr "při sledování deskriptorů souborů nelze použít vzdálené ovládání"
|
msgstr "při sledování deskriptorů souborů nelze použít vzdálené ovládání"
|
||||||
|
|
||||||
#: src/main/options.c:739
|
#: src/main/options.c:758
|
||||||
msgid "cannot transfer files when watching file descriptors"
|
msgid "cannot transfer files when watching file descriptors"
|
||||||
msgstr "při sledování deskriptorů souborů nelze použít přenos souborů"
|
msgstr "při sledování deskriptorů souborů nelze použít přenos souborů"
|
||||||
|
|
||||||
#: src/main/options.c:754
|
#: src/main/options.c:773
|
||||||
msgid "not available on systems without /proc/self/fdinfo"
|
msgid "not available on systems without /proc/self/fdinfo"
|
||||||
msgstr "není dostupné na systémech bez /proc/self/fdinfo"
|
msgstr "není dostupné na systémech bez /proc/self/fdinfo"
|
||||||
|
|
||||||
#: src/main/remote.c:304
|
#: src/main/remote.c:309
|
||||||
msgid "message not received"
|
msgid "message not received"
|
||||||
msgstr "zpráva nepřijata"
|
msgstr "zpráva nepřijata"
|
||||||
|
|
||||||
#: src/main/remote.c:431
|
#: src/main/remote.c:440
|
||||||
msgid "SA_SIGINFO not supported on this system"
|
msgid "SA_SIGINFO not supported on this system"
|
||||||
msgstr "SA_SIGINFO není na tomto systému podporováno"
|
msgstr "SA_SIGINFO není na tomto systému podporováno"
|
||||||
|
|
||||||
@@ -395,48 +411,18 @@ msgstr "selhal pokus o uzamčení"
|
|||||||
msgid "failed to open terminal"
|
msgid "failed to open terminal"
|
||||||
msgstr "selhalo otevření terminálu"
|
msgstr "selhalo otevření terminálu"
|
||||||
|
|
||||||
#: src/pv/display.c:233
|
#: src/pv/display.c:249
|
||||||
msgid "yzafpnum kMGTPEZY"
|
msgid "yzafpnum kMGTPEZY"
|
||||||
msgstr "yzafpnum kMGTPEZY"
|
msgstr "yzafpnum kMGTPEZY"
|
||||||
|
|
||||||
#: src/pv/display.c:251
|
#: src/pv/display.c:267
|
||||||
msgid "yzafpnum KMGTPEZY"
|
msgid "yzafpnum KMGTPEZY"
|
||||||
msgstr "yzafpnum KMGTPEZY"
|
msgstr "yzafpnum KMGTPEZY"
|
||||||
|
|
||||||
#: src/pv/display.c:681 src/pv/transfer.c:1011
|
#: src/pv/display.c:1067 src/pv/transfer.c:1056
|
||||||
msgid "buffer allocation failed"
|
msgid "buffer allocation failed"
|
||||||
msgstr "selhala alokace vyrovnávací paměti"
|
msgstr "selhala alokace vyrovnávací paměti"
|
||||||
|
|
||||||
#: src/pv/display.c:810
|
|
||||||
msgid "b"
|
|
||||||
msgstr "b"
|
|
||||||
|
|
||||||
#: src/pv/display.c:813 src/pv/transfer.c:602
|
|
||||||
msgid "B"
|
|
||||||
msgstr "B"
|
|
||||||
|
|
||||||
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
|
|
||||||
#: src/pv/loop.c:549
|
|
||||||
msgid "b/s"
|
|
||||||
msgstr "b/s"
|
|
||||||
|
|
||||||
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
|
|
||||||
msgid "/s"
|
|
||||||
msgstr "/s"
|
|
||||||
|
|
||||||
#: 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:904 src/pv/display.c:908
|
|
||||||
msgid "ETA"
|
|
||||||
msgstr "ETA"
|
|
||||||
|
|
||||||
#: src/pv/display.c:974
|
|
||||||
msgid "FIN"
|
|
||||||
msgstr "FIN"
|
|
||||||
|
|
||||||
#: src/pv/file.c:149
|
#: src/pv/file.c:149
|
||||||
msgid "failed to seek to start of output"
|
msgid "failed to seek to start of output"
|
||||||
msgstr "selhalo posunutí za začátek výstupu"
|
msgstr "selhalo posunutí za začátek výstupu"
|
||||||
@@ -465,19 +451,50 @@ msgstr "(žádný)"
|
|||||||
msgid "(stdin)"
|
msgid "(stdin)"
|
||||||
msgstr "(stdin)"
|
msgstr "(stdin)"
|
||||||
|
|
||||||
#: src/pv/loop.c:548
|
#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:93
|
||||||
|
#: src/pv/format/rate.c:32 src/pv/loop.c:551
|
||||||
|
msgid "b/s"
|
||||||
|
msgstr "b/s"
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36
|
||||||
|
msgid "/s"
|
||||||
|
msgstr "/s"
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36 src/pv/loop.c:551
|
||||||
|
msgid "B/s"
|
||||||
|
msgstr "B/s"
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:31
|
||||||
|
msgid "b"
|
||||||
|
msgstr "b"
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:35 src/pv/transfer.c:594
|
||||||
|
msgid "B"
|
||||||
|
msgstr "B"
|
||||||
|
|
||||||
|
#: src/pv/format/eta.c:53 src/pv/format/eta.c:57
|
||||||
|
msgid "ETA"
|
||||||
|
msgstr "ETA"
|
||||||
|
|
||||||
|
#: src/pv/format/fineta.c:81
|
||||||
|
msgid "FIN"
|
||||||
|
msgstr "FIN"
|
||||||
|
|
||||||
|
#: src/pv/loop.c:550
|
||||||
msgid "rate min/avg/max/mdev"
|
msgid "rate min/avg/max/mdev"
|
||||||
msgstr "rychlost min/avg/max/std"
|
msgstr "rychlost min/avg/max/std"
|
||||||
|
|
||||||
#: src/pv/loop.c:560
|
#: src/pv/loop.c:562
|
||||||
msgid "rate not measured"
|
msgid "rate not measured"
|
||||||
msgstr "rychlost neměřena"
|
msgstr "rychlost neměřena"
|
||||||
|
|
||||||
#: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
|
#: src/pv/loop.c:772 src/pv/loop.c:823 src/pv/loop.c:876 src/pv/watchpid.c:99
|
||||||
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
||||||
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
||||||
#: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
|
#: 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
|
#: src/pv/watchpid.c:385 src/pv/watchpid.c:406
|
||||||
msgid "pid"
|
msgid "pid"
|
||||||
msgstr "pid"
|
msgstr "pid"
|
||||||
|
|
||||||
@@ -485,51 +502,51 @@ msgstr "pid"
|
|||||||
msgid "history structure allocation failed"
|
msgid "history structure allocation failed"
|
||||||
msgstr "selhala alokace struktury historie"
|
msgstr "selhala alokace struktury historie"
|
||||||
|
|
||||||
#: src/pv/state.c:572 src/pv/state.c:583
|
#: src/pv/state.c:593 src/pv/state.c:604
|
||||||
msgid "file list allocation failed"
|
msgid "file list allocation failed"
|
||||||
msgstr "selhala alokace seznamu souborů"
|
msgstr "selhala alokace seznamu souborů"
|
||||||
|
|
||||||
#: src/pv/transfer.c:464
|
#: src/pv/transfer.c:463
|
||||||
msgid "read failed"
|
msgid "read failed"
|
||||||
msgstr "čtení selhalo"
|
msgstr "čtení selhalo"
|
||||||
|
|
||||||
#: src/pv/transfer.c:487
|
#: src/pv/transfer.c:479
|
||||||
msgid "warning: read errors detected"
|
msgid "warning: read errors detected"
|
||||||
msgstr "varování: detekovány chyby při čtení"
|
msgstr "varování: detekovány chyby při čtení"
|
||||||
|
|
||||||
#: src/pv/transfer.c:503
|
#: src/pv/transfer.c:495
|
||||||
msgid "file is not seekable"
|
msgid "file is not seekable"
|
||||||
msgstr "souborem nelze procházet"
|
msgstr "souborem nelze procházet"
|
||||||
|
|
||||||
#: src/pv/transfer.c:581
|
#: src/pv/transfer.c:573
|
||||||
msgid "failed to seek past error"
|
msgid "failed to seek past error"
|
||||||
msgstr "selhal skok za chybu"
|
msgstr "selhal skok za chybu"
|
||||||
|
|
||||||
#: src/pv/transfer.c:601
|
#: src/pv/transfer.c:593
|
||||||
msgid "skipped past read error"
|
msgid "skipped past read error"
|
||||||
msgstr "chyba přeskočena"
|
msgstr "chyba přeskočena"
|
||||||
|
|
||||||
#: src/pv/transfer.c:642
|
#: src/pv/transfer.c:634
|
||||||
msgid "no transfer buffer allocated"
|
msgid "no transfer buffer allocated"
|
||||||
msgstr "vyrovnávací paměť není alokována"
|
msgstr "vyrovnávací paměť není alokována"
|
||||||
|
|
||||||
#: src/pv/transfer.c:684
|
#: src/pv/transfer.c:676
|
||||||
msgid "failed to set interval timer"
|
msgid "failed to set interval timer"
|
||||||
msgstr "selhalo nastavení intervalového časovače"
|
msgstr "selhalo nastavení intervalového časovače"
|
||||||
|
|
||||||
#: src/pv/transfer.c:710
|
#: src/pv/transfer.c:702
|
||||||
msgid "failed to clear interval timer"
|
msgid "failed to clear interval timer"
|
||||||
msgstr "selhalo vynulování intervalového časovače"
|
msgstr "selhalo vynulování intervalového časovače"
|
||||||
|
|
||||||
#: src/pv/transfer.c:740
|
#: src/pv/transfer.c:744
|
||||||
msgid "line position buffer allocation failed"
|
msgid "line position buffer allocation failed"
|
||||||
msgstr "selhala alokace vyrovnávací paměti pro pozici v řádcích"
|
msgstr "selhala alokace vyrovnávací paměti pro pozici v řádcích"
|
||||||
|
|
||||||
#: src/pv/transfer.c:872
|
#: src/pv/transfer.c:917
|
||||||
msgid "write failed"
|
msgid "write failed"
|
||||||
msgstr "zápis selhal"
|
msgstr "zápis selhal"
|
||||||
|
|
||||||
#: src/pv/transfer.c:1109
|
#: src/pv/transfer.c:1154
|
||||||
msgid "select call failed"
|
msgid "select call failed"
|
||||||
msgstr "selhalo volání select"
|
msgstr "selhalo volání select"
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||||
"POT-Creation-Date: 2024-12-02 17:56+0000\n"
|
"POT-Creation-Date: 2024-12-22 12:09+0000\n"
|
||||||
"PO-Revision-Date: 2024-10-13 20:43+0000\n"
|
"PO-Revision-Date: 2024-10-13 20:43+0000\n"
|
||||||
"Last-Translator: fnetX <otto@codeberg.org>\n"
|
"Last-Translator: fnetX <otto@codeberg.org>\n"
|
||||||
"Language-Team: German <https://translate.codeberg.org/projects/pv/pv/de/>\n"
|
"Language-Team: German <https://translate.codeberg.org/projects/pv/pv/de/>\n"
|
||||||
@@ -26,268 +26,280 @@ msgstr ""
|
|||||||
"nls/intl/textdomain.c src/nls/intl-cat/cat-compat.c src/nls/intl-gett/intl-"
|
"nls/intl/textdomain.c src/nls/intl-cat/cat-compat.c src/nls/intl-gett/intl-"
|
||||||
"compat.c\n"
|
"compat.c\n"
|
||||||
|
|
||||||
#: src/main/help.c:284
|
#: src/main/help.c:236
|
||||||
msgid "show progress bar"
|
msgid "show progress bar"
|
||||||
msgstr "Fortschritts-Anzeige"
|
msgstr "Fortschritts-Anzeige"
|
||||||
|
|
||||||
#: src/main/help.c:287
|
#: src/main/help.c:239
|
||||||
msgid "show elapsed time"
|
msgid "show elapsed time"
|
||||||
msgstr "zeige die verstrichene Zeit an"
|
msgstr "zeige die verstrichene Zeit an"
|
||||||
|
|
||||||
#: src/main/help.c:290
|
#: src/main/help.c:242
|
||||||
msgid "show estimated time of arrival (completion)"
|
msgid "show estimated time of arrival (completion)"
|
||||||
msgstr "zeige die erwartete Zeit bis zum Ende an"
|
msgstr "zeige die erwartete Zeit bis zum Ende an"
|
||||||
|
|
||||||
#: src/main/help.c:293
|
#: src/main/help.c:245
|
||||||
msgid "show absolute estimated time of arrival (completion)"
|
msgid "show absolute estimated time of arrival (completion)"
|
||||||
msgstr "zeige die absolute geschätzte Zeit bis zur Fertigstellung"
|
msgstr "zeige die absolute geschätzte Zeit bis zur Fertigstellung"
|
||||||
|
|
||||||
#: src/main/help.c:296
|
#: src/main/help.c:248
|
||||||
msgid "show data transfer rate counter"
|
msgid "show data transfer rate counter"
|
||||||
msgstr "zeige die Datentransferrate an"
|
msgstr "zeige die Datentransferrate an"
|
||||||
|
|
||||||
#: src/main/help.c:299
|
#: src/main/help.c:251
|
||||||
msgid "show data transfer average rate counter"
|
msgid "show data transfer average rate counter"
|
||||||
msgstr "zeige die durchschnittliche Übertragungsrate"
|
msgstr "zeige die durchschnittliche Übertragungsrate"
|
||||||
|
|
||||||
#: src/main/help.c:302
|
#: src/main/help.c:254
|
||||||
msgid "show number of bytes transferred"
|
msgid "show number of bytes transferred"
|
||||||
msgstr "zeige die Anzahl der übertragenen Bytes"
|
msgstr "zeige die Anzahl der übertragenen Bytes"
|
||||||
|
|
||||||
#: src/main/help.c:305
|
#: src/main/help.c:257
|
||||||
msgid "show percentage of transfer buffer in use"
|
msgid "show percentage of transfer buffer in use"
|
||||||
msgstr "zeige, wie viel Prozent des Übertragungsbuffers in Benutzung sind"
|
msgstr "zeige, wie viel Prozent des Übertragungsbuffers in Benutzung sind"
|
||||||
|
|
||||||
#: src/main/help.c:307
|
#: src/main/help.c:259
|
||||||
msgid "NUM"
|
msgid "NUM"
|
||||||
msgstr "NUM"
|
msgstr "NUM"
|
||||||
|
|
||||||
#: src/main/help.c:308
|
#: src/main/help.c:260
|
||||||
msgid "show NUM bytes last written"
|
msgid "show NUM bytes last written"
|
||||||
msgstr "NUM zeige die zuletzt geschriebenen NUM Bytes"
|
msgstr "NUM zeige die zuletzt geschriebenen NUM Bytes"
|
||||||
|
|
||||||
#: src/main/help.c:310
|
#: src/main/help.c:262
|
||||||
msgid "FORMAT"
|
msgid "FORMAT"
|
||||||
msgstr "FORMAT"
|
msgstr "FORMAT"
|
||||||
|
|
||||||
#: src/main/help.c:311
|
#: src/main/help.c:263
|
||||||
msgid "set output format to FORMAT"
|
msgid "set output format to FORMAT"
|
||||||
msgstr "setze das Ausgabeformat auf FORMAT"
|
msgstr "setze das Ausgabeformat auf FORMAT"
|
||||||
|
|
||||||
#: src/main/help.c:314
|
#: src/main/help.c:266
|
||||||
msgid "output percentages, not visual information"
|
msgid "output percentages, not visual information"
|
||||||
msgstr "Ausgabe von Prozent-Angaben statt visueller Darstellung"
|
msgstr "Ausgabe von Prozent-Angaben statt visueller Darstellung"
|
||||||
|
|
||||||
#: src/main/help.c:317
|
#: src/main/help.c:269
|
||||||
msgid "do not output any transfer information at all"
|
msgid "do not output any transfer information at all"
|
||||||
msgstr "sämtliche Transferinformationen unterdrücken"
|
msgstr "sämtliche Transferinformationen unterdrücken"
|
||||||
|
|
||||||
#: src/main/help.c:321
|
#: src/main/help.c:273
|
||||||
msgid "show number of bits transferred"
|
msgid "show number of bits transferred"
|
||||||
msgstr "zeige die Anzahl der übertragenen Bits"
|
msgstr "zeige die Anzahl der übertragenen Bits"
|
||||||
|
|
||||||
#: src/main/help.c:324
|
#: src/main/help.c:276
|
||||||
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
||||||
msgstr "behandle Endungen als Vielfache von 1000 statt von 1024"
|
msgstr "behandle Endungen als Vielfache von 1000 statt von 1024"
|
||||||
|
|
||||||
#: src/main/help.c:327
|
#: src/main/help.c:279
|
||||||
msgid "display nothing until first byte transferred"
|
msgid "display nothing until first byte transferred"
|
||||||
msgstr "keine Ausgabe bevor das erste Byte übertragen wurde"
|
msgstr "keine Ausgabe bevor das erste Byte übertragen wurde"
|
||||||
|
|
||||||
#: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
|
#: src/main/help.c:281 src/main/help.c:296 src/main/help.c:299
|
||||||
msgid "SEC"
|
msgid "SEC"
|
||||||
msgstr "SEK"
|
msgstr "SEK"
|
||||||
|
|
||||||
#: src/main/help.c:330
|
#: src/main/help.c:282
|
||||||
msgid "display nothing until SEC seconds have passed"
|
msgid "display nothing until SEC seconds have passed"
|
||||||
msgstr "nichts anzeigen ehe SEK Sekunden vergangen sind"
|
msgstr "nichts anzeigen ehe SEK Sekunden vergangen sind"
|
||||||
|
|
||||||
#: src/main/help.c:332
|
#: src/main/help.c:284
|
||||||
msgid "SIZE"
|
msgid "SIZE"
|
||||||
msgstr "GRÖẞE"
|
msgstr "GRÖẞE"
|
||||||
|
|
||||||
#: src/main/help.c:333
|
#: src/main/help.c:285
|
||||||
msgid "set estimated data size to SIZE bytes"
|
msgid "set estimated data size to SIZE bytes"
|
||||||
msgstr "setze erwartete Datenlänge auf SIZE Byte"
|
msgstr "setze erwartete Datenlänge auf SIZE Byte"
|
||||||
|
|
||||||
#: src/main/help.c:336
|
#: src/main/help.c:288
|
||||||
msgid "if size unknown, show rate vs max rate"
|
msgid "if size unknown, show rate vs max rate"
|
||||||
msgstr "zeige Rate vs maximale Rate, falls die größe unbekannt ist"
|
msgstr "zeige Rate vs maximale Rate, falls die größe unbekannt ist"
|
||||||
|
|
||||||
#: src/main/help.c:339
|
#: src/main/help.c:291
|
||||||
msgid "count lines instead of bytes"
|
msgid "count lines instead of bytes"
|
||||||
msgstr "zähle Zeilen anstelle von Bytes"
|
msgstr "zähle Zeilen anstelle von Bytes"
|
||||||
|
|
||||||
#: src/main/help.c:342
|
#: src/main/help.c:294
|
||||||
msgid "lines are null-terminated"
|
msgid "lines are null-terminated"
|
||||||
msgstr "Zeilen sind nullterminiert"
|
msgstr "Zeilen sind nullterminiert"
|
||||||
|
|
||||||
#: src/main/help.c:345
|
#: src/main/help.c:297
|
||||||
msgid "update every SEC seconds"
|
msgid "update every SEC seconds"
|
||||||
msgstr "aktualisiere Ausgabe nach SEK Sekunden Intervall"
|
msgstr "aktualisiere Ausgabe nach SEK Sekunden Intervall"
|
||||||
|
|
||||||
#: src/main/help.c:348
|
#: src/main/help.c:300
|
||||||
msgid "compute average rate over past SEC seconds (default 30s)"
|
msgid "compute average rate over past SEC seconds (default 30s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"berechne die durchschnittliche Übertragungsrate über die letzten SEK "
|
"berechne die durchschnittliche Übertragungsrate über die letzten SEK "
|
||||||
"Sekunden (Standard 30s)"
|
"Sekunden (Standard 30s)"
|
||||||
|
|
||||||
#: src/main/help.c:350
|
#: src/main/help.c:302
|
||||||
msgid "WIDTH"
|
msgid "WIDTH"
|
||||||
msgstr "BREITE"
|
msgstr "BREITE"
|
||||||
|
|
||||||
#: src/main/help.c:351
|
#: src/main/help.c:303
|
||||||
msgid "assume terminal is WIDTH characters wide"
|
msgid "assume terminal is WIDTH characters wide"
|
||||||
msgstr "setze Terminal-Breite auf BREITE Zeichen"
|
msgstr "setze Terminal-Breite auf BREITE Zeichen"
|
||||||
|
|
||||||
#: src/main/help.c:353
|
#: src/main/help.c:305
|
||||||
msgid "HEIGHT"
|
msgid "HEIGHT"
|
||||||
msgstr "HÖHE"
|
msgstr "HÖHE"
|
||||||
|
|
||||||
#: src/main/help.c:354
|
#: src/main/help.c:306
|
||||||
msgid "assume terminal is HEIGHT rows high"
|
msgid "assume terminal is HEIGHT rows high"
|
||||||
msgstr "setze Terminal-Höhe auf HÖHE Zeichen"
|
msgstr "setze Terminal-Höhe auf HÖHE Zeichen"
|
||||||
|
|
||||||
#: src/main/help.c:356
|
#: src/main/help.c:308
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr "NAME"
|
msgstr "NAME"
|
||||||
|
|
||||||
#: src/main/help.c:357
|
#: src/main/help.c:309
|
||||||
msgid "prefix visual information with NAME"
|
msgid "prefix visual information with NAME"
|
||||||
msgstr "setze den NAMEn für visuelle Darstellung"
|
msgstr "setze den NAMEn für visuelle Darstellung"
|
||||||
|
|
||||||
#: src/main/help.c:359
|
#: src/main/help.c:311
|
||||||
|
msgid "STYLE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:312
|
||||||
|
msgid "set default bar style to NAME"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:314
|
||||||
msgid "SPEC"
|
msgid "SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:360
|
#: src/main/help.c:315
|
||||||
msgid "also send progress to SPEC"
|
msgid "also send progress to SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:363
|
#: src/main/help.c:318
|
||||||
msgid "output transfer statistics at the end"
|
msgid "output transfer statistics at the end"
|
||||||
msgstr "Übertragungsstatistiken am Ende ausgeben"
|
msgstr "Übertragungsstatistiken am Ende ausgeben"
|
||||||
|
|
||||||
#: src/main/help.c:366
|
#: src/main/help.c:321
|
||||||
msgid "output even if standard error is not a terminal"
|
msgid "output even if standard error is not a terminal"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ausgabe auch dann erzwingen, wenn der Fehlerausgabe-Kanal kein Terminal ist"
|
"Ausgabe auch dann erzwingen, wenn der Fehlerausgabe-Kanal kein Terminal ist"
|
||||||
|
|
||||||
#: src/main/help.c:369
|
#: src/main/help.c:324
|
||||||
msgid "use cursor positioning escape sequences"
|
msgid "use cursor positioning escape sequences"
|
||||||
msgstr "benutze Escape-Sequenzen zur Cursor-Positionierung"
|
msgstr "benutze Escape-Sequenzen zur Cursor-Positionierung"
|
||||||
|
|
||||||
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
|
#: src/main/help.c:327 src/main/help.c:357 src/main/help.c:369
|
||||||
#: src/main/help.c:424
|
#: src/main/help.c:379
|
||||||
msgid "FILE"
|
msgid "FILE"
|
||||||
msgstr "DATEI"
|
msgstr "DATEI"
|
||||||
|
|
||||||
#: src/main/help.c:373
|
#: src/main/help.c:328
|
||||||
msgid "write output to FILE instead of stdout"
|
msgid "write output to FILE instead of stdout"
|
||||||
msgstr "schreibe die Ausgabe in DATEI statt in die Standardausgabe"
|
msgstr "schreibe die Ausgabe in DATEI statt in die Standardausgabe"
|
||||||
|
|
||||||
#: src/main/help.c:375
|
#: src/main/help.c:330
|
||||||
msgid "RATE"
|
msgid "RATE"
|
||||||
msgstr "RATE"
|
msgstr "RATE"
|
||||||
|
|
||||||
#: src/main/help.c:376
|
#: src/main/help.c:331
|
||||||
msgid "limit transfer to RATE bytes per second"
|
msgid "limit transfer to RATE bytes per second"
|
||||||
msgstr "beschränke die Transferrate auf RATE Byte pro Sekunde"
|
msgstr "beschränke die Transferrate auf RATE Byte pro Sekunde"
|
||||||
|
|
||||||
#: src/main/help.c:378 src/main/help.c:387
|
#: src/main/help.c:333 src/main/help.c:342
|
||||||
msgid "BYTES"
|
msgid "BYTES"
|
||||||
msgstr "BYTES"
|
msgstr "BYTES"
|
||||||
|
|
||||||
#: src/main/help.c:379
|
#: src/main/help.c:334
|
||||||
msgid "use a buffer size of BYTES"
|
msgid "use a buffer size of BYTES"
|
||||||
msgstr "benutze einen Puffer in der Größe von BYTES"
|
msgstr "benutze einen Puffer in der Größe von BYTES"
|
||||||
|
|
||||||
#: src/main/help.c:382
|
#: src/main/help.c:337
|
||||||
msgid "never use splice(), always use read/write"
|
msgid "never use splice(), always use read/write"
|
||||||
msgstr "anstelle von splice() immer read/write benutzen"
|
msgstr "anstelle von splice() immer read/write benutzen"
|
||||||
|
|
||||||
#: src/main/help.c:385
|
#: src/main/help.c:340
|
||||||
msgid "skip read errors in input"
|
msgid "skip read errors in input"
|
||||||
msgstr "Lesefehler in der Eingabe nicht beachten"
|
msgstr "Lesefehler in der Eingabe nicht beachten"
|
||||||
|
|
||||||
#: src/main/help.c:388
|
#: src/main/help.c:343
|
||||||
msgid "skip errors in BYTES blocks at a time"
|
msgid "skip errors in BYTES blocks at a time"
|
||||||
msgstr "bei Fehlern BYTES am Stück überspringen"
|
msgstr "bei Fehlern BYTES am Stück überspringen"
|
||||||
|
|
||||||
#: src/main/help.c:391
|
#: src/main/help.c:346
|
||||||
msgid "stop after --size bytes have been transferred"
|
msgid "stop after --size bytes have been transferred"
|
||||||
msgstr "anhalten, nachdem --size Bytes übertragen wurden"
|
msgstr "anhalten, nachdem --size Bytes übertragen wurden"
|
||||||
|
|
||||||
#: src/main/help.c:394
|
#: src/main/help.c:349
|
||||||
msgid "flush cache to disk after every write"
|
msgid "flush cache to disk after every write"
|
||||||
msgstr "schreibe den Cache nach jedem Schreibvorgang auf die Festplatte"
|
msgstr "schreibe den Cache nach jedem Schreibvorgang auf die Festplatte"
|
||||||
|
|
||||||
#: src/main/help.c:397
|
#: src/main/help.c:352
|
||||||
msgid "use direct I/O to bypass cache"
|
msgid "use direct I/O to bypass cache"
|
||||||
msgstr "verwende direkte E/A, um den Cache zu umgehen"
|
msgstr "verwende direkte E/A, um den Cache zu umgehen"
|
||||||
|
|
||||||
#: src/main/help.c:400
|
#: src/main/help.c:355
|
||||||
msgid "discard input instead of writing to output"
|
msgid "discard input instead of writing to output"
|
||||||
msgstr "verwirf die Eingabe anstatt in die Ausgabe zu schreiben"
|
msgstr "verwirf die Eingabe anstatt in die Ausgabe zu schreiben"
|
||||||
|
|
||||||
#: src/main/help.c:403
|
#: src/main/help.c:358
|
||||||
msgid "write all input to FILE before writing to output"
|
msgid "write all input to FILE before writing to output"
|
||||||
msgstr "Ausgabe nach FILE schrieben bevor sie ausgegeben wird"
|
msgstr "Ausgabe nach FILE schrieben bevor sie ausgegeben wird"
|
||||||
|
|
||||||
#: src/main/help.c:405
|
#: src/main/help.c:360
|
||||||
msgid "PID[:FD]"
|
msgid "PID[:FD]"
|
||||||
msgstr "PID[:FD]"
|
msgstr "PID[:FD]"
|
||||||
|
|
||||||
#: src/main/help.c:406
|
#: src/main/help.c:361
|
||||||
msgid "watch file FD opened by process PID"
|
msgid "watch file FD opened by process PID"
|
||||||
msgstr "die vom Prozess PID geöffnete Datei FD beobachten"
|
msgstr "die vom Prozess PID geöffnete Datei FD beobachten"
|
||||||
|
|
||||||
#: src/main/help.c:409
|
#: src/main/help.c:364
|
||||||
msgid "PID"
|
msgid "PID"
|
||||||
msgstr "PID"
|
msgstr "PID"
|
||||||
|
|
||||||
#: src/main/help.c:410
|
#: src/main/help.c:365
|
||||||
msgid "update settings of process PID"
|
msgid "update settings of process PID"
|
||||||
msgstr "Einstellungen der Prozess-PID updaten"
|
msgstr "Einstellungen der Prozess-PID updaten"
|
||||||
|
|
||||||
#: src/main/help.c:415
|
#: src/main/help.c:370
|
||||||
msgid "save process ID in FILE"
|
msgid "save process ID in FILE"
|
||||||
msgstr "Prozess-ID in DATEI speichern"
|
msgstr "Prozess-ID in DATEI speichern"
|
||||||
|
|
||||||
#: src/main/help.c:418
|
#: src/main/help.c:373
|
||||||
msgid "show this help and exit"
|
msgid "show this help and exit"
|
||||||
msgstr "zeige diese Hilfe und beende"
|
msgstr "zeige diese Hilfe und beende"
|
||||||
|
|
||||||
#: src/main/help.c:421
|
#: src/main/help.c:376
|
||||||
msgid "show version information and exit"
|
msgid "show version information and exit"
|
||||||
msgstr "zeige Versionsinformationen und beende"
|
msgstr "zeige Versionsinformationen und beende"
|
||||||
|
|
||||||
#: src/main/help.c:425
|
#: src/main/help.c:380
|
||||||
msgid "write debug logs to FILE"
|
msgid "write debug logs to FILE"
|
||||||
msgstr "schreibe Debug-Protokolle in DATEI"
|
msgstr "schreibe Debug-Protokolle in DATEI"
|
||||||
|
|
||||||
#: src/main/help.c:450
|
#: src/main/help.c:406
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Usage: %s [OPTION] [FILE]..."
|
msgid "Usage: %s [OPTION] [FILE]..."
|
||||||
msgstr "Aufruf: %s [OPTION] [DATEI]..."
|
msgstr "Aufruf: %s [OPTION] [DATEI]..."
|
||||||
|
|
||||||
#: src/main/help.c:461
|
#: src/main/help.c:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Verbindet DATEI(en) oder den Standard-Eingabe-Kanal mit dem Standard-Ausgabe-"
|
"Verbindet DATEI(en) oder den Standard-Eingabe-Kanal mit dem Standard-Ausgabe-"
|
||||||
"Kanal und misst den Datenstrom."
|
"Kanal und misst den Datenstrom."
|
||||||
|
|
||||||
#: src/main/help.c:598
|
#: src/main/help.c:555
|
||||||
|
msgid "Supported format sequences:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:569
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please report any bugs to: %s"
|
msgid "Please report any bugs to: %s"
|
||||||
msgstr "Bitte senden Sie Fehlerberichte an %s"
|
msgstr "Bitte senden Sie Fehlerberichte an %s"
|
||||||
|
|
||||||
#: src/main/main.c:230
|
#: src/main/main.c:232
|
||||||
msgid "(input)"
|
msgid "(input)"
|
||||||
msgstr "(eingabe)"
|
msgstr "(eingabe)"
|
||||||
|
|
||||||
#: src/main/main.c:319
|
#: src/main/main.c:328
|
||||||
msgid "state allocation failed"
|
msgid "state allocation failed"
|
||||||
msgstr "Speicherzuweisung für `state' fehlgeschlagen"
|
msgstr "Speicherzuweisung für `state' fehlgeschlagen"
|
||||||
|
|
||||||
@@ -315,41 +327,45 @@ msgstr "konnte Blockgerät nicht öffnen"
|
|||||||
msgid "failed to determine size of block device"
|
msgid "failed to determine size of block device"
|
||||||
msgstr "konnte Größe des Blockgeräts nicht ermitteln"
|
msgstr "konnte Größe des Blockgeräts nicht ermitteln"
|
||||||
|
|
||||||
#: src/main/options.c:344
|
#: src/main/options.c:345
|
||||||
msgid "option structure allocation failed"
|
msgid "option structure allocation failed"
|
||||||
msgstr "Speicherzuweisung für `option' fehlgeschlagen"
|
msgstr "Speicherzuweisung für `option' fehlgeschlagen"
|
||||||
|
|
||||||
#: src/main/options.c:363
|
#: src/main/options.c:364
|
||||||
msgid "option structure argv allocation failed"
|
msgid "option structure argv allocation failed"
|
||||||
msgstr "Speicherzuweisung für `argv' der Option fehlgeschlagen"
|
msgstr "Speicherzuweisung für `argv' der Option fehlgeschlagen"
|
||||||
|
|
||||||
#: src/main/options.c:425
|
#: src/main/options.c:417
|
||||||
|
msgid "numeric value not understood"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/options.c:435
|
||||||
msgid "integer argument expected"
|
msgid "integer argument expected"
|
||||||
msgstr "Ganzzahliges Argument erwartet"
|
msgstr "Ganzzahliges Argument erwartet"
|
||||||
|
|
||||||
#: src/main/options.c:436
|
#: src/main/options.c:447
|
||||||
msgid "numeric argument expected"
|
msgid "numeric argument expected"
|
||||||
msgstr "numerisches Argument erwartet"
|
msgstr "numerisches Argument erwartet"
|
||||||
|
|
||||||
#: src/main/options.c:447
|
#: src/main/options.c:458
|
||||||
msgid "process ID or pid:fd pair expected"
|
msgid "process ID or pid:fd pair expected"
|
||||||
msgstr "Prozess-ID oder PID:FD-Paar erwartet"
|
msgstr "Prozess-ID oder PID:FD-Paar erwartet"
|
||||||
|
|
||||||
#: src/main/options.c:454
|
#: src/main/options.c:465
|
||||||
msgid "invalid process ID"
|
msgid "invalid process ID"
|
||||||
msgstr "ungültige Prozess-ID"
|
msgstr "ungültige Prozess-ID"
|
||||||
|
|
||||||
#: src/main/options.c:679
|
#: src/main/options.c:698
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s --help' for more information."
|
msgid "Try `%s --help' for more information."
|
||||||
msgstr "`%s --help' zeigt weitere Informationen an."
|
msgstr "`%s --help' zeigt weitere Informationen an."
|
||||||
|
|
||||||
#: src/main/options.c:681
|
#: src/main/options.c:700
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s -h' for more information."
|
msgid "Try `%s -h' for more information."
|
||||||
msgstr "`%s -h' zeigt weitere Informationen an."
|
msgstr "`%s -h' zeigt weitere Informationen an."
|
||||||
|
|
||||||
#: src/main/options.c:712
|
#: src/main/options.c:731
|
||||||
msgid ""
|
msgid ""
|
||||||
"cannot use line mode or transfer modifier options when watching file "
|
"cannot use line mode or transfer modifier options when watching file "
|
||||||
"descriptors"
|
"descriptors"
|
||||||
@@ -357,32 +373,32 @@ msgstr ""
|
|||||||
"Beim Beobachten von Dateideskriptoren können keine Optionen für den "
|
"Beim Beobachten von Dateideskriptoren können keine Optionen für den "
|
||||||
"Zeilenmodus oder den Übertragungsmodifikator verwendet werden"
|
"Zeilenmodus oder den Übertragungsmodifikator verwendet werden"
|
||||||
|
|
||||||
#: src/main/options.c:721
|
#: src/main/options.c:740
|
||||||
msgid "cannot use cursor positioning when watching file descriptors"
|
msgid "cannot use cursor positioning when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Beim Beobachten von Dateideskriptoren kann Cursor-Positionierung nicht "
|
"Beim Beobachten von Dateideskriptoren kann Cursor-Positionierung nicht "
|
||||||
"verwendet werden"
|
"verwendet werden"
|
||||||
|
|
||||||
#: src/main/options.c:730
|
#: src/main/options.c:749
|
||||||
msgid "cannot use remote control when watching file descriptors"
|
msgid "cannot use remote control when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Beim Beobachten von Dateideskriptoren kann die Fernbedienung nicht verwenden "
|
"Beim Beobachten von Dateideskriptoren kann die Fernbedienung nicht verwenden "
|
||||||
"werden"
|
"werden"
|
||||||
|
|
||||||
#: src/main/options.c:739
|
#: src/main/options.c:758
|
||||||
msgid "cannot transfer files when watching file descriptors"
|
msgid "cannot transfer files when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Beim Beobachten von Dateideskriptoren können Dateien nicht übertragen werden"
|
"Beim Beobachten von Dateideskriptoren können Dateien nicht übertragen werden"
|
||||||
|
|
||||||
#: src/main/options.c:754
|
#: src/main/options.c:773
|
||||||
msgid "not available on systems without /proc/self/fdinfo"
|
msgid "not available on systems without /proc/self/fdinfo"
|
||||||
msgstr "Nicht verfügbar auf Systemen ohne /proc/self/fdinfo"
|
msgstr "Nicht verfügbar auf Systemen ohne /proc/self/fdinfo"
|
||||||
|
|
||||||
#: src/main/remote.c:304
|
#: src/main/remote.c:309
|
||||||
msgid "message not received"
|
msgid "message not received"
|
||||||
msgstr "Nachricht nicht empfangen"
|
msgstr "Nachricht nicht empfangen"
|
||||||
|
|
||||||
#: src/main/remote.c:431
|
#: src/main/remote.c:440
|
||||||
msgid "SA_SIGINFO not supported on this system"
|
msgid "SA_SIGINFO not supported on this system"
|
||||||
msgstr "SA_SIGINFO wird auf diesem System nicht unterstützt"
|
msgstr "SA_SIGINFO wird auf diesem System nicht unterstützt"
|
||||||
|
|
||||||
@@ -418,48 +434,18 @@ msgstr "Sperrversuch fehlgeschlagen"
|
|||||||
msgid "failed to open terminal"
|
msgid "failed to open terminal"
|
||||||
msgstr "konnte Terminal nicht öffnen"
|
msgstr "konnte Terminal nicht öffnen"
|
||||||
|
|
||||||
#: src/pv/display.c:233
|
#: src/pv/display.c:249
|
||||||
msgid "yzafpnum kMGTPEZY"
|
msgid "yzafpnum kMGTPEZY"
|
||||||
msgstr "yzafpnµm kMGTPEZY"
|
msgstr "yzafpnµm kMGTPEZY"
|
||||||
|
|
||||||
#: src/pv/display.c:251
|
#: src/pv/display.c:267
|
||||||
msgid "yzafpnum KMGTPEZY"
|
msgid "yzafpnum KMGTPEZY"
|
||||||
msgstr "yzafpnµm KMGTPEZY"
|
msgstr "yzafpnµm KMGTPEZY"
|
||||||
|
|
||||||
#: src/pv/display.c:681 src/pv/transfer.c:1011
|
#: src/pv/display.c:1067 src/pv/transfer.c:1056
|
||||||
msgid "buffer allocation failed"
|
msgid "buffer allocation failed"
|
||||||
msgstr "Speicherzuweisung für den Puffer fehlgeschlagen"
|
msgstr "Speicherzuweisung für den Puffer fehlgeschlagen"
|
||||||
|
|
||||||
#: src/pv/display.c:810
|
|
||||||
msgid "b"
|
|
||||||
msgstr "b"
|
|
||||||
|
|
||||||
#: src/pv/display.c:813 src/pv/transfer.c:602
|
|
||||||
msgid "B"
|
|
||||||
msgstr "B"
|
|
||||||
|
|
||||||
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
|
|
||||||
#: src/pv/loop.c:549
|
|
||||||
msgid "b/s"
|
|
||||||
msgstr "b/s"
|
|
||||||
|
|
||||||
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
|
|
||||||
msgid "/s"
|
|
||||||
msgstr "/s"
|
|
||||||
|
|
||||||
#: 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:904 src/pv/display.c:908
|
|
||||||
msgid "ETA"
|
|
||||||
msgstr "ETA"
|
|
||||||
|
|
||||||
#: src/pv/display.c:974
|
|
||||||
msgid "FIN"
|
|
||||||
msgstr "Endzeit"
|
|
||||||
|
|
||||||
#: src/pv/file.c:149
|
#: src/pv/file.c:149
|
||||||
msgid "failed to seek to start of output"
|
msgid "failed to seek to start of output"
|
||||||
msgstr "Konnte nicht zum Anfang der Ausgabe springen"
|
msgstr "Konnte nicht zum Anfang der Ausgabe springen"
|
||||||
@@ -488,20 +474,51 @@ msgstr "(keine)"
|
|||||||
msgid "(stdin)"
|
msgid "(stdin)"
|
||||||
msgstr "(stdin)"
|
msgstr "(stdin)"
|
||||||
|
|
||||||
#: src/pv/loop.c:548
|
#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:93
|
||||||
|
#: src/pv/format/rate.c:32 src/pv/loop.c:551
|
||||||
|
msgid "b/s"
|
||||||
|
msgstr "b/s"
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36
|
||||||
|
msgid "/s"
|
||||||
|
msgstr "/s"
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36 src/pv/loop.c:551
|
||||||
|
msgid "B/s"
|
||||||
|
msgstr "B/s"
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:31
|
||||||
|
msgid "b"
|
||||||
|
msgstr "b"
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:35 src/pv/transfer.c:594
|
||||||
|
msgid "B"
|
||||||
|
msgstr "B"
|
||||||
|
|
||||||
|
#: src/pv/format/eta.c:53 src/pv/format/eta.c:57
|
||||||
|
msgid "ETA"
|
||||||
|
msgstr "ETA"
|
||||||
|
|
||||||
|
#: src/pv/format/fineta.c:81
|
||||||
|
msgid "FIN"
|
||||||
|
msgstr "Endzeit"
|
||||||
|
|
||||||
|
#: src/pv/loop.c:550
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "rate min/avg/max/mdev"
|
msgid "rate min/avg/max/mdev"
|
||||||
msgstr "Rate min/mittel/max/mdev"
|
msgstr "Rate min/mittel/max/mdev"
|
||||||
|
|
||||||
#: src/pv/loop.c:560
|
#: src/pv/loop.c:562
|
||||||
msgid "rate not measured"
|
msgid "rate not measured"
|
||||||
msgstr "Übertragungsrate nicht gemessen"
|
msgstr "Übertragungsrate nicht gemessen"
|
||||||
|
|
||||||
#: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
|
#: src/pv/loop.c:772 src/pv/loop.c:823 src/pv/loop.c:876 src/pv/watchpid.c:99
|
||||||
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
||||||
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
||||||
#: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
|
#: 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
|
#: src/pv/watchpid.c:385 src/pv/watchpid.c:406
|
||||||
msgid "pid"
|
msgid "pid"
|
||||||
msgstr "pid"
|
msgstr "pid"
|
||||||
|
|
||||||
@@ -509,51 +526,51 @@ msgstr "pid"
|
|||||||
msgid "history structure allocation failed"
|
msgid "history structure allocation failed"
|
||||||
msgstr "Speicherzuweisung für `history' fehlgeschlagen"
|
msgstr "Speicherzuweisung für `history' fehlgeschlagen"
|
||||||
|
|
||||||
#: src/pv/state.c:572 src/pv/state.c:583
|
#: src/pv/state.c:593 src/pv/state.c:604
|
||||||
msgid "file list allocation failed"
|
msgid "file list allocation failed"
|
||||||
msgstr "Speicherzuweisung für die Dateiliste fehlgeschlagen"
|
msgstr "Speicherzuweisung für die Dateiliste fehlgeschlagen"
|
||||||
|
|
||||||
#: src/pv/transfer.c:464
|
#: src/pv/transfer.c:463
|
||||||
msgid "read failed"
|
msgid "read failed"
|
||||||
msgstr "read-Aufruf fehlgeschlagen"
|
msgstr "read-Aufruf fehlgeschlagen"
|
||||||
|
|
||||||
#: src/pv/transfer.c:487
|
#: src/pv/transfer.c:479
|
||||||
msgid "warning: read errors detected"
|
msgid "warning: read errors detected"
|
||||||
msgstr "warnung: lesefehler erkannt"
|
msgstr "warnung: lesefehler erkannt"
|
||||||
|
|
||||||
#: src/pv/transfer.c:503
|
#: src/pv/transfer.c:495
|
||||||
msgid "file is not seekable"
|
msgid "file is not seekable"
|
||||||
msgstr "Datei ist nicht durchsuchbar"
|
msgstr "Datei ist nicht durchsuchbar"
|
||||||
|
|
||||||
#: src/pv/transfer.c:581
|
#: src/pv/transfer.c:573
|
||||||
msgid "failed to seek past error"
|
msgid "failed to seek past error"
|
||||||
msgstr "konnte den Fehler nicht überwinden"
|
msgstr "konnte den Fehler nicht überwinden"
|
||||||
|
|
||||||
#: src/pv/transfer.c:601
|
#: src/pv/transfer.c:593
|
||||||
msgid "skipped past read error"
|
msgid "skipped past read error"
|
||||||
msgstr "über den Lesefehler hinaus verschoben"
|
msgstr "über den Lesefehler hinaus verschoben"
|
||||||
|
|
||||||
#: src/pv/transfer.c:642
|
#: src/pv/transfer.c:634
|
||||||
msgid "no transfer buffer allocated"
|
msgid "no transfer buffer allocated"
|
||||||
msgstr "Speicherzuweisung für den Transferpuffer fehlgeschlagen"
|
msgstr "Speicherzuweisung für den Transferpuffer fehlgeschlagen"
|
||||||
|
|
||||||
#: src/pv/transfer.c:684
|
#: src/pv/transfer.c:676
|
||||||
msgid "failed to set interval timer"
|
msgid "failed to set interval timer"
|
||||||
msgstr "konnte Intervall-Timer nicht setzen"
|
msgstr "konnte Intervall-Timer nicht setzen"
|
||||||
|
|
||||||
#: src/pv/transfer.c:710
|
#: src/pv/transfer.c:702
|
||||||
msgid "failed to clear interval timer"
|
msgid "failed to clear interval timer"
|
||||||
msgstr "konnte Intervall-Timer nicht löschen"
|
msgstr "konnte Intervall-Timer nicht löschen"
|
||||||
|
|
||||||
#: src/pv/transfer.c:740
|
#: src/pv/transfer.c:744
|
||||||
msgid "line position buffer allocation failed"
|
msgid "line position buffer allocation failed"
|
||||||
msgstr "Zuweisung des Zeilenpuffers fehlgeschlagen"
|
msgstr "Zuweisung des Zeilenpuffers fehlgeschlagen"
|
||||||
|
|
||||||
#: src/pv/transfer.c:872
|
#: src/pv/transfer.c:917
|
||||||
msgid "write failed"
|
msgid "write failed"
|
||||||
msgstr "write-Aufruf fehlgeschlagen"
|
msgstr "write-Aufruf fehlgeschlagen"
|
||||||
|
|
||||||
#: src/pv/transfer.c:1109
|
#: src/pv/transfer.c:1154
|
||||||
msgid "select call failed"
|
msgid "select call failed"
|
||||||
msgstr "select-Aufruf fehlgeschlagen"
|
msgstr "select-Aufruf fehlgeschlagen"
|
||||||
|
|
||||||
|
|||||||
@@ -1,269 +1,281 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||||
"POT-Creation-Date: 2024-12-02 17:56+0000\n"
|
"POT-Creation-Date: 2024-12-22 12:09+0000\n"
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: src/main/help.c:284
|
#: src/main/help.c:236
|
||||||
msgid "show progress bar"
|
msgid "show progress bar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:287
|
#: src/main/help.c:239
|
||||||
msgid "show elapsed time"
|
msgid "show elapsed time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:290
|
#: src/main/help.c:242
|
||||||
msgid "show estimated time of arrival (completion)"
|
msgid "show estimated time of arrival (completion)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:293
|
#: src/main/help.c:245
|
||||||
msgid "show absolute estimated time of arrival (completion)"
|
msgid "show absolute estimated time of arrival (completion)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:296
|
#: src/main/help.c:248
|
||||||
msgid "show data transfer rate counter"
|
msgid "show data transfer rate counter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:299
|
#: src/main/help.c:251
|
||||||
msgid "show data transfer average rate counter"
|
msgid "show data transfer average rate counter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:302
|
#: src/main/help.c:254
|
||||||
msgid "show number of bytes transferred"
|
msgid "show number of bytes transferred"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:305
|
#: src/main/help.c:257
|
||||||
msgid "show percentage of transfer buffer in use"
|
msgid "show percentage of transfer buffer in use"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:307
|
#: src/main/help.c:259
|
||||||
msgid "NUM"
|
msgid "NUM"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:308
|
#: src/main/help.c:260
|
||||||
msgid "show NUM bytes last written"
|
msgid "show NUM bytes last written"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:310
|
#: src/main/help.c:262
|
||||||
msgid "FORMAT"
|
msgid "FORMAT"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:311
|
#: src/main/help.c:263
|
||||||
msgid "set output format to FORMAT"
|
msgid "set output format to FORMAT"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:314
|
#: src/main/help.c:266
|
||||||
msgid "output percentages, not visual information"
|
msgid "output percentages, not visual information"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:317
|
#: src/main/help.c:269
|
||||||
msgid "do not output any transfer information at all"
|
msgid "do not output any transfer information at all"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:321
|
#: src/main/help.c:273
|
||||||
msgid "show number of bits transferred"
|
msgid "show number of bits transferred"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:324
|
#: src/main/help.c:276
|
||||||
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:327
|
#: src/main/help.c:279
|
||||||
msgid "display nothing until first byte transferred"
|
msgid "display nothing until first byte transferred"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
|
#: src/main/help.c:281 src/main/help.c:296 src/main/help.c:299
|
||||||
msgid "SEC"
|
msgid "SEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:330
|
#: src/main/help.c:282
|
||||||
msgid "display nothing until SEC seconds have passed"
|
msgid "display nothing until SEC seconds have passed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:332
|
#: src/main/help.c:284
|
||||||
msgid "SIZE"
|
msgid "SIZE"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:333
|
#: src/main/help.c:285
|
||||||
msgid "set estimated data size to SIZE bytes"
|
msgid "set estimated data size to SIZE bytes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:336
|
#: src/main/help.c:288
|
||||||
msgid "if size unknown, show rate vs max rate"
|
msgid "if size unknown, show rate vs max rate"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:339
|
#: src/main/help.c:291
|
||||||
msgid "count lines instead of bytes"
|
msgid "count lines instead of bytes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:342
|
#: src/main/help.c:294
|
||||||
msgid "lines are null-terminated"
|
msgid "lines are null-terminated"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:345
|
#: src/main/help.c:297
|
||||||
msgid "update every SEC seconds"
|
msgid "update every SEC seconds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:348
|
#: src/main/help.c:300
|
||||||
msgid "compute average rate over past SEC seconds (default 30s)"
|
msgid "compute average rate over past SEC seconds (default 30s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:350
|
#: src/main/help.c:302
|
||||||
msgid "WIDTH"
|
msgid "WIDTH"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:351
|
#: src/main/help.c:303
|
||||||
msgid "assume terminal is WIDTH characters wide"
|
msgid "assume terminal is WIDTH characters wide"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:353
|
#: src/main/help.c:305
|
||||||
msgid "HEIGHT"
|
msgid "HEIGHT"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:354
|
#: src/main/help.c:306
|
||||||
msgid "assume terminal is HEIGHT rows high"
|
msgid "assume terminal is HEIGHT rows high"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:356
|
#: src/main/help.c:308
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:357
|
#: src/main/help.c:309
|
||||||
msgid "prefix visual information with NAME"
|
msgid "prefix visual information with NAME"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:359
|
#: src/main/help.c:311
|
||||||
|
msgid "STYLE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:312
|
||||||
|
msgid "set default bar style to NAME"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:314
|
||||||
msgid "SPEC"
|
msgid "SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:360
|
#: src/main/help.c:315
|
||||||
msgid "also send progress to SPEC"
|
msgid "also send progress to SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:363
|
#: src/main/help.c:318
|
||||||
msgid "output transfer statistics at the end"
|
msgid "output transfer statistics at the end"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:366
|
#: src/main/help.c:321
|
||||||
msgid "output even if standard error is not a terminal"
|
msgid "output even if standard error is not a terminal"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:369
|
#: src/main/help.c:324
|
||||||
msgid "use cursor positioning escape sequences"
|
msgid "use cursor positioning escape sequences"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
|
#: src/main/help.c:327 src/main/help.c:357 src/main/help.c:369
|
||||||
#: src/main/help.c:424
|
#: src/main/help.c:379
|
||||||
msgid "FILE"
|
msgid "FILE"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:373
|
#: src/main/help.c:328
|
||||||
msgid "write output to FILE instead of stdout"
|
msgid "write output to FILE instead of stdout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:375
|
#: src/main/help.c:330
|
||||||
msgid "RATE"
|
msgid "RATE"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:376
|
#: src/main/help.c:331
|
||||||
msgid "limit transfer to RATE bytes per second"
|
msgid "limit transfer to RATE bytes per second"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:378 src/main/help.c:387
|
#: src/main/help.c:333 src/main/help.c:342
|
||||||
msgid "BYTES"
|
msgid "BYTES"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:379
|
#: src/main/help.c:334
|
||||||
msgid "use a buffer size of BYTES"
|
msgid "use a buffer size of BYTES"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:382
|
#: src/main/help.c:337
|
||||||
msgid "never use splice(), always use read/write"
|
msgid "never use splice(), always use read/write"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:385
|
#: src/main/help.c:340
|
||||||
msgid "skip read errors in input"
|
msgid "skip read errors in input"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:388
|
#: src/main/help.c:343
|
||||||
msgid "skip errors in BYTES blocks at a time"
|
msgid "skip errors in BYTES blocks at a time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:391
|
#: src/main/help.c:346
|
||||||
msgid "stop after --size bytes have been transferred"
|
msgid "stop after --size bytes have been transferred"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:394
|
#: src/main/help.c:349
|
||||||
msgid "flush cache to disk after every write"
|
msgid "flush cache to disk after every write"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:397
|
#: src/main/help.c:352
|
||||||
msgid "use direct I/O to bypass cache"
|
msgid "use direct I/O to bypass cache"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:400
|
#: src/main/help.c:355
|
||||||
msgid "discard input instead of writing to output"
|
msgid "discard input instead of writing to output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:403
|
#: src/main/help.c:358
|
||||||
msgid "write all input to FILE before writing to output"
|
msgid "write all input to FILE before writing to output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:405
|
#: src/main/help.c:360
|
||||||
msgid "PID[:FD]"
|
msgid "PID[:FD]"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:406
|
#: src/main/help.c:361
|
||||||
msgid "watch file FD opened by process PID"
|
msgid "watch file FD opened by process PID"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:409
|
#: src/main/help.c:364
|
||||||
msgid "PID"
|
msgid "PID"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:410
|
#: src/main/help.c:365
|
||||||
msgid "update settings of process PID"
|
msgid "update settings of process PID"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:415
|
#: src/main/help.c:370
|
||||||
msgid "save process ID in FILE"
|
msgid "save process ID in FILE"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:418
|
#: src/main/help.c:373
|
||||||
msgid "show this help and exit"
|
msgid "show this help and exit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:421
|
#: src/main/help.c:376
|
||||||
msgid "show version information and exit"
|
msgid "show version information and exit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:425
|
#: src/main/help.c:380
|
||||||
msgid "write debug logs to FILE"
|
msgid "write debug logs to FILE"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:450
|
#: src/main/help.c:406
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Usage: %s [OPTION] [FILE]..."
|
msgid "Usage: %s [OPTION] [FILE]..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:461
|
#: src/main/help.c:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:598
|
#: src/main/help.c:555
|
||||||
|
msgid "Supported format sequences:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:569
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please report any bugs to: %s"
|
msgid "Please report any bugs to: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/main.c:230
|
#: src/main/main.c:232
|
||||||
msgid "(input)"
|
msgid "(input)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/main.c:319
|
#: src/main/main.c:328
|
||||||
msgid "state allocation failed"
|
msgid "state allocation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -291,67 +303,71 @@ msgstr ""
|
|||||||
msgid "failed to determine size of block device"
|
msgid "failed to determine size of block device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:344
|
#: src/main/options.c:345
|
||||||
msgid "option structure allocation failed"
|
msgid "option structure allocation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:363
|
#: src/main/options.c:364
|
||||||
msgid "option structure argv allocation failed"
|
msgid "option structure argv allocation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:425
|
#: src/main/options.c:417
|
||||||
|
msgid "numeric value not understood"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/options.c:435
|
||||||
msgid "integer argument expected"
|
msgid "integer argument expected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:436
|
#: src/main/options.c:447
|
||||||
msgid "numeric argument expected"
|
msgid "numeric argument expected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:447
|
#: src/main/options.c:458
|
||||||
msgid "process ID or pid:fd pair expected"
|
msgid "process ID or pid:fd pair expected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:454
|
#: src/main/options.c:465
|
||||||
msgid "invalid process ID"
|
msgid "invalid process ID"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:679
|
#: src/main/options.c:698
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s --help' for more information."
|
msgid "Try `%s --help' for more information."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:681
|
#: src/main/options.c:700
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s -h' for more information."
|
msgid "Try `%s -h' for more information."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:712
|
#: src/main/options.c:731
|
||||||
msgid ""
|
msgid ""
|
||||||
"cannot use line mode or transfer modifier options when watching file "
|
"cannot use line mode or transfer modifier options when watching file "
|
||||||
"descriptors"
|
"descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:721
|
#: src/main/options.c:740
|
||||||
msgid "cannot use cursor positioning when watching file descriptors"
|
msgid "cannot use cursor positioning when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:730
|
#: src/main/options.c:749
|
||||||
msgid "cannot use remote control when watching file descriptors"
|
msgid "cannot use remote control when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:739
|
#: src/main/options.c:758
|
||||||
msgid "cannot transfer files when watching file descriptors"
|
msgid "cannot transfer files when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:754
|
#: src/main/options.c:773
|
||||||
msgid "not available on systems without /proc/self/fdinfo"
|
msgid "not available on systems without /proc/self/fdinfo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/remote.c:304
|
#: src/main/remote.c:309
|
||||||
msgid "message not received"
|
msgid "message not received"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/remote.c:431
|
#: src/main/remote.c:440
|
||||||
msgid "SA_SIGINFO not supported on this system"
|
msgid "SA_SIGINFO not supported on this system"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -387,48 +403,18 @@ msgstr ""
|
|||||||
msgid "failed to open terminal"
|
msgid "failed to open terminal"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/display.c:233
|
#: src/pv/display.c:249
|
||||||
msgid "yzafpnum kMGTPEZY"
|
msgid "yzafpnum kMGTPEZY"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/display.c:251
|
#: src/pv/display.c:267
|
||||||
msgid "yzafpnum KMGTPEZY"
|
msgid "yzafpnum KMGTPEZY"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/display.c:681 src/pv/transfer.c:1011
|
#: src/pv/display.c:1067 src/pv/transfer.c:1056
|
||||||
msgid "buffer allocation failed"
|
msgid "buffer allocation failed"
|
||||||
msgstr ""
|
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
|
#: src/pv/file.c:149
|
||||||
msgid "failed to seek to start of output"
|
msgid "failed to seek to start of output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -457,19 +443,50 @@ msgstr ""
|
|||||||
msgid "(stdin)"
|
msgid "(stdin)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/loop.c:548
|
#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:93
|
||||||
|
#: src/pv/format/rate.c:32 src/pv/loop.c:551
|
||||||
|
msgid "b/s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36
|
||||||
|
msgid "/s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36 src/pv/loop.c:551
|
||||||
|
msgid "B/s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:31
|
||||||
|
msgid "b"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:35 src/pv/transfer.c:594
|
||||||
|
msgid "B"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/format/eta.c:53 src/pv/format/eta.c:57
|
||||||
|
msgid "ETA"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/format/fineta.c:81
|
||||||
|
msgid "FIN"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/loop.c:550
|
||||||
msgid "rate min/avg/max/mdev"
|
msgid "rate min/avg/max/mdev"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/loop.c:560
|
#: src/pv/loop.c:562
|
||||||
msgid "rate not measured"
|
msgid "rate not measured"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
|
#: src/pv/loop.c:772 src/pv/loop.c:823 src/pv/loop.c:876 src/pv/watchpid.c:99
|
||||||
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
||||||
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
||||||
#: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
|
#: 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
|
#: src/pv/watchpid.c:385 src/pv/watchpid.c:406
|
||||||
msgid "pid"
|
msgid "pid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -477,51 +494,51 @@ msgstr ""
|
|||||||
msgid "history structure allocation failed"
|
msgid "history structure allocation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/state.c:572 src/pv/state.c:583
|
#: src/pv/state.c:593 src/pv/state.c:604
|
||||||
msgid "file list allocation failed"
|
msgid "file list allocation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:464
|
#: src/pv/transfer.c:463
|
||||||
msgid "read failed"
|
msgid "read failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:487
|
#: src/pv/transfer.c:479
|
||||||
msgid "warning: read errors detected"
|
msgid "warning: read errors detected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:503
|
#: src/pv/transfer.c:495
|
||||||
msgid "file is not seekable"
|
msgid "file is not seekable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:581
|
#: src/pv/transfer.c:573
|
||||||
msgid "failed to seek past error"
|
msgid "failed to seek past error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:601
|
#: src/pv/transfer.c:593
|
||||||
msgid "skipped past read error"
|
msgid "skipped past read error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:642
|
#: src/pv/transfer.c:634
|
||||||
msgid "no transfer buffer allocated"
|
msgid "no transfer buffer allocated"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:684
|
#: src/pv/transfer.c:676
|
||||||
msgid "failed to set interval timer"
|
msgid "failed to set interval timer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:710
|
#: src/pv/transfer.c:702
|
||||||
msgid "failed to clear interval timer"
|
msgid "failed to clear interval timer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:740
|
#: src/pv/transfer.c:744
|
||||||
msgid "line position buffer allocation failed"
|
msgid "line position buffer allocation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:872
|
#: src/pv/transfer.c:917
|
||||||
msgid "write failed"
|
msgid "write failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:1109
|
#: src/pv/transfer.c:1154
|
||||||
msgid "select call failed"
|
msgid "select call failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||||
"POT-Creation-Date: 2024-12-02 17:56+0000\n"
|
"POT-Creation-Date: 2024-12-22 12:09+0000\n"
|
||||||
"PO-Revision-Date: 2024-10-12 11:13+0000\n"
|
"PO-Revision-Date: 2024-10-12 11:13+0000\n"
|
||||||
"Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n"
|
"Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n"
|
||||||
"Language-Team: French <https://translate.codeberg.org/projects/pv/pv/fr/>\n"
|
"Language-Team: French <https://translate.codeberg.org/projects/pv/pv/fr/>\n"
|
||||||
@@ -26,269 +26,281 @@ msgstr ""
|
|||||||
"nls/intl/textdomain.c src/nls/intl-cat/cat-compat.c src/nls/intl-gett/intl-"
|
"nls/intl/textdomain.c src/nls/intl-cat/cat-compat.c src/nls/intl-gett/intl-"
|
||||||
"compat.c\n"
|
"compat.c\n"
|
||||||
|
|
||||||
#: src/main/help.c:284
|
#: src/main/help.c:236
|
||||||
msgid "show progress bar"
|
msgid "show progress bar"
|
||||||
msgstr "afficher la barre de progression"
|
msgstr "afficher la barre de progression"
|
||||||
|
|
||||||
#: src/main/help.c:287
|
#: src/main/help.c:239
|
||||||
msgid "show elapsed time"
|
msgid "show elapsed time"
|
||||||
msgstr "afficher le temps écoulé"
|
msgstr "afficher le temps écoulé"
|
||||||
|
|
||||||
#: src/main/help.c:290
|
#: src/main/help.c:242
|
||||||
msgid "show estimated time of arrival (completion)"
|
msgid "show estimated time of arrival (completion)"
|
||||||
msgstr "afficher l'heure approximative de l'achèvement de la tâche"
|
msgstr "afficher l'heure approximative de l'achèvement de la tâche"
|
||||||
|
|
||||||
#: src/main/help.c:293
|
#: src/main/help.c:245
|
||||||
msgid "show absolute estimated time of arrival (completion)"
|
msgid "show absolute estimated time of arrival (completion)"
|
||||||
msgstr "afficher l'heure absolute de l'achèvement de la tâche"
|
msgstr "afficher l'heure absolute de l'achèvement de la tâche"
|
||||||
|
|
||||||
#: src/main/help.c:296
|
#: src/main/help.c:248
|
||||||
msgid "show data transfer rate counter"
|
msgid "show data transfer rate counter"
|
||||||
msgstr "afficher le taux de tranfert des données"
|
msgstr "afficher le taux de tranfert des données"
|
||||||
|
|
||||||
#: src/main/help.c:299
|
#: src/main/help.c:251
|
||||||
msgid "show data transfer average rate counter"
|
msgid "show data transfer average rate counter"
|
||||||
msgstr "afficher le compteur de taux moyen de transfert de données"
|
msgstr "afficher le compteur de taux moyen de transfert de données"
|
||||||
|
|
||||||
#: src/main/help.c:302
|
#: src/main/help.c:254
|
||||||
msgid "show number of bytes transferred"
|
msgid "show number of bytes transferred"
|
||||||
msgstr "afficher le nombre d'octets transférés"
|
msgstr "afficher le nombre d'octets transférés"
|
||||||
|
|
||||||
#: src/main/help.c:305
|
#: src/main/help.c:257
|
||||||
msgid "show percentage of transfer buffer in use"
|
msgid "show percentage of transfer buffer in use"
|
||||||
msgstr "afficher le pourcentage de tampon de transfert utilisé"
|
msgstr "afficher le pourcentage de tampon de transfert utilisé"
|
||||||
|
|
||||||
#: src/main/help.c:307
|
#: src/main/help.c:259
|
||||||
msgid "NUM"
|
msgid "NUM"
|
||||||
msgstr "NUM"
|
msgstr "NUM"
|
||||||
|
|
||||||
#: src/main/help.c:308
|
#: src/main/help.c:260
|
||||||
msgid "show NUM bytes last written"
|
msgid "show NUM bytes last written"
|
||||||
msgstr "afficher les derniers NUM octets écrits"
|
msgstr "afficher les derniers NUM octets écrits"
|
||||||
|
|
||||||
#: src/main/help.c:310
|
#: src/main/help.c:262
|
||||||
msgid "FORMAT"
|
msgid "FORMAT"
|
||||||
msgstr "FORMAT"
|
msgstr "FORMAT"
|
||||||
|
|
||||||
#: src/main/help.c:311
|
#: src/main/help.c:263
|
||||||
msgid "set output format to FORMAT"
|
msgid "set output format to FORMAT"
|
||||||
msgstr "définir le format de sortie sur FORMAT"
|
msgstr "définir le format de sortie sur FORMAT"
|
||||||
|
|
||||||
#: src/main/help.c:314
|
#: src/main/help.c:266
|
||||||
msgid "output percentages, not visual information"
|
msgid "output percentages, not visual information"
|
||||||
msgstr "imprimer en pourcentage plutôt que des informations visuelles"
|
msgstr "imprimer en pourcentage plutôt que des informations visuelles"
|
||||||
|
|
||||||
#: src/main/help.c:317
|
#: src/main/help.c:269
|
||||||
msgid "do not output any transfer information at all"
|
msgid "do not output any transfer information at all"
|
||||||
msgstr "n'afficher aucune information de transfert"
|
msgstr "n'afficher aucune information de transfert"
|
||||||
|
|
||||||
#: src/main/help.c:321
|
#: src/main/help.c:273
|
||||||
msgid "show number of bits transferred"
|
msgid "show number of bits transferred"
|
||||||
msgstr "afficher le nombre de bits transférés"
|
msgstr "afficher le nombre de bits transférés"
|
||||||
|
|
||||||
#: src/main/help.c:324
|
#: src/main/help.c:276
|
||||||
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
||||||
msgstr "traiter les suffixes comme des multiples de 1000 au lieu de 1024"
|
msgstr "traiter les suffixes comme des multiples de 1000 au lieu de 1024"
|
||||||
|
|
||||||
#: src/main/help.c:327
|
#: src/main/help.c:279
|
||||||
msgid "display nothing until first byte transferred"
|
msgid "display nothing until first byte transferred"
|
||||||
msgstr "ne rien afficher avant qu'au moins un octet soit tranféré"
|
msgstr "ne rien afficher avant qu'au moins un octet soit tranféré"
|
||||||
|
|
||||||
#: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
|
#: src/main/help.c:281 src/main/help.c:296 src/main/help.c:299
|
||||||
msgid "SEC"
|
msgid "SEC"
|
||||||
msgstr "SEC"
|
msgstr "SEC"
|
||||||
|
|
||||||
#: src/main/help.c:330
|
#: src/main/help.c:282
|
||||||
msgid "display nothing until SEC seconds have passed"
|
msgid "display nothing until SEC seconds have passed"
|
||||||
msgstr "ne rien afficher jusqu'à ce que SEC secondes se soient écoulées"
|
msgstr "ne rien afficher jusqu'à ce que SEC secondes se soient écoulées"
|
||||||
|
|
||||||
#: src/main/help.c:332
|
#: src/main/help.c:284
|
||||||
msgid "SIZE"
|
msgid "SIZE"
|
||||||
msgstr "TAILLE"
|
msgstr "TAILLE"
|
||||||
|
|
||||||
#: src/main/help.c:333
|
#: src/main/help.c:285
|
||||||
msgid "set estimated data size to SIZE bytes"
|
msgid "set estimated data size to SIZE bytes"
|
||||||
msgstr "ajuster la taille estimée des données à TAILLE octets"
|
msgstr "ajuster la taille estimée des données à TAILLE octets"
|
||||||
|
|
||||||
#: src/main/help.c:336
|
#: src/main/help.c:288
|
||||||
msgid "if size unknown, show rate vs max rate"
|
msgid "if size unknown, show rate vs max rate"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"si la taille est inconnue, afficher le taux de transfert par rapport au taux "
|
"si la taille est inconnue, afficher le taux de transfert par rapport au taux "
|
||||||
"de transfert max"
|
"de transfert max"
|
||||||
|
|
||||||
#: src/main/help.c:339
|
#: src/main/help.c:291
|
||||||
msgid "count lines instead of bytes"
|
msgid "count lines instead of bytes"
|
||||||
msgstr "compter les lignes au lieu des octets"
|
msgstr "compter les lignes au lieu des octets"
|
||||||
|
|
||||||
#: src/main/help.c:342
|
#: src/main/help.c:294
|
||||||
msgid "lines are null-terminated"
|
msgid "lines are null-terminated"
|
||||||
msgstr "les lignes sont terminées par un caractère nul"
|
msgstr "les lignes sont terminées par un caractère nul"
|
||||||
|
|
||||||
#: src/main/help.c:345
|
#: src/main/help.c:297
|
||||||
msgid "update every SEC seconds"
|
msgid "update every SEC seconds"
|
||||||
msgstr "mettre à jour toutes les SEC secondes"
|
msgstr "mettre à jour toutes les SEC secondes"
|
||||||
|
|
||||||
#: src/main/help.c:348
|
#: src/main/help.c:300
|
||||||
msgid "compute average rate over past SEC seconds (default 30s)"
|
msgid "compute average rate over past SEC seconds (default 30s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"calculer le taux moyen d'après les SEC dernières secondes (30s par défaut)"
|
"calculer le taux moyen d'après les SEC dernières secondes (30s par défaut)"
|
||||||
|
|
||||||
#: src/main/help.c:350
|
#: src/main/help.c:302
|
||||||
msgid "WIDTH"
|
msgid "WIDTH"
|
||||||
msgstr "LARGEUR"
|
msgstr "LARGEUR"
|
||||||
|
|
||||||
#: src/main/help.c:351
|
#: src/main/help.c:303
|
||||||
msgid "assume terminal is WIDTH characters wide"
|
msgid "assume terminal is WIDTH characters wide"
|
||||||
msgstr "présumer la largeur du terminal à LARGEUR caractères"
|
msgstr "présumer la largeur du terminal à LARGEUR caractères"
|
||||||
|
|
||||||
#: src/main/help.c:353
|
#: src/main/help.c:305
|
||||||
msgid "HEIGHT"
|
msgid "HEIGHT"
|
||||||
msgstr "HAUTEUR"
|
msgstr "HAUTEUR"
|
||||||
|
|
||||||
#: src/main/help.c:354
|
#: src/main/help.c:306
|
||||||
msgid "assume terminal is HEIGHT rows high"
|
msgid "assume terminal is HEIGHT rows high"
|
||||||
msgstr "présumer la hauteur du terminal à HAUTEUR lignes"
|
msgstr "présumer la hauteur du terminal à HAUTEUR lignes"
|
||||||
|
|
||||||
#: src/main/help.c:356
|
#: src/main/help.c:308
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr "NOM"
|
msgstr "NOM"
|
||||||
|
|
||||||
#: src/main/help.c:357
|
#: src/main/help.c:309
|
||||||
msgid "prefix visual information with NAME"
|
msgid "prefix visual information with NAME"
|
||||||
msgstr "préfixer les informations visuelles avec NOM"
|
msgstr "préfixer les informations visuelles avec NOM"
|
||||||
|
|
||||||
#: src/main/help.c:359
|
#: src/main/help.c:311
|
||||||
|
msgid "STYLE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:312
|
||||||
|
msgid "set default bar style to NAME"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:314
|
||||||
msgid "SPEC"
|
msgid "SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:360
|
#: src/main/help.c:315
|
||||||
msgid "also send progress to SPEC"
|
msgid "also send progress to SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:363
|
#: src/main/help.c:318
|
||||||
msgid "output transfer statistics at the end"
|
msgid "output transfer statistics at the end"
|
||||||
msgstr "afficher les statistiques de transfert à la fin"
|
msgstr "afficher les statistiques de transfert à la fin"
|
||||||
|
|
||||||
#: src/main/help.c:366
|
#: src/main/help.c:321
|
||||||
msgid "output even if standard error is not a terminal"
|
msgid "output even if standard error is not a terminal"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"imprimer vers la sortie d'erreur standard même si ce n'est pas un terminal"
|
"imprimer vers la sortie d'erreur standard même si ce n'est pas un terminal"
|
||||||
|
|
||||||
#: src/main/help.c:369
|
#: src/main/help.c:324
|
||||||
msgid "use cursor positioning escape sequences"
|
msgid "use cursor positioning escape sequences"
|
||||||
msgstr "utiliser les séquences d'échappements de positionnement de curseur"
|
msgstr "utiliser les séquences d'échappements de positionnement de curseur"
|
||||||
|
|
||||||
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
|
#: src/main/help.c:327 src/main/help.c:357 src/main/help.c:369
|
||||||
#: src/main/help.c:424
|
#: src/main/help.c:379
|
||||||
msgid "FILE"
|
msgid "FILE"
|
||||||
msgstr "FICHIER"
|
msgstr "FICHIER"
|
||||||
|
|
||||||
#: src/main/help.c:373
|
#: src/main/help.c:328
|
||||||
msgid "write output to FILE instead of stdout"
|
msgid "write output to FILE instead of stdout"
|
||||||
msgstr "écrire la sortie dans FICHIER au lieu de la sortie standard"
|
msgstr "écrire la sortie dans FICHIER au lieu de la sortie standard"
|
||||||
|
|
||||||
#: src/main/help.c:375
|
#: src/main/help.c:330
|
||||||
msgid "RATE"
|
msgid "RATE"
|
||||||
msgstr "TAUX"
|
msgstr "TAUX"
|
||||||
|
|
||||||
#: src/main/help.c:376
|
#: src/main/help.c:331
|
||||||
msgid "limit transfer to RATE bytes per second"
|
msgid "limit transfer to RATE bytes per second"
|
||||||
msgstr "limite le taux de transfert à TAUX octets par seconde"
|
msgstr "limite le taux de transfert à TAUX octets par seconde"
|
||||||
|
|
||||||
#: src/main/help.c:378 src/main/help.c:387
|
#: src/main/help.c:333 src/main/help.c:342
|
||||||
msgid "BYTES"
|
msgid "BYTES"
|
||||||
msgstr "OCTETS"
|
msgstr "OCTETS"
|
||||||
|
|
||||||
#: src/main/help.c:379
|
#: src/main/help.c:334
|
||||||
msgid "use a buffer size of BYTES"
|
msgid "use a buffer size of BYTES"
|
||||||
msgstr "Utiliser une mémoire tampon de OCTETS octets"
|
msgstr "Utiliser une mémoire tampon de OCTETS octets"
|
||||||
|
|
||||||
#: src/main/help.c:382
|
#: src/main/help.c:337
|
||||||
msgid "never use splice(), always use read/write"
|
msgid "never use splice(), always use read/write"
|
||||||
msgstr "ne jamais utiliser splice(), toujours utiliser read/write"
|
msgstr "ne jamais utiliser splice(), toujours utiliser read/write"
|
||||||
|
|
||||||
#: src/main/help.c:385
|
#: src/main/help.c:340
|
||||||
msgid "skip read errors in input"
|
msgid "skip read errors in input"
|
||||||
msgstr "ignorer les erreurs de lecture dans l'entrée"
|
msgstr "ignorer les erreurs de lecture dans l'entrée"
|
||||||
|
|
||||||
#: src/main/help.c:388
|
#: src/main/help.c:343
|
||||||
msgid "skip errors in BYTES blocks at a time"
|
msgid "skip errors in BYTES blocks at a time"
|
||||||
msgstr "ignorer les erreurs dans OCTETS blocs à la fois"
|
msgstr "ignorer les erreurs dans OCTETS blocs à la fois"
|
||||||
|
|
||||||
#: src/main/help.c:391
|
#: src/main/help.c:346
|
||||||
msgid "stop after --size bytes have been transferred"
|
msgid "stop after --size bytes have been transferred"
|
||||||
msgstr "arrêter après le transfert de --size octets"
|
msgstr "arrêter après le transfert de --size octets"
|
||||||
|
|
||||||
#: src/main/help.c:394
|
#: src/main/help.c:349
|
||||||
msgid "flush cache to disk after every write"
|
msgid "flush cache to disk after every write"
|
||||||
msgstr "vider le cache sur le disque après chaque écriture"
|
msgstr "vider le cache sur le disque après chaque écriture"
|
||||||
|
|
||||||
#: src/main/help.c:397
|
#: src/main/help.c:352
|
||||||
msgid "use direct I/O to bypass cache"
|
msgid "use direct I/O to bypass cache"
|
||||||
msgstr "utiliser les E/S directes pour contourner le cache"
|
msgstr "utiliser les E/S directes pour contourner le cache"
|
||||||
|
|
||||||
#: src/main/help.c:400
|
#: src/main/help.c:355
|
||||||
msgid "discard input instead of writing to output"
|
msgid "discard input instead of writing to output"
|
||||||
msgstr "rejeter l'entrée au lieu de l'écrire vers la sortie"
|
msgstr "rejeter l'entrée au lieu de l'écrire vers la sortie"
|
||||||
|
|
||||||
#: src/main/help.c:403
|
#: src/main/help.c:358
|
||||||
msgid "write all input to FILE before writing to output"
|
msgid "write all input to FILE before writing to output"
|
||||||
msgstr "écrire toute l'entrée vers FICHIER avant de l'écrire vers la sortie"
|
msgstr "écrire toute l'entrée vers FICHIER avant de l'écrire vers la sortie"
|
||||||
|
|
||||||
#: src/main/help.c:405
|
#: src/main/help.c:360
|
||||||
msgid "PID[:FD]"
|
msgid "PID[:FD]"
|
||||||
msgstr "PID[:FD]"
|
msgstr "PID[:FD]"
|
||||||
|
|
||||||
#: src/main/help.c:406
|
#: src/main/help.c:361
|
||||||
msgid "watch file FD opened by process PID"
|
msgid "watch file FD opened by process PID"
|
||||||
msgstr "surveiller le fichier FD ouvert par le processus PID"
|
msgstr "surveiller le fichier FD ouvert par le processus PID"
|
||||||
|
|
||||||
#: src/main/help.c:409
|
#: src/main/help.c:364
|
||||||
msgid "PID"
|
msgid "PID"
|
||||||
msgstr "PID"
|
msgstr "PID"
|
||||||
|
|
||||||
#: src/main/help.c:410
|
#: src/main/help.c:365
|
||||||
msgid "update settings of process PID"
|
msgid "update settings of process PID"
|
||||||
msgstr "mettre à jour la configuration du processus PID"
|
msgstr "mettre à jour la configuration du processus PID"
|
||||||
|
|
||||||
#: src/main/help.c:415
|
#: src/main/help.c:370
|
||||||
msgid "save process ID in FILE"
|
msgid "save process ID in FILE"
|
||||||
msgstr "enregistrer l'ID de processus dans FICHIER"
|
msgstr "enregistrer l'ID de processus dans FICHIER"
|
||||||
|
|
||||||
#: src/main/help.c:418
|
#: src/main/help.c:373
|
||||||
msgid "show this help and exit"
|
msgid "show this help and exit"
|
||||||
msgstr "afficher cette aide puis quitter"
|
msgstr "afficher cette aide puis quitter"
|
||||||
|
|
||||||
#: src/main/help.c:421
|
#: src/main/help.c:376
|
||||||
msgid "show version information and exit"
|
msgid "show version information and exit"
|
||||||
msgstr "afficher la version puis quitter"
|
msgstr "afficher la version puis quitter"
|
||||||
|
|
||||||
#: src/main/help.c:425
|
#: src/main/help.c:380
|
||||||
msgid "write debug logs to FILE"
|
msgid "write debug logs to FILE"
|
||||||
msgstr "écrire les journaux de déboggage vers FICHIER"
|
msgstr "écrire les journaux de déboggage vers FICHIER"
|
||||||
|
|
||||||
#: src/main/help.c:450
|
#: src/main/help.c:406
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Usage: %s [OPTION] [FILE]..."
|
msgid "Usage: %s [OPTION] [FILE]..."
|
||||||
msgstr "Utilisation : %s [OPTIONS] [FICHIER]..."
|
msgstr "Utilisation : %s [OPTIONS] [FICHIER]..."
|
||||||
|
|
||||||
#: src/main/help.c:461
|
#: src/main/help.c:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Concaténer FICHIER(s), ou l'entrée standard, sur la sortie standard avec "
|
"Concaténer FICHIER(s), ou l'entrée standard, sur la sortie standard avec "
|
||||||
"monitorage."
|
"monitorage."
|
||||||
|
|
||||||
#: src/main/help.c:598
|
#: src/main/help.c:555
|
||||||
|
msgid "Supported format sequences:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:569
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please report any bugs to: %s"
|
msgid "Please report any bugs to: %s"
|
||||||
msgstr "SVP rapporter tous bogues à %s"
|
msgstr "SVP rapporter tous bogues à %s"
|
||||||
|
|
||||||
#: src/main/main.c:230
|
#: src/main/main.c:232
|
||||||
msgid "(input)"
|
msgid "(input)"
|
||||||
msgstr "(entrée)"
|
msgstr "(entrée)"
|
||||||
|
|
||||||
#: src/main/main.c:319
|
#: src/main/main.c:328
|
||||||
msgid "state allocation failed"
|
msgid "state allocation failed"
|
||||||
msgstr "échec de l'allocation de mémoire de condition"
|
msgstr "échec de l'allocation de mémoire de condition"
|
||||||
|
|
||||||
@@ -316,41 +328,45 @@ msgstr ""
|
|||||||
msgid "failed to determine size of block device"
|
msgid "failed to determine size of block device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:344
|
#: src/main/options.c:345
|
||||||
msgid "option structure allocation failed"
|
msgid "option structure allocation failed"
|
||||||
msgstr "l'allocation pour la structure d'une option a échoué"
|
msgstr "l'allocation pour la structure d'une option a échoué"
|
||||||
|
|
||||||
#: src/main/options.c:363
|
#: src/main/options.c:364
|
||||||
msgid "option structure argv allocation failed"
|
msgid "option structure argv allocation failed"
|
||||||
msgstr "l'allocation pour la structure de l'option argv a échoué"
|
msgstr "l'allocation pour la structure de l'option argv a échoué"
|
||||||
|
|
||||||
#: src/main/options.c:425
|
#: src/main/options.c:417
|
||||||
|
msgid "numeric value not understood"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/options.c:435
|
||||||
msgid "integer argument expected"
|
msgid "integer argument expected"
|
||||||
msgstr "Valeur entière attendue"
|
msgstr "Valeur entière attendue"
|
||||||
|
|
||||||
#: src/main/options.c:436
|
#: src/main/options.c:447
|
||||||
msgid "numeric argument expected"
|
msgid "numeric argument expected"
|
||||||
msgstr "Valeur numérique attendue"
|
msgstr "Valeur numérique attendue"
|
||||||
|
|
||||||
#: src/main/options.c:447
|
#: src/main/options.c:458
|
||||||
msgid "process ID or pid:fd pair expected"
|
msgid "process ID or pid:fd pair expected"
|
||||||
msgstr "ID de processus ou paire pid:fd attendue"
|
msgstr "ID de processus ou paire pid:fd attendue"
|
||||||
|
|
||||||
#: src/main/options.c:454
|
#: src/main/options.c:465
|
||||||
msgid "invalid process ID"
|
msgid "invalid process ID"
|
||||||
msgstr "ID de processus non valide"
|
msgstr "ID de processus non valide"
|
||||||
|
|
||||||
#: src/main/options.c:679
|
#: src/main/options.c:698
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s --help' for more information."
|
msgid "Try `%s --help' for more information."
|
||||||
msgstr "Essayez `%s --help' pour plus d'informations."
|
msgstr "Essayez `%s --help' pour plus d'informations."
|
||||||
|
|
||||||
#: src/main/options.c:681
|
#: src/main/options.c:700
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s -h' for more information."
|
msgid "Try `%s -h' for more information."
|
||||||
msgstr "Essayez `%s -h' pour plus d'informations."
|
msgstr "Essayez `%s -h' pour plus d'informations."
|
||||||
|
|
||||||
#: src/main/options.c:712
|
#: src/main/options.c:731
|
||||||
msgid ""
|
msgid ""
|
||||||
"cannot use line mode or transfer modifier options when watching file "
|
"cannot use line mode or transfer modifier options when watching file "
|
||||||
"descriptors"
|
"descriptors"
|
||||||
@@ -358,33 +374,33 @@ msgstr ""
|
|||||||
"impossible d'utiliser le mode ligne ou les options de modificateur de "
|
"impossible d'utiliser le mode ligne ou les options de modificateur de "
|
||||||
"transfert lors de la visualisation des descripteurs de fichiers"
|
"transfert lors de la visualisation des descripteurs de fichiers"
|
||||||
|
|
||||||
#: src/main/options.c:721
|
#: src/main/options.c:740
|
||||||
msgid "cannot use cursor positioning when watching file descriptors"
|
msgid "cannot use cursor positioning when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"impossible d'utiliser le positionnement du curseur lors de la visualisation "
|
"impossible d'utiliser le positionnement du curseur lors de la visualisation "
|
||||||
"des descripteurs de fichier"
|
"des descripteurs de fichier"
|
||||||
|
|
||||||
#: src/main/options.c:730
|
#: src/main/options.c:749
|
||||||
msgid "cannot use remote control when watching file descriptors"
|
msgid "cannot use remote control when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"impossible d'utiliser la télécommande lors de la visualisation des "
|
"impossible d'utiliser la télécommande lors de la visualisation des "
|
||||||
"descripteurs de fichiers"
|
"descripteurs de fichiers"
|
||||||
|
|
||||||
#: src/main/options.c:739
|
#: src/main/options.c:758
|
||||||
msgid "cannot transfer files when watching file descriptors"
|
msgid "cannot transfer files when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"impossible de transférer des fichiers lorsque vous regardez des descripteurs "
|
"impossible de transférer des fichiers lorsque vous regardez des descripteurs "
|
||||||
"de fichiers"
|
"de fichiers"
|
||||||
|
|
||||||
#: src/main/options.c:754
|
#: src/main/options.c:773
|
||||||
msgid "not available on systems without /proc/self/fdinfo"
|
msgid "not available on systems without /proc/self/fdinfo"
|
||||||
msgstr "non disponible sur les systèmes sans /proc/self/fdinfo"
|
msgstr "non disponible sur les systèmes sans /proc/self/fdinfo"
|
||||||
|
|
||||||
#: src/main/remote.c:304
|
#: src/main/remote.c:309
|
||||||
msgid "message not received"
|
msgid "message not received"
|
||||||
msgstr "message non reçu"
|
msgstr "message non reçu"
|
||||||
|
|
||||||
#: src/main/remote.c:431
|
#: src/main/remote.c:440
|
||||||
msgid "SA_SIGINFO not supported on this system"
|
msgid "SA_SIGINFO not supported on this system"
|
||||||
msgstr "SA_SIGINFO non pris en charge sur ce système"
|
msgstr "SA_SIGINFO non pris en charge sur ce système"
|
||||||
|
|
||||||
@@ -422,48 +438,18 @@ msgstr "échec de la tentative de verrouillage"
|
|||||||
msgid "failed to open terminal"
|
msgid "failed to open terminal"
|
||||||
msgstr "échec de l'ouverture du terminal"
|
msgstr "échec de l'ouverture du terminal"
|
||||||
|
|
||||||
#: src/pv/display.c:233
|
#: src/pv/display.c:249
|
||||||
msgid "yzafpnum kMGTPEZY"
|
msgid "yzafpnum kMGTPEZY"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/display.c:251
|
#: src/pv/display.c:267
|
||||||
msgid "yzafpnum KMGTPEZY"
|
msgid "yzafpnum KMGTPEZY"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/display.c:681 src/pv/transfer.c:1011
|
#: src/pv/display.c:1067 src/pv/transfer.c:1056
|
||||||
msgid "buffer allocation failed"
|
msgid "buffer allocation failed"
|
||||||
msgstr "échec de l'allocation de mémoire tampon"
|
msgstr "échec de l'allocation de mémoire tampon"
|
||||||
|
|
||||||
#: src/pv/display.c:810
|
|
||||||
msgid "b"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/pv/display.c:813 src/pv/transfer.c:602
|
|
||||||
msgid "B"
|
|
||||||
msgstr "O"
|
|
||||||
|
|
||||||
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
|
|
||||||
#: src/pv/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 "/s"
|
|
||||||
|
|
||||||
#: 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:904 src/pv/display.c:908
|
|
||||||
msgid "ETA"
|
|
||||||
msgstr "ETA"
|
|
||||||
|
|
||||||
#: src/pv/display.c:974
|
|
||||||
msgid "FIN"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/pv/file.c:149
|
#: src/pv/file.c:149
|
||||||
msgid "failed to seek to start of output"
|
msgid "failed to seek to start of output"
|
||||||
msgstr "ne peut pas passer au début de la sortie"
|
msgstr "ne peut pas passer au début de la sortie"
|
||||||
@@ -492,19 +478,50 @@ msgstr "(aucun)"
|
|||||||
msgid "(stdin)"
|
msgid "(stdin)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/loop.c:548
|
#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:93
|
||||||
|
#: src/pv/format/rate.c:32 src/pv/loop.c:551
|
||||||
|
msgid "b/s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36
|
||||||
|
msgid "/s"
|
||||||
|
msgstr "/s"
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36 src/pv/loop.c:551
|
||||||
|
msgid "B/s"
|
||||||
|
msgstr "O/s"
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:31
|
||||||
|
msgid "b"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:35 src/pv/transfer.c:594
|
||||||
|
msgid "B"
|
||||||
|
msgstr "O"
|
||||||
|
|
||||||
|
#: src/pv/format/eta.c:53 src/pv/format/eta.c:57
|
||||||
|
msgid "ETA"
|
||||||
|
msgstr "ETA"
|
||||||
|
|
||||||
|
#: src/pv/format/fineta.c:81
|
||||||
|
msgid "FIN"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/loop.c:550
|
||||||
msgid "rate min/avg/max/mdev"
|
msgid "rate min/avg/max/mdev"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/loop.c:560
|
#: src/pv/loop.c:562
|
||||||
msgid "rate not measured"
|
msgid "rate not measured"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
|
#: src/pv/loop.c:772 src/pv/loop.c:823 src/pv/loop.c:876 src/pv/watchpid.c:99
|
||||||
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
||||||
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
||||||
#: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
|
#: 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
|
#: src/pv/watchpid.c:385 src/pv/watchpid.c:406
|
||||||
msgid "pid"
|
msgid "pid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -512,51 +529,51 @@ msgstr ""
|
|||||||
msgid "history structure allocation failed"
|
msgid "history structure allocation failed"
|
||||||
msgstr "l'allocation de la structure de l'historique a échoué"
|
msgstr "l'allocation de la structure de l'historique a échoué"
|
||||||
|
|
||||||
#: src/pv/state.c:572 src/pv/state.c:583
|
#: src/pv/state.c:593 src/pv/state.c:604
|
||||||
msgid "file list allocation failed"
|
msgid "file list allocation failed"
|
||||||
msgstr "échec de l'allocation de la liste de fichiers"
|
msgstr "échec de l'allocation de la liste de fichiers"
|
||||||
|
|
||||||
#: src/pv/transfer.c:464
|
#: src/pv/transfer.c:463
|
||||||
msgid "read failed"
|
msgid "read failed"
|
||||||
msgstr "la lecture a échoué"
|
msgstr "la lecture a échoué"
|
||||||
|
|
||||||
#: src/pv/transfer.c:487
|
#: src/pv/transfer.c:479
|
||||||
msgid "warning: read errors detected"
|
msgid "warning: read errors detected"
|
||||||
msgstr "avertissement : erreurs de lecture détectées"
|
msgstr "avertissement : erreurs de lecture détectées"
|
||||||
|
|
||||||
#: src/pv/transfer.c:503
|
#: src/pv/transfer.c:495
|
||||||
msgid "file is not seekable"
|
msgid "file is not seekable"
|
||||||
msgstr "ne peut pas se déplacer dans le fichier"
|
msgstr "ne peut pas se déplacer dans le fichier"
|
||||||
|
|
||||||
#: src/pv/transfer.c:581
|
#: src/pv/transfer.c:573
|
||||||
msgid "failed to seek past error"
|
msgid "failed to seek past error"
|
||||||
msgstr "n'a pas réussi à dépasser l'erreur"
|
msgstr "n'a pas réussi à dépasser l'erreur"
|
||||||
|
|
||||||
#: src/pv/transfer.c:601
|
#: src/pv/transfer.c:593
|
||||||
msgid "skipped past read error"
|
msgid "skipped past read error"
|
||||||
msgstr "erreur de lecture dépassée"
|
msgstr "erreur de lecture dépassée"
|
||||||
|
|
||||||
#: src/pv/transfer.c:642
|
#: src/pv/transfer.c:634
|
||||||
msgid "no transfer buffer allocated"
|
msgid "no transfer buffer allocated"
|
||||||
msgstr "aucun tampon de transfert alloué"
|
msgstr "aucun tampon de transfert alloué"
|
||||||
|
|
||||||
#: src/pv/transfer.c:684
|
#: src/pv/transfer.c:676
|
||||||
msgid "failed to set interval timer"
|
msgid "failed to set interval timer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:710
|
#: src/pv/transfer.c:702
|
||||||
msgid "failed to clear interval timer"
|
msgid "failed to clear interval timer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:740
|
#: src/pv/transfer.c:744
|
||||||
msgid "line position buffer allocation failed"
|
msgid "line position buffer allocation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:872
|
#: src/pv/transfer.c:917
|
||||||
msgid "write failed"
|
msgid "write failed"
|
||||||
msgstr "l'écriture a échoué"
|
msgstr "l'écriture a échoué"
|
||||||
|
|
||||||
#: src/pv/transfer.c:1109
|
#: src/pv/transfer.c:1154
|
||||||
msgid "select call failed"
|
msgid "select call failed"
|
||||||
msgstr "l'appel de sélection a échoué"
|
msgstr "l'appel de sélection a échoué"
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||||
"POT-Creation-Date: 2024-12-02 17:56+0000\n"
|
"POT-Creation-Date: 2024-12-22 12:09+0000\n"
|
||||||
"PO-Revision-Date: 2024-10-20 14:07+0000\n"
|
"PO-Revision-Date: 2024-10-20 14:07+0000\n"
|
||||||
"Last-Translator: coralpink <coralpink@users.noreply.translate.codeberg.org>\n"
|
"Last-Translator: coralpink <coralpink@users.noreply.translate.codeberg.org>\n"
|
||||||
"Language-Team: Polish <https://translate.codeberg.org/projects/pv/pv/pl/>\n"
|
"Language-Team: Polish <https://translate.codeberg.org/projects/pv/pv/pl/>\n"
|
||||||
@@ -18,271 +18,283 @@ msgstr ""
|
|||||||
"|| n%100>=20) ? 1 : 2;\n"
|
"|| n%100>=20) ? 1 : 2;\n"
|
||||||
"X-Generator: Weblate 5.7.2\n"
|
"X-Generator: Weblate 5.7.2\n"
|
||||||
|
|
||||||
#: src/main/help.c:284
|
#: src/main/help.c:236
|
||||||
msgid "show progress bar"
|
msgid "show progress bar"
|
||||||
msgstr "pokaż pasek postępu"
|
msgstr "pokaż pasek postępu"
|
||||||
|
|
||||||
#: src/main/help.c:287
|
#: src/main/help.c:239
|
||||||
msgid "show elapsed time"
|
msgid "show elapsed time"
|
||||||
msgstr "pokaż upływający czas"
|
msgstr "pokaż upływający czas"
|
||||||
|
|
||||||
#: src/main/help.c:290
|
#: src/main/help.c:242
|
||||||
msgid "show estimated time of arrival (completion)"
|
msgid "show estimated time of arrival (completion)"
|
||||||
msgstr "pokaż szacowany czas ukończenia"
|
msgstr "pokaż szacowany czas ukończenia"
|
||||||
|
|
||||||
#: src/main/help.c:293
|
#: src/main/help.c:245
|
||||||
msgid "show absolute estimated time of arrival (completion)"
|
msgid "show absolute estimated time of arrival (completion)"
|
||||||
msgstr "pokaż bezwzględny szacowany czas ukończenia"
|
msgstr "pokaż bezwzględny szacowany czas ukończenia"
|
||||||
|
|
||||||
#: src/main/help.c:296
|
#: src/main/help.c:248
|
||||||
msgid "show data transfer rate counter"
|
msgid "show data transfer rate counter"
|
||||||
msgstr "pokaż licznik prędkości przesyłania"
|
msgstr "pokaż licznik prędkości przesyłania"
|
||||||
|
|
||||||
#: src/main/help.c:299
|
#: src/main/help.c:251
|
||||||
msgid "show data transfer average rate counter"
|
msgid "show data transfer average rate counter"
|
||||||
msgstr "pokaż licznik uśrednionej prędkości przesyłania"
|
msgstr "pokaż licznik uśrednionej prędkości przesyłania"
|
||||||
|
|
||||||
#: src/main/help.c:302
|
#: src/main/help.c:254
|
||||||
msgid "show number of bytes transferred"
|
msgid "show number of bytes transferred"
|
||||||
msgstr "pokaż ilość przesłanych bajtów"
|
msgstr "pokaż ilość przesłanych bajtów"
|
||||||
|
|
||||||
#: src/main/help.c:305
|
#: src/main/help.c:257
|
||||||
msgid "show percentage of transfer buffer in use"
|
msgid "show percentage of transfer buffer in use"
|
||||||
msgstr "pokaż procentowe użycie bufora transferu"
|
msgstr "pokaż procentowe użycie bufora transferu"
|
||||||
|
|
||||||
#: src/main/help.c:307
|
#: src/main/help.c:259
|
||||||
msgid "NUM"
|
msgid "NUM"
|
||||||
msgstr "LICZBA"
|
msgstr "LICZBA"
|
||||||
|
|
||||||
#: src/main/help.c:308
|
#: src/main/help.c:260
|
||||||
msgid "show NUM bytes last written"
|
msgid "show NUM bytes last written"
|
||||||
msgstr "pokaż ostatnie LICZBA przesłanych bajtów"
|
msgstr "pokaż ostatnie LICZBA przesłanych bajtów"
|
||||||
|
|
||||||
#: src/main/help.c:310
|
#: src/main/help.c:262
|
||||||
msgid "FORMAT"
|
msgid "FORMAT"
|
||||||
msgstr "FORMAT"
|
msgstr "FORMAT"
|
||||||
|
|
||||||
#: src/main/help.c:311
|
#: src/main/help.c:263
|
||||||
msgid "set output format to FORMAT"
|
msgid "set output format to FORMAT"
|
||||||
msgstr "ustaw FORMAT jako format wyjściowy"
|
msgstr "ustaw FORMAT jako format wyjściowy"
|
||||||
|
|
||||||
#: src/main/help.c:314
|
#: src/main/help.c:266
|
||||||
msgid "output percentages, not visual information"
|
msgid "output percentages, not visual information"
|
||||||
msgstr "wyświetl wyjście procentowo, bez graficznej prezentacji"
|
msgstr "wyświetl wyjście procentowo, bez graficznej prezentacji"
|
||||||
|
|
||||||
#: src/main/help.c:317
|
#: src/main/help.c:269
|
||||||
msgid "do not output any transfer information at all"
|
msgid "do not output any transfer information at all"
|
||||||
msgstr "nie wyświetlaj żadnych informacji o przesyłaniu"
|
msgstr "nie wyświetlaj żadnych informacji o przesyłaniu"
|
||||||
|
|
||||||
#: src/main/help.c:321
|
#: src/main/help.c:273
|
||||||
msgid "show number of bits transferred"
|
msgid "show number of bits transferred"
|
||||||
msgstr "pokaż ilość przesłanych bitów"
|
msgstr "pokaż ilość przesłanych bitów"
|
||||||
|
|
||||||
#: src/main/help.c:324
|
#: src/main/help.c:276
|
||||||
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
||||||
msgstr "traktuj przyrostki jako wielokrotności 1000 zamiast 1024"
|
msgstr "traktuj przyrostki jako wielokrotności 1000 zamiast 1024"
|
||||||
|
|
||||||
#: src/main/help.c:327
|
#: src/main/help.c:279
|
||||||
msgid "display nothing until first byte transferred"
|
msgid "display nothing until first byte transferred"
|
||||||
msgstr "nie wyświetlaj nic aż do pierwszego przesłanego bajtu"
|
msgstr "nie wyświetlaj nic aż do pierwszego przesłanego bajtu"
|
||||||
|
|
||||||
#: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
|
#: src/main/help.c:281 src/main/help.c:296 src/main/help.c:299
|
||||||
msgid "SEC"
|
msgid "SEC"
|
||||||
msgstr "SEKUNDY"
|
msgstr "SEKUNDY"
|
||||||
|
|
||||||
#: src/main/help.c:330
|
#: src/main/help.c:282
|
||||||
msgid "display nothing until SEC seconds have passed"
|
msgid "display nothing until SEC seconds have passed"
|
||||||
msgstr "nie wyświetlaj nic do momentu upłynięcia SEKUNDY sekund"
|
msgstr "nie wyświetlaj nic do momentu upłynięcia SEKUNDY sekund"
|
||||||
|
|
||||||
#: src/main/help.c:332
|
#: src/main/help.c:284
|
||||||
msgid "SIZE"
|
msgid "SIZE"
|
||||||
msgstr "ROZMIAR"
|
msgstr "ROZMIAR"
|
||||||
|
|
||||||
#: src/main/help.c:333
|
#: src/main/help.c:285
|
||||||
msgid "set estimated data size to SIZE bytes"
|
msgid "set estimated data size to SIZE bytes"
|
||||||
msgstr "ustaw oczekiwany rozmiar danych na ROZMIAR bajtów"
|
msgstr "ustaw oczekiwany rozmiar danych na ROZMIAR bajtów"
|
||||||
|
|
||||||
#: src/main/help.c:336
|
#: src/main/help.c:288
|
||||||
msgid "if size unknown, show rate vs max rate"
|
msgid "if size unknown, show rate vs max rate"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"jeśli rozmiar nie jest znany, wyświetl zestawienie prędkości do maksymalnej "
|
"jeśli rozmiar nie jest znany, wyświetl zestawienie prędkości do maksymalnej "
|
||||||
"prędkości"
|
"prędkości"
|
||||||
|
|
||||||
#: src/main/help.c:339
|
#: src/main/help.c:291
|
||||||
msgid "count lines instead of bytes"
|
msgid "count lines instead of bytes"
|
||||||
msgstr "zliczaj linie zamiast bajty"
|
msgstr "zliczaj linie zamiast bajty"
|
||||||
|
|
||||||
#: src/main/help.c:342
|
#: src/main/help.c:294
|
||||||
msgid "lines are null-terminated"
|
msgid "lines are null-terminated"
|
||||||
msgstr "linie są zakończone znakiem NUL"
|
msgstr "linie są zakończone znakiem NUL"
|
||||||
|
|
||||||
#: src/main/help.c:345
|
#: src/main/help.c:297
|
||||||
msgid "update every SEC seconds"
|
msgid "update every SEC seconds"
|
||||||
msgstr "aktualizuj co każde SEKUNDY sekund"
|
msgstr "aktualizuj co każde SEKUNDY sekund"
|
||||||
|
|
||||||
#: src/main/help.c:348
|
#: src/main/help.c:300
|
||||||
msgid "compute average rate over past SEC seconds (default 30s)"
|
msgid "compute average rate over past SEC seconds (default 30s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"oblicz średnią prędkość transferu na podstawie poprzednich SEKUNDY sekund "
|
"oblicz średnią prędkość transferu na podstawie poprzednich SEKUNDY sekund "
|
||||||
"(domyślnie 30 s)"
|
"(domyślnie 30 s)"
|
||||||
|
|
||||||
#: src/main/help.c:350
|
#: src/main/help.c:302
|
||||||
msgid "WIDTH"
|
msgid "WIDTH"
|
||||||
msgstr "SZEROKOŚĆ"
|
msgstr "SZEROKOŚĆ"
|
||||||
|
|
||||||
#: src/main/help.c:351
|
#: src/main/help.c:303
|
||||||
msgid "assume terminal is WIDTH characters wide"
|
msgid "assume terminal is WIDTH characters wide"
|
||||||
msgstr "przyjmij, że terminal ma szerokość SZEROKOŚĆ znaków"
|
msgstr "przyjmij, że terminal ma szerokość SZEROKOŚĆ znaków"
|
||||||
|
|
||||||
#: src/main/help.c:353
|
#: src/main/help.c:305
|
||||||
msgid "HEIGHT"
|
msgid "HEIGHT"
|
||||||
msgstr "WYSOKOŚĆ"
|
msgstr "WYSOKOŚĆ"
|
||||||
|
|
||||||
#: src/main/help.c:354
|
#: src/main/help.c:306
|
||||||
msgid "assume terminal is HEIGHT rows high"
|
msgid "assume terminal is HEIGHT rows high"
|
||||||
msgstr "przyjmij, że terminal ma wysokość WYSOKOŚĆ linii"
|
msgstr "przyjmij, że terminal ma wysokość WYSOKOŚĆ linii"
|
||||||
|
|
||||||
#: src/main/help.c:356
|
#: src/main/help.c:308
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr "NAZWA"
|
msgstr "NAZWA"
|
||||||
|
|
||||||
#: src/main/help.c:357
|
#: src/main/help.c:309
|
||||||
msgid "prefix visual information with NAME"
|
msgid "prefix visual information with NAME"
|
||||||
msgstr "poprzedź informacje prefiksem NAZWA"
|
msgstr "poprzedź informacje prefiksem NAZWA"
|
||||||
|
|
||||||
#: src/main/help.c:359
|
#: src/main/help.c:311
|
||||||
|
msgid "STYLE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:312
|
||||||
|
msgid "set default bar style to NAME"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:314
|
||||||
msgid "SPEC"
|
msgid "SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:360
|
#: src/main/help.c:315
|
||||||
msgid "also send progress to SPEC"
|
msgid "also send progress to SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:363
|
#: src/main/help.c:318
|
||||||
msgid "output transfer statistics at the end"
|
msgid "output transfer statistics at the end"
|
||||||
msgstr "wyświetl na końcu statystyki transferu"
|
msgstr "wyświetl na końcu statystyki transferu"
|
||||||
|
|
||||||
#: src/main/help.c:366
|
#: src/main/help.c:321
|
||||||
msgid "output even if standard error is not a terminal"
|
msgid "output even if standard error is not a terminal"
|
||||||
msgstr "pokaż wyjście nawet standardowe wyjście błędu nie jest terminalem"
|
msgstr "pokaż wyjście nawet standardowe wyjście błędu nie jest terminalem"
|
||||||
|
|
||||||
#: src/main/help.c:369
|
#: src/main/help.c:324
|
||||||
msgid "use cursor positioning escape sequences"
|
msgid "use cursor positioning escape sequences"
|
||||||
msgstr "używaj znaków ucieczki do pozycjonowania kursora"
|
msgstr "używaj znaków ucieczki do pozycjonowania kursora"
|
||||||
|
|
||||||
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
|
#: src/main/help.c:327 src/main/help.c:357 src/main/help.c:369
|
||||||
#: src/main/help.c:424
|
#: src/main/help.c:379
|
||||||
msgid "FILE"
|
msgid "FILE"
|
||||||
msgstr "PLIK"
|
msgstr "PLIK"
|
||||||
|
|
||||||
#: src/main/help.c:373
|
#: src/main/help.c:328
|
||||||
msgid "write output to FILE instead of stdout"
|
msgid "write output to FILE instead of stdout"
|
||||||
msgstr "zapisz wyjście do PLIK zamiast do wyjścia standardowego"
|
msgstr "zapisz wyjście do PLIK zamiast do wyjścia standardowego"
|
||||||
|
|
||||||
#: src/main/help.c:375
|
#: src/main/help.c:330
|
||||||
msgid "RATE"
|
msgid "RATE"
|
||||||
msgstr "PRĘDKOŚĆ"
|
msgstr "PRĘDKOŚĆ"
|
||||||
|
|
||||||
#: src/main/help.c:376
|
#: src/main/help.c:331
|
||||||
msgid "limit transfer to RATE bytes per second"
|
msgid "limit transfer to RATE bytes per second"
|
||||||
msgstr "ogranicz przesyłane dane do PRĘDKOŚĆ bajtów na sekundę"
|
msgstr "ogranicz przesyłane dane do PRĘDKOŚĆ bajtów na sekundę"
|
||||||
|
|
||||||
#: src/main/help.c:378 src/main/help.c:387
|
#: src/main/help.c:333 src/main/help.c:342
|
||||||
msgid "BYTES"
|
msgid "BYTES"
|
||||||
msgstr "BAJTY"
|
msgstr "BAJTY"
|
||||||
|
|
||||||
#: src/main/help.c:379
|
#: src/main/help.c:334
|
||||||
msgid "use a buffer size of BYTES"
|
msgid "use a buffer size of BYTES"
|
||||||
msgstr "użyj bufora o rozmiarze BAJTY"
|
msgstr "użyj bufora o rozmiarze BAJTY"
|
||||||
|
|
||||||
#: src/main/help.c:382
|
#: src/main/help.c:337
|
||||||
msgid "never use splice(), always use read/write"
|
msgid "never use splice(), always use read/write"
|
||||||
msgstr "nigdy nie używaj splice(), zawsze używaj read/write"
|
msgstr "nigdy nie używaj splice(), zawsze używaj read/write"
|
||||||
|
|
||||||
#: src/main/help.c:385
|
#: src/main/help.c:340
|
||||||
msgid "skip read errors in input"
|
msgid "skip read errors in input"
|
||||||
msgstr "pomijaj błędy odczytu wejścia"
|
msgstr "pomijaj błędy odczytu wejścia"
|
||||||
|
|
||||||
#: src/main/help.c:388
|
#: src/main/help.c:343
|
||||||
msgid "skip errors in BYTES blocks at a time"
|
msgid "skip errors in BYTES blocks at a time"
|
||||||
msgstr "pomijaj błędy w blokach po BAJTY bajtów na raz"
|
msgstr "pomijaj błędy w blokach po BAJTY bajtów na raz"
|
||||||
|
|
||||||
#: src/main/help.c:391
|
#: src/main/help.c:346
|
||||||
msgid "stop after --size bytes have been transferred"
|
msgid "stop after --size bytes have been transferred"
|
||||||
msgstr "zakończ po przesłaniu --size bajtów"
|
msgstr "zakończ po przesłaniu --size bajtów"
|
||||||
|
|
||||||
#: src/main/help.c:394
|
#: src/main/help.c:349
|
||||||
msgid "flush cache to disk after every write"
|
msgid "flush cache to disk after every write"
|
||||||
msgstr "wymuś zapis pamięci podręcznej na dysk po każdym zapisie"
|
msgstr "wymuś zapis pamięci podręcznej na dysk po każdym zapisie"
|
||||||
|
|
||||||
#: src/main/help.c:397
|
#: src/main/help.c:352
|
||||||
msgid "use direct I/O to bypass cache"
|
msgid "use direct I/O to bypass cache"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"użyj bezpośredniego wejścia/wyjścia celem pominięcia pamięci podręcznej"
|
"użyj bezpośredniego wejścia/wyjścia celem pominięcia pamięci podręcznej"
|
||||||
|
|
||||||
#: src/main/help.c:400
|
#: src/main/help.c:355
|
||||||
msgid "discard input instead of writing to output"
|
msgid "discard input instead of writing to output"
|
||||||
msgstr "zignoruj dane wejściowe zamiast wyświetlić je na wyjściu standardowym"
|
msgstr "zignoruj dane wejściowe zamiast wyświetlić je na wyjściu standardowym"
|
||||||
|
|
||||||
#: src/main/help.c:403
|
#: src/main/help.c:358
|
||||||
msgid "write all input to FILE before writing to output"
|
msgid "write all input to FILE before writing to output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"zapisz wszystkie dane wejściowe do PLIK przed wyświetleniem ich na wyjściu"
|
"zapisz wszystkie dane wejściowe do PLIK przed wyświetleniem ich na wyjściu"
|
||||||
|
|
||||||
#: src/main/help.c:405
|
#: src/main/help.c:360
|
||||||
msgid "PID[:FD]"
|
msgid "PID[:FD]"
|
||||||
msgstr "PID[:FD]"
|
msgstr "PID[:FD]"
|
||||||
|
|
||||||
#: src/main/help.c:406
|
#: src/main/help.c:361
|
||||||
msgid "watch file FD opened by process PID"
|
msgid "watch file FD opened by process PID"
|
||||||
msgstr "obserwuj plik FD otworzony przez proces PID"
|
msgstr "obserwuj plik FD otworzony przez proces PID"
|
||||||
|
|
||||||
#: src/main/help.c:409
|
#: src/main/help.c:364
|
||||||
msgid "PID"
|
msgid "PID"
|
||||||
msgstr "PID"
|
msgstr "PID"
|
||||||
|
|
||||||
#: src/main/help.c:410
|
#: src/main/help.c:365
|
||||||
msgid "update settings of process PID"
|
msgid "update settings of process PID"
|
||||||
msgstr "zaktualizuj ustawienia procesu PID"
|
msgstr "zaktualizuj ustawienia procesu PID"
|
||||||
|
|
||||||
#: src/main/help.c:415
|
#: src/main/help.c:370
|
||||||
msgid "save process ID in FILE"
|
msgid "save process ID in FILE"
|
||||||
msgstr "zapisz ID procesu do PLIK"
|
msgstr "zapisz ID procesu do PLIK"
|
||||||
|
|
||||||
#: src/main/help.c:418
|
#: src/main/help.c:373
|
||||||
msgid "show this help and exit"
|
msgid "show this help and exit"
|
||||||
msgstr "wyświetl te informacje z pomocą i wyjdź"
|
msgstr "wyświetl te informacje z pomocą i wyjdź"
|
||||||
|
|
||||||
#: src/main/help.c:421
|
#: src/main/help.c:376
|
||||||
msgid "show version information and exit"
|
msgid "show version information and exit"
|
||||||
msgstr "wyświetl informacje o wersji i wyjdź"
|
msgstr "wyświetl informacje o wersji i wyjdź"
|
||||||
|
|
||||||
#: src/main/help.c:425
|
#: src/main/help.c:380
|
||||||
msgid "write debug logs to FILE"
|
msgid "write debug logs to FILE"
|
||||||
msgstr "zapisz logi debugujące do PLIK"
|
msgstr "zapisz logi debugujące do PLIK"
|
||||||
|
|
||||||
#: src/main/help.c:450
|
#: src/main/help.c:406
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Usage: %s [OPTION] [FILE]..."
|
msgid "Usage: %s [OPTION] [FILE]..."
|
||||||
msgstr "Sposób użycia: %s [OPCJA] [PLIK]..."
|
msgstr "Sposób użycia: %s [OPCJA] [PLIK]..."
|
||||||
|
|
||||||
#: src/main/help.c:461
|
#: src/main/help.c:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Łączenie PLIK(ów) lub wejścia standardowego, do wyjścia standardowego z "
|
"Łączenie PLIK(ów) lub wejścia standardowego, do wyjścia standardowego z "
|
||||||
"monitoringiem."
|
"monitoringiem."
|
||||||
|
|
||||||
#: src/main/help.c:598
|
#: src/main/help.c:555
|
||||||
|
msgid "Supported format sequences:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:569
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please report any bugs to: %s"
|
msgid "Please report any bugs to: %s"
|
||||||
msgstr "Proszę przesyłać zgłoszenia błędów do %s"
|
msgstr "Proszę przesyłać zgłoszenia błędów do %s"
|
||||||
|
|
||||||
#: src/main/main.c:230
|
#: src/main/main.c:232
|
||||||
msgid "(input)"
|
msgid "(input)"
|
||||||
msgstr "(wejście)"
|
msgstr "(wejście)"
|
||||||
|
|
||||||
#: src/main/main.c:319
|
#: src/main/main.c:328
|
||||||
msgid "state allocation failed"
|
msgid "state allocation failed"
|
||||||
msgstr "alokacja stanu programu nie powiodła się"
|
msgstr "alokacja stanu programu nie powiodła się"
|
||||||
|
|
||||||
@@ -310,41 +322,45 @@ msgstr "nie udało się otworzyć urządzenia blokowego"
|
|||||||
msgid "failed to determine size of block device"
|
msgid "failed to determine size of block device"
|
||||||
msgstr "nie udało się ustalić rozmiaru urządzenia blokowego"
|
msgstr "nie udało się ustalić rozmiaru urządzenia blokowego"
|
||||||
|
|
||||||
#: src/main/options.c:344
|
#: src/main/options.c:345
|
||||||
msgid "option structure allocation failed"
|
msgid "option structure allocation failed"
|
||||||
msgstr "nie udało się zaalokować struktur opcji"
|
msgstr "nie udało się zaalokować struktur opcji"
|
||||||
|
|
||||||
#: src/main/options.c:363
|
#: src/main/options.c:364
|
||||||
msgid "option structure argv allocation failed"
|
msgid "option structure argv allocation failed"
|
||||||
msgstr "nie udało się zaalokować struktur opcji argv"
|
msgstr "nie udało się zaalokować struktur opcji argv"
|
||||||
|
|
||||||
#: src/main/options.c:425
|
#: src/main/options.c:417
|
||||||
|
msgid "numeric value not understood"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/options.c:435
|
||||||
msgid "integer argument expected"
|
msgid "integer argument expected"
|
||||||
msgstr "oczekiwany argument typu liczby całkowitej"
|
msgstr "oczekiwany argument typu liczby całkowitej"
|
||||||
|
|
||||||
#: src/main/options.c:436
|
#: src/main/options.c:447
|
||||||
msgid "numeric argument expected"
|
msgid "numeric argument expected"
|
||||||
msgstr "oczekiwany argument liczbowy"
|
msgstr "oczekiwany argument liczbowy"
|
||||||
|
|
||||||
#: src/main/options.c:447
|
#: src/main/options.c:458
|
||||||
msgid "process ID or pid:fd pair expected"
|
msgid "process ID or pid:fd pair expected"
|
||||||
msgstr "oczekiwany proces ID lub para PID:FD"
|
msgstr "oczekiwany proces ID lub para PID:FD"
|
||||||
|
|
||||||
#: src/main/options.c:454
|
#: src/main/options.c:465
|
||||||
msgid "invalid process ID"
|
msgid "invalid process ID"
|
||||||
msgstr "niepoprawne ID procesu"
|
msgstr "niepoprawne ID procesu"
|
||||||
|
|
||||||
#: src/main/options.c:679
|
#: src/main/options.c:698
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s --help' for more information."
|
msgid "Try `%s --help' for more information."
|
||||||
msgstr "Spróbuj `%s --help' by uzyskać więcej informacji."
|
msgstr "Spróbuj `%s --help' by uzyskać więcej informacji."
|
||||||
|
|
||||||
#: src/main/options.c:681
|
#: src/main/options.c:700
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s -h' for more information."
|
msgid "Try `%s -h' for more information."
|
||||||
msgstr "Spróbuj `%s -h' by uzyskać więcej informacji."
|
msgstr "Spróbuj `%s -h' by uzyskać więcej informacji."
|
||||||
|
|
||||||
#: src/main/options.c:712
|
#: src/main/options.c:731
|
||||||
msgid ""
|
msgid ""
|
||||||
"cannot use line mode or transfer modifier options when watching file "
|
"cannot use line mode or transfer modifier options when watching file "
|
||||||
"descriptors"
|
"descriptors"
|
||||||
@@ -352,31 +368,31 @@ msgstr ""
|
|||||||
"nie można użyć trybu zliczania linii lub opcji modyfikujących przesył "
|
"nie można użyć trybu zliczania linii lub opcji modyfikujących przesył "
|
||||||
"łącznie z opcją obserwowania deskryptorów plików"
|
"łącznie z opcją obserwowania deskryptorów plików"
|
||||||
|
|
||||||
#: src/main/options.c:721
|
#: src/main/options.c:740
|
||||||
msgid "cannot use cursor positioning when watching file descriptors"
|
msgid "cannot use cursor positioning when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"nie można użyć pozycjonowania kursora łącznie z opcją obserwowania "
|
"nie można użyć pozycjonowania kursora łącznie z opcją obserwowania "
|
||||||
"deskryptorów plików"
|
"deskryptorów plików"
|
||||||
|
|
||||||
#: src/main/options.c:730
|
#: src/main/options.c:749
|
||||||
msgid "cannot use remote control when watching file descriptors"
|
msgid "cannot use remote control when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"nie można użyć opcji zaktualizowania ustawień procesu łącznie z opcją "
|
"nie można użyć opcji zaktualizowania ustawień procesu łącznie z opcją "
|
||||||
"obserwowania deskryptorów plików"
|
"obserwowania deskryptorów plików"
|
||||||
|
|
||||||
#: src/main/options.c:739
|
#: src/main/options.c:758
|
||||||
msgid "cannot transfer files when watching file descriptors"
|
msgid "cannot transfer files when watching file descriptors"
|
||||||
msgstr "nie można przesyłać plików z opcją obserwowania deskryptorów plików"
|
msgstr "nie można przesyłać plików z opcją obserwowania deskryptorów plików"
|
||||||
|
|
||||||
#: src/main/options.c:754
|
#: src/main/options.c:773
|
||||||
msgid "not available on systems without /proc/self/fdinfo"
|
msgid "not available on systems without /proc/self/fdinfo"
|
||||||
msgstr "niedostępne na systemach bez /proc/self/fdinfo"
|
msgstr "niedostępne na systemach bez /proc/self/fdinfo"
|
||||||
|
|
||||||
#: src/main/remote.c:304
|
#: src/main/remote.c:309
|
||||||
msgid "message not received"
|
msgid "message not received"
|
||||||
msgstr "wiadomość nieodebrana"
|
msgstr "wiadomość nieodebrana"
|
||||||
|
|
||||||
#: src/main/remote.c:431
|
#: src/main/remote.c:440
|
||||||
msgid "SA_SIGINFO not supported on this system"
|
msgid "SA_SIGINFO not supported on this system"
|
||||||
msgstr "SA_SIGINFO nie jest wspierane na tym systemie"
|
msgstr "SA_SIGINFO nie jest wspierane na tym systemie"
|
||||||
|
|
||||||
@@ -413,48 +429,18 @@ msgstr "blokada zasobów nie powiodła się"
|
|||||||
msgid "failed to open terminal"
|
msgid "failed to open terminal"
|
||||||
msgstr "nie udało się otworzyć terminala"
|
msgstr "nie udało się otworzyć terminala"
|
||||||
|
|
||||||
#: src/pv/display.c:233
|
#: src/pv/display.c:249
|
||||||
msgid "yzafpnum kMGTPEZY"
|
msgid "yzafpnum kMGTPEZY"
|
||||||
msgstr "yzafpnum kMGTPEZY"
|
msgstr "yzafpnum kMGTPEZY"
|
||||||
|
|
||||||
#: src/pv/display.c:251
|
#: src/pv/display.c:267
|
||||||
msgid "yzafpnum KMGTPEZY"
|
msgid "yzafpnum KMGTPEZY"
|
||||||
msgstr "yzafpnum KMGTPEZY"
|
msgstr "yzafpnum KMGTPEZY"
|
||||||
|
|
||||||
#: src/pv/display.c:681 src/pv/transfer.c:1011
|
#: src/pv/display.c:1067 src/pv/transfer.c:1056
|
||||||
msgid "buffer allocation failed"
|
msgid "buffer allocation failed"
|
||||||
msgstr "nie udało się zaalokować bufora"
|
msgstr "nie udało się zaalokować bufora"
|
||||||
|
|
||||||
#: src/pv/display.c:810
|
|
||||||
msgid "b"
|
|
||||||
msgstr "b"
|
|
||||||
|
|
||||||
#: src/pv/display.c:813 src/pv/transfer.c:602
|
|
||||||
msgid "B"
|
|
||||||
msgstr "B"
|
|
||||||
|
|
||||||
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
|
|
||||||
#: src/pv/loop.c:549
|
|
||||||
msgid "b/s"
|
|
||||||
msgstr "b/s"
|
|
||||||
|
|
||||||
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
|
|
||||||
msgid "/s"
|
|
||||||
msgstr "/s"
|
|
||||||
|
|
||||||
#: 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:904 src/pv/display.c:908
|
|
||||||
msgid "ETA"
|
|
||||||
msgstr "ETA"
|
|
||||||
|
|
||||||
#: src/pv/display.c:974
|
|
||||||
msgid "FIN"
|
|
||||||
msgstr "FIN"
|
|
||||||
|
|
||||||
#: src/pv/file.c:149
|
#: src/pv/file.c:149
|
||||||
msgid "failed to seek to start of output"
|
msgid "failed to seek to start of output"
|
||||||
msgstr "nie udało się przewinąć wyjścia do początku"
|
msgstr "nie udało się przewinąć wyjścia do początku"
|
||||||
@@ -484,19 +470,50 @@ msgstr "(brak)"
|
|||||||
msgid "(stdin)"
|
msgid "(stdin)"
|
||||||
msgstr "(stdin)"
|
msgstr "(stdin)"
|
||||||
|
|
||||||
#: src/pv/loop.c:548
|
#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:93
|
||||||
|
#: src/pv/format/rate.c:32 src/pv/loop.c:551
|
||||||
|
msgid "b/s"
|
||||||
|
msgstr "b/s"
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36
|
||||||
|
msgid "/s"
|
||||||
|
msgstr "/s"
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36 src/pv/loop.c:551
|
||||||
|
msgid "B/s"
|
||||||
|
msgstr "B/s"
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:31
|
||||||
|
msgid "b"
|
||||||
|
msgstr "b"
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:35 src/pv/transfer.c:594
|
||||||
|
msgid "B"
|
||||||
|
msgstr "B"
|
||||||
|
|
||||||
|
#: src/pv/format/eta.c:53 src/pv/format/eta.c:57
|
||||||
|
msgid "ETA"
|
||||||
|
msgstr "ETA"
|
||||||
|
|
||||||
|
#: src/pv/format/fineta.c:81
|
||||||
|
msgid "FIN"
|
||||||
|
msgstr "FIN"
|
||||||
|
|
||||||
|
#: src/pv/loop.c:550
|
||||||
msgid "rate min/avg/max/mdev"
|
msgid "rate min/avg/max/mdev"
|
||||||
msgstr "prędkość min/śr/max/odch"
|
msgstr "prędkość min/śr/max/odch"
|
||||||
|
|
||||||
#: src/pv/loop.c:560
|
#: src/pv/loop.c:562
|
||||||
msgid "rate not measured"
|
msgid "rate not measured"
|
||||||
msgstr "prędkość niezmierzona"
|
msgstr "prędkość niezmierzona"
|
||||||
|
|
||||||
#: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
|
#: src/pv/loop.c:772 src/pv/loop.c:823 src/pv/loop.c:876 src/pv/watchpid.c:99
|
||||||
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
||||||
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
||||||
#: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
|
#: 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
|
#: src/pv/watchpid.c:385 src/pv/watchpid.c:406
|
||||||
msgid "pid"
|
msgid "pid"
|
||||||
msgstr "pid"
|
msgstr "pid"
|
||||||
|
|
||||||
@@ -504,52 +521,52 @@ msgstr "pid"
|
|||||||
msgid "history structure allocation failed"
|
msgid "history structure allocation failed"
|
||||||
msgstr "nie udało się zaalokować struktury historii"
|
msgstr "nie udało się zaalokować struktury historii"
|
||||||
|
|
||||||
#: src/pv/state.c:572 src/pv/state.c:583
|
#: src/pv/state.c:593 src/pv/state.c:604
|
||||||
msgid "file list allocation failed"
|
msgid "file list allocation failed"
|
||||||
msgstr "nie udało się zaalokować listy plików"
|
msgstr "nie udało się zaalokować listy plików"
|
||||||
|
|
||||||
#: src/pv/transfer.c:464
|
#: src/pv/transfer.c:463
|
||||||
msgid "read failed"
|
msgid "read failed"
|
||||||
msgstr "błąd odczytu"
|
msgstr "błąd odczytu"
|
||||||
|
|
||||||
#: src/pv/transfer.c:487
|
#: src/pv/transfer.c:479
|
||||||
msgid "warning: read errors detected"
|
msgid "warning: read errors detected"
|
||||||
msgstr "ostrzeżenie: błędy odczytu wykryte"
|
msgstr "ostrzeżenie: błędy odczytu wykryte"
|
||||||
|
|
||||||
#: src/pv/transfer.c:503
|
#: src/pv/transfer.c:495
|
||||||
msgid "file is not seekable"
|
msgid "file is not seekable"
|
||||||
msgstr "pliku nie da się przewijać"
|
msgstr "pliku nie da się przewijać"
|
||||||
|
|
||||||
#: src/pv/transfer.c:581
|
#: src/pv/transfer.c:573
|
||||||
msgid "failed to seek past error"
|
msgid "failed to seek past error"
|
||||||
msgstr "nie udało się przewinąć za błąd"
|
msgstr "nie udało się przewinąć za błąd"
|
||||||
|
|
||||||
#: src/pv/transfer.c:601
|
#: src/pv/transfer.c:593
|
||||||
msgid "skipped past read error"
|
msgid "skipped past read error"
|
||||||
msgstr "pominięto błąd odczytu"
|
msgstr "pominięto błąd odczytu"
|
||||||
|
|
||||||
#: src/pv/transfer.c:642
|
#: src/pv/transfer.c:634
|
||||||
msgid "no transfer buffer allocated"
|
msgid "no transfer buffer allocated"
|
||||||
msgstr "brak zaalokowanego bufora transferu"
|
msgstr "brak zaalokowanego bufora transferu"
|
||||||
|
|
||||||
#: src/pv/transfer.c:684
|
#: src/pv/transfer.c:676
|
||||||
msgid "failed to set interval timer"
|
msgid "failed to set interval timer"
|
||||||
msgstr "nie udało się ustawić interwału czasowego"
|
msgstr "nie udało się ustawić interwału czasowego"
|
||||||
|
|
||||||
# "Przewidywany czas ukończenia" for ETA is too long
|
# "Przewidywany czas ukończenia" for ETA is too long
|
||||||
#: src/pv/transfer.c:710
|
#: src/pv/transfer.c:702
|
||||||
msgid "failed to clear interval timer"
|
msgid "failed to clear interval timer"
|
||||||
msgstr "nie udało się wyczyścić interwału czasowego"
|
msgstr "nie udało się wyczyścić interwału czasowego"
|
||||||
|
|
||||||
#: src/pv/transfer.c:740
|
#: src/pv/transfer.c:744
|
||||||
msgid "line position buffer allocation failed"
|
msgid "line position buffer allocation failed"
|
||||||
msgstr "alokacja buforu pozycji linii nie powiodła się"
|
msgstr "alokacja buforu pozycji linii nie powiodła się"
|
||||||
|
|
||||||
#: src/pv/transfer.c:872
|
#: src/pv/transfer.c:917
|
||||||
msgid "write failed"
|
msgid "write failed"
|
||||||
msgstr "błąd zapisu"
|
msgstr "błąd zapisu"
|
||||||
|
|
||||||
#: src/pv/transfer.c:1109
|
#: src/pv/transfer.c:1154
|
||||||
msgid "select call failed"
|
msgid "select call failed"
|
||||||
msgstr "nie udało się wywołać funkcji select"
|
msgstr "nie udało się wywołać funkcji select"
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||||
"POT-Creation-Date: 2024-12-02 17:56+0000\n"
|
"POT-Creation-Date: 2024-12-22 12:09+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -15,265 +15,277 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: src/main/help.c:284
|
#: src/main/help.c:236
|
||||||
msgid "show progress bar"
|
msgid "show progress bar"
|
||||||
msgstr "exibe barra de progressão"
|
msgstr "exibe barra de progressão"
|
||||||
|
|
||||||
#: src/main/help.c:287
|
#: src/main/help.c:239
|
||||||
msgid "show elapsed time"
|
msgid "show elapsed time"
|
||||||
msgstr "exibe tempo passado"
|
msgstr "exibe tempo passado"
|
||||||
|
|
||||||
#: src/main/help.c:290
|
#: src/main/help.c:242
|
||||||
msgid "show estimated time of arrival (completion)"
|
msgid "show estimated time of arrival (completion)"
|
||||||
msgstr "exibe o tempo estimado de término"
|
msgstr "exibe o tempo estimado de término"
|
||||||
|
|
||||||
#: src/main/help.c:293
|
#: src/main/help.c:245
|
||||||
msgid "show absolute estimated time of arrival (completion)"
|
msgid "show absolute estimated time of arrival (completion)"
|
||||||
msgstr "exibe o tempo absoluto estimado de término"
|
msgstr "exibe o tempo absoluto estimado de término"
|
||||||
|
|
||||||
#: src/main/help.c:296
|
#: src/main/help.c:248
|
||||||
msgid "show data transfer rate counter"
|
msgid "show data transfer rate counter"
|
||||||
msgstr "exibe a taxa de transferência"
|
msgstr "exibe a taxa de transferência"
|
||||||
|
|
||||||
#: src/main/help.c:299
|
#: src/main/help.c:251
|
||||||
msgid "show data transfer average rate counter"
|
msgid "show data transfer average rate counter"
|
||||||
msgstr "exibe o contador da taxa média de transferência de dados"
|
msgstr "exibe o contador da taxa média de transferência de dados"
|
||||||
|
|
||||||
#: src/main/help.c:302
|
#: src/main/help.c:254
|
||||||
msgid "show number of bytes transferred"
|
msgid "show number of bytes transferred"
|
||||||
msgstr "exibe a quantidade de bytes transferidos"
|
msgstr "exibe a quantidade de bytes transferidos"
|
||||||
|
|
||||||
#: src/main/help.c:305
|
#: src/main/help.c:257
|
||||||
msgid "show percentage of transfer buffer in use"
|
msgid "show percentage of transfer buffer in use"
|
||||||
msgstr "exibe a porcentagem de buffer de transferência em uso"
|
msgstr "exibe a porcentagem de buffer de transferência em uso"
|
||||||
|
|
||||||
#: src/main/help.c:307
|
#: src/main/help.c:259
|
||||||
msgid "NUM"
|
msgid "NUM"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:308
|
#: src/main/help.c:260
|
||||||
msgid "show NUM bytes last written"
|
msgid "show NUM bytes last written"
|
||||||
msgstr "exibe NUM bytes gravados pela última vez"
|
msgstr "exibe NUM bytes gravados pela última vez"
|
||||||
|
|
||||||
#: src/main/help.c:310
|
#: src/main/help.c:262
|
||||||
msgid "FORMAT"
|
msgid "FORMAT"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:311
|
#: src/main/help.c:263
|
||||||
msgid "set output format to FORMAT"
|
msgid "set output format to FORMAT"
|
||||||
msgstr "definir o formato de saída para FORMAT"
|
msgstr "definir o formato de saída para FORMAT"
|
||||||
|
|
||||||
#: src/main/help.c:314
|
#: src/main/help.c:266
|
||||||
msgid "output percentages, not visual information"
|
msgid "output percentages, not visual information"
|
||||||
msgstr "exibe apenas as porcentagens, sem informações visuais"
|
msgstr "exibe apenas as porcentagens, sem informações visuais"
|
||||||
|
|
||||||
#: src/main/help.c:317
|
#: src/main/help.c:269
|
||||||
msgid "do not output any transfer information at all"
|
msgid "do not output any transfer information at all"
|
||||||
msgstr "executa programa sem exibir quaisquer informações"
|
msgstr "executa programa sem exibir quaisquer informações"
|
||||||
|
|
||||||
#: src/main/help.c:321
|
#: src/main/help.c:273
|
||||||
msgid "show number of bits transferred"
|
msgid "show number of bits transferred"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:324
|
#: src/main/help.c:276
|
||||||
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:327
|
#: src/main/help.c:279
|
||||||
msgid "display nothing until first byte transferred"
|
msgid "display nothing until first byte transferred"
|
||||||
msgstr "não exibe nada até iniciar o processamento"
|
msgstr "não exibe nada até iniciar o processamento"
|
||||||
|
|
||||||
#: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
|
#: src/main/help.c:281 src/main/help.c:296 src/main/help.c:299
|
||||||
msgid "SEC"
|
msgid "SEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:330
|
#: src/main/help.c:282
|
||||||
msgid "display nothing until SEC seconds have passed"
|
msgid "display nothing until SEC seconds have passed"
|
||||||
msgstr "não exibir nada até que os segundos SEC tenham passado"
|
msgstr "não exibir nada até que os segundos SEC tenham passado"
|
||||||
|
|
||||||
#: src/main/help.c:332
|
#: src/main/help.c:284
|
||||||
msgid "SIZE"
|
msgid "SIZE"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:333
|
#: src/main/help.c:285
|
||||||
msgid "set estimated data size to SIZE bytes"
|
msgid "set estimated data size to SIZE bytes"
|
||||||
msgstr "seta a quantidade estimada de dados em SIZE bytes"
|
msgstr "seta a quantidade estimada de dados em SIZE bytes"
|
||||||
|
|
||||||
#: src/main/help.c:336
|
#: src/main/help.c:288
|
||||||
msgid "if size unknown, show rate vs max rate"
|
msgid "if size unknown, show rate vs max rate"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:339
|
#: src/main/help.c:291
|
||||||
msgid "count lines instead of bytes"
|
msgid "count lines instead of bytes"
|
||||||
msgstr "contar linhas em vez de bytes"
|
msgstr "contar linhas em vez de bytes"
|
||||||
|
|
||||||
#: src/main/help.c:342
|
#: src/main/help.c:294
|
||||||
msgid "lines are null-terminated"
|
msgid "lines are null-terminated"
|
||||||
msgstr "linhas são terminadas em nulo"
|
msgstr "linhas são terminadas em nulo"
|
||||||
|
|
||||||
#: src/main/help.c:345
|
#: src/main/help.c:297
|
||||||
msgid "update every SEC seconds"
|
msgid "update every SEC seconds"
|
||||||
msgstr "atualiza informações a cada SEC segundos"
|
msgstr "atualiza informações a cada SEC segundos"
|
||||||
|
|
||||||
#: src/main/help.c:348
|
#: src/main/help.c:300
|
||||||
msgid "compute average rate over past SEC seconds (default 30s)"
|
msgid "compute average rate over past SEC seconds (default 30s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:350
|
#: src/main/help.c:302
|
||||||
msgid "WIDTH"
|
msgid "WIDTH"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:351
|
#: src/main/help.c:303
|
||||||
msgid "assume terminal is WIDTH characters wide"
|
msgid "assume terminal is WIDTH characters wide"
|
||||||
msgstr "presuma que o terminal tem WIDTH caracteres de largura"
|
msgstr "presuma que o terminal tem WIDTH caracteres de largura"
|
||||||
|
|
||||||
#: src/main/help.c:353
|
#: src/main/help.c:305
|
||||||
msgid "HEIGHT"
|
msgid "HEIGHT"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:354
|
#: src/main/help.c:306
|
||||||
msgid "assume terminal is HEIGHT rows high"
|
msgid "assume terminal is HEIGHT rows high"
|
||||||
msgstr "presuma que o terminal tem HEIGHT caracteres de altura"
|
msgstr "presuma que o terminal tem HEIGHT caracteres de altura"
|
||||||
|
|
||||||
#: src/main/help.c:356
|
#: src/main/help.c:308
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:357
|
#: src/main/help.c:309
|
||||||
msgid "prefix visual information with NAME"
|
msgid "prefix visual information with NAME"
|
||||||
msgstr "exibe NAME antes das demais informações"
|
msgstr "exibe NAME antes das demais informações"
|
||||||
|
|
||||||
#: src/main/help.c:359
|
#: src/main/help.c:311
|
||||||
|
msgid "STYLE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:312
|
||||||
|
msgid "set default bar style to NAME"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:314
|
||||||
msgid "SPEC"
|
msgid "SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:360
|
#: src/main/help.c:315
|
||||||
msgid "also send progress to SPEC"
|
msgid "also send progress to SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:363
|
#: src/main/help.c:318
|
||||||
msgid "output transfer statistics at the end"
|
msgid "output transfer statistics at the end"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:366
|
#: src/main/help.c:321
|
||||||
msgid "output even if standard error is not a terminal"
|
msgid "output even if standard error is not a terminal"
|
||||||
msgstr "gera dados mesmo que a saída de erro seja redirecionada"
|
msgstr "gera dados mesmo que a saída de erro seja redirecionada"
|
||||||
|
|
||||||
#: src/main/help.c:369
|
#: src/main/help.c:324
|
||||||
msgid "use cursor positioning escape sequences"
|
msgid "use cursor positioning escape sequences"
|
||||||
msgstr "utiliza caracteres de escape para posicionar o cursor"
|
msgstr "utiliza caracteres de escape para posicionar o cursor"
|
||||||
|
|
||||||
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
|
#: src/main/help.c:327 src/main/help.c:357 src/main/help.c:369
|
||||||
#: src/main/help.c:424
|
#: src/main/help.c:379
|
||||||
msgid "FILE"
|
msgid "FILE"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:373
|
#: src/main/help.c:328
|
||||||
msgid "write output to FILE instead of stdout"
|
msgid "write output to FILE instead of stdout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:375
|
#: src/main/help.c:330
|
||||||
msgid "RATE"
|
msgid "RATE"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:376
|
#: src/main/help.c:331
|
||||||
msgid "limit transfer to RATE bytes per second"
|
msgid "limit transfer to RATE bytes per second"
|
||||||
msgstr "limita a transferência a RATE bytes por segundo"
|
msgstr "limita a transferência a RATE bytes por segundo"
|
||||||
|
|
||||||
#: src/main/help.c:378 src/main/help.c:387
|
#: src/main/help.c:333 src/main/help.c:342
|
||||||
msgid "BYTES"
|
msgid "BYTES"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:379
|
#: src/main/help.c:334
|
||||||
msgid "use a buffer size of BYTES"
|
msgid "use a buffer size of BYTES"
|
||||||
msgstr "use um tamanho de buffer de BYTES"
|
msgstr "use um tamanho de buffer de BYTES"
|
||||||
|
|
||||||
#: src/main/help.c:382
|
#: src/main/help.c:337
|
||||||
msgid "never use splice(), always use read/write"
|
msgid "never use splice(), always use read/write"
|
||||||
msgstr "nunca use splice(), sempre use read/write"
|
msgstr "nunca use splice(), sempre use read/write"
|
||||||
|
|
||||||
#: src/main/help.c:385
|
#: src/main/help.c:340
|
||||||
msgid "skip read errors in input"
|
msgid "skip read errors in input"
|
||||||
msgstr "ignorar erros de leitura em entrada"
|
msgstr "ignorar erros de leitura em entrada"
|
||||||
|
|
||||||
#: src/main/help.c:388
|
#: src/main/help.c:343
|
||||||
msgid "skip errors in BYTES blocks at a time"
|
msgid "skip errors in BYTES blocks at a time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:391
|
#: src/main/help.c:346
|
||||||
msgid "stop after --size bytes have been transferred"
|
msgid "stop after --size bytes have been transferred"
|
||||||
msgstr "parar após --size bytes terem sido transferidos"
|
msgstr "parar após --size bytes terem sido transferidos"
|
||||||
|
|
||||||
#: src/main/help.c:394
|
#: src/main/help.c:349
|
||||||
msgid "flush cache to disk after every write"
|
msgid "flush cache to disk after every write"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:397
|
#: src/main/help.c:352
|
||||||
msgid "use direct I/O to bypass cache"
|
msgid "use direct I/O to bypass cache"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:400
|
#: src/main/help.c:355
|
||||||
msgid "discard input instead of writing to output"
|
msgid "discard input instead of writing to output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:403
|
#: src/main/help.c:358
|
||||||
msgid "write all input to FILE before writing to output"
|
msgid "write all input to FILE before writing to output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:405
|
#: src/main/help.c:360
|
||||||
msgid "PID[:FD]"
|
msgid "PID[:FD]"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:406
|
#: src/main/help.c:361
|
||||||
msgid "watch file FD opened by process PID"
|
msgid "watch file FD opened by process PID"
|
||||||
msgstr "assistir arquivo FD aberto pelo processo PID"
|
msgstr "assistir arquivo FD aberto pelo processo PID"
|
||||||
|
|
||||||
#: src/main/help.c:409
|
#: src/main/help.c:364
|
||||||
msgid "PID"
|
msgid "PID"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:410
|
#: src/main/help.c:365
|
||||||
msgid "update settings of process PID"
|
msgid "update settings of process PID"
|
||||||
msgstr "atualizar as configurações do processo PID"
|
msgstr "atualizar as configurações do processo PID"
|
||||||
|
|
||||||
#: src/main/help.c:415
|
#: src/main/help.c:370
|
||||||
msgid "save process ID in FILE"
|
msgid "save process ID in FILE"
|
||||||
msgstr "salvar ID do processo em FILE"
|
msgstr "salvar ID do processo em FILE"
|
||||||
|
|
||||||
#: src/main/help.c:418
|
#: src/main/help.c:373
|
||||||
msgid "show this help and exit"
|
msgid "show this help and exit"
|
||||||
msgstr "exibe esta tela de ajuda e termina"
|
msgstr "exibe esta tela de ajuda e termina"
|
||||||
|
|
||||||
#: src/main/help.c:421
|
#: src/main/help.c:376
|
||||||
msgid "show version information and exit"
|
msgid "show version information and exit"
|
||||||
msgstr "exibe a versão e termina"
|
msgstr "exibe a versão e termina"
|
||||||
|
|
||||||
#: src/main/help.c:425
|
#: src/main/help.c:380
|
||||||
msgid "write debug logs to FILE"
|
msgid "write debug logs to FILE"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:450
|
#: src/main/help.c:406
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Usage: %s [OPTION] [FILE]..."
|
msgid "Usage: %s [OPTION] [FILE]..."
|
||||||
msgstr "Uso: %s [OPÇÕES] [ARQUIVOS]..."
|
msgstr "Uso: %s [OPÇÕES] [ARQUIVOS]..."
|
||||||
|
|
||||||
#: src/main/help.c:461
|
#: src/main/help.c:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Concatena ARQUIVO(s) ou a entrada padrão e grava na saída padrão, com "
|
"Concatena ARQUIVO(s) ou a entrada padrão e grava na saída padrão, com "
|
||||||
"monitoramento."
|
"monitoramento."
|
||||||
|
|
||||||
#: src/main/help.c:598
|
#: src/main/help.c:555
|
||||||
|
msgid "Supported format sequences:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:569
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please report any bugs to: %s"
|
msgid "Please report any bugs to: %s"
|
||||||
msgstr "Por favor, reporte quaisquer defeitos para %s"
|
msgstr "Por favor, reporte quaisquer defeitos para %s"
|
||||||
|
|
||||||
#: src/main/main.c:230
|
#: src/main/main.c:232
|
||||||
msgid "(input)"
|
msgid "(input)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/main.c:319
|
#: src/main/main.c:328
|
||||||
msgid "state allocation failed"
|
msgid "state allocation failed"
|
||||||
msgstr "alocação de memória de status falhou"
|
msgstr "alocação de memória de status falhou"
|
||||||
|
|
||||||
@@ -301,41 +313,45 @@ msgstr ""
|
|||||||
msgid "failed to determine size of block device"
|
msgid "failed to determine size of block device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:344
|
#: src/main/options.c:345
|
||||||
msgid "option structure allocation failed"
|
msgid "option structure allocation failed"
|
||||||
msgstr "erro na alocação da estrutura de opções"
|
msgstr "erro na alocação da estrutura de opções"
|
||||||
|
|
||||||
#: src/main/options.c:363
|
#: src/main/options.c:364
|
||||||
msgid "option structure argv allocation failed"
|
msgid "option structure argv allocation failed"
|
||||||
msgstr "erro na alocação da estrutura de opções argv"
|
msgstr "erro na alocação da estrutura de opções argv"
|
||||||
|
|
||||||
#: src/main/options.c:425
|
#: src/main/options.c:417
|
||||||
|
msgid "numeric value not understood"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/options.c:435
|
||||||
msgid "integer argument expected"
|
msgid "integer argument expected"
|
||||||
msgstr "argumento inteiro esperado"
|
msgstr "argumento inteiro esperado"
|
||||||
|
|
||||||
#: src/main/options.c:436
|
#: src/main/options.c:447
|
||||||
msgid "numeric argument expected"
|
msgid "numeric argument expected"
|
||||||
msgstr "argumento numérico esperado"
|
msgstr "argumento numérico esperado"
|
||||||
|
|
||||||
#: src/main/options.c:447
|
#: src/main/options.c:458
|
||||||
msgid "process ID or pid:fd pair expected"
|
msgid "process ID or pid:fd pair expected"
|
||||||
msgstr "ID do processo ou par pid:fd esperado"
|
msgstr "ID do processo ou par pid:fd esperado"
|
||||||
|
|
||||||
#: src/main/options.c:454
|
#: src/main/options.c:465
|
||||||
msgid "invalid process ID"
|
msgid "invalid process ID"
|
||||||
msgstr "ID de processo inválido"
|
msgstr "ID de processo inválido"
|
||||||
|
|
||||||
#: src/main/options.c:679
|
#: src/main/options.c:698
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s --help' for more information."
|
msgid "Try `%s --help' for more information."
|
||||||
msgstr "Tente `%s --help' para maiores informações."
|
msgstr "Tente `%s --help' para maiores informações."
|
||||||
|
|
||||||
#: src/main/options.c:681
|
#: src/main/options.c:700
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s -h' for more information."
|
msgid "Try `%s -h' for more information."
|
||||||
msgstr "Tente `%s -h' para maiores informações."
|
msgstr "Tente `%s -h' para maiores informações."
|
||||||
|
|
||||||
#: src/main/options.c:712
|
#: src/main/options.c:731
|
||||||
msgid ""
|
msgid ""
|
||||||
"cannot use line mode or transfer modifier options when watching file "
|
"cannot use line mode or transfer modifier options when watching file "
|
||||||
"descriptors"
|
"descriptors"
|
||||||
@@ -343,29 +359,29 @@ msgstr ""
|
|||||||
"não pode usar o modo de linha ou opções de modificador de transferência ao "
|
"não pode usar o modo de linha ou opções de modificador de transferência ao "
|
||||||
"assistir os descritores de arquivo"
|
"assistir os descritores de arquivo"
|
||||||
|
|
||||||
#: src/main/options.c:721
|
#: src/main/options.c:740
|
||||||
msgid "cannot use cursor positioning when watching file descriptors"
|
msgid "cannot use cursor positioning when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"não pode usar o posicionamento do cursor ao observar os descritores de "
|
"não pode usar o posicionamento do cursor ao observar os descritores de "
|
||||||
"arquivo"
|
"arquivo"
|
||||||
|
|
||||||
#: src/main/options.c:730
|
#: src/main/options.c:749
|
||||||
msgid "cannot use remote control when watching file descriptors"
|
msgid "cannot use remote control when watching file descriptors"
|
||||||
msgstr "não pode usar o controle remoto ao assistir os descritores de arquivo"
|
msgstr "não pode usar o controle remoto ao assistir os descritores de arquivo"
|
||||||
|
|
||||||
#: src/main/options.c:739
|
#: src/main/options.c:758
|
||||||
msgid "cannot transfer files when watching file descriptors"
|
msgid "cannot transfer files when watching file descriptors"
|
||||||
msgstr "não pode transferir arquivos ao assistir descritores de arquivo"
|
msgstr "não pode transferir arquivos ao assistir descritores de arquivo"
|
||||||
|
|
||||||
#: src/main/options.c:754
|
#: src/main/options.c:773
|
||||||
msgid "not available on systems without /proc/self/fdinfo"
|
msgid "not available on systems without /proc/self/fdinfo"
|
||||||
msgstr "não disponível em sistemas sem /proc/self/fdinfo"
|
msgstr "não disponível em sistemas sem /proc/self/fdinfo"
|
||||||
|
|
||||||
#: src/main/remote.c:304
|
#: src/main/remote.c:309
|
||||||
msgid "message not received"
|
msgid "message not received"
|
||||||
msgstr "mensagem não recebida"
|
msgstr "mensagem não recebida"
|
||||||
|
|
||||||
#: src/main/remote.c:431
|
#: src/main/remote.c:440
|
||||||
msgid "SA_SIGINFO not supported on this system"
|
msgid "SA_SIGINFO not supported on this system"
|
||||||
msgstr "SA_SIGINFO não suportado neste sistema"
|
msgstr "SA_SIGINFO não suportado neste sistema"
|
||||||
|
|
||||||
@@ -401,48 +417,18 @@ msgstr "tentativa de bloqueio falhou"
|
|||||||
msgid "failed to open terminal"
|
msgid "failed to open terminal"
|
||||||
msgstr "erro abrindo o terminal"
|
msgstr "erro abrindo o terminal"
|
||||||
|
|
||||||
#: src/pv/display.c:233
|
#: src/pv/display.c:249
|
||||||
msgid "yzafpnum kMGTPEZY"
|
msgid "yzafpnum kMGTPEZY"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/display.c:251
|
#: src/pv/display.c:267
|
||||||
msgid "yzafpnum KMGTPEZY"
|
msgid "yzafpnum KMGTPEZY"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/display.c:681 src/pv/transfer.c:1011
|
#: src/pv/display.c:1067 src/pv/transfer.c:1056
|
||||||
msgid "buffer allocation failed"
|
msgid "buffer allocation failed"
|
||||||
msgstr "erro alocando o buffer"
|
msgstr "erro alocando o buffer"
|
||||||
|
|
||||||
#: 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 "B/s"
|
|
||||||
|
|
||||||
#: src/pv/display.c:904 src/pv/display.c:908
|
|
||||||
msgid "ETA"
|
|
||||||
msgstr "ETA"
|
|
||||||
|
|
||||||
#: src/pv/display.c:974
|
|
||||||
msgid "FIN"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/pv/file.c:149
|
#: src/pv/file.c:149
|
||||||
msgid "failed to seek to start of output"
|
msgid "failed to seek to start of output"
|
||||||
msgstr "não pode mover para o início da produção"
|
msgstr "não pode mover para o início da produção"
|
||||||
@@ -471,19 +457,50 @@ msgstr ""
|
|||||||
msgid "(stdin)"
|
msgid "(stdin)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/loop.c:548
|
#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:93
|
||||||
|
#: src/pv/format/rate.c:32 src/pv/loop.c:551
|
||||||
|
msgid "b/s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36
|
||||||
|
msgid "/s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36 src/pv/loop.c:551
|
||||||
|
msgid "B/s"
|
||||||
|
msgstr "B/s"
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:31
|
||||||
|
msgid "b"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:35 src/pv/transfer.c:594
|
||||||
|
msgid "B"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/format/eta.c:53 src/pv/format/eta.c:57
|
||||||
|
msgid "ETA"
|
||||||
|
msgstr "ETA"
|
||||||
|
|
||||||
|
#: src/pv/format/fineta.c:81
|
||||||
|
msgid "FIN"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pv/loop.c:550
|
||||||
msgid "rate min/avg/max/mdev"
|
msgid "rate min/avg/max/mdev"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/loop.c:560
|
#: src/pv/loop.c:562
|
||||||
msgid "rate not measured"
|
msgid "rate not measured"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
|
#: src/pv/loop.c:772 src/pv/loop.c:823 src/pv/loop.c:876 src/pv/watchpid.c:99
|
||||||
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
||||||
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
||||||
#: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
|
#: 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
|
#: src/pv/watchpid.c:385 src/pv/watchpid.c:406
|
||||||
msgid "pid"
|
msgid "pid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -491,51 +508,51 @@ msgstr ""
|
|||||||
msgid "history structure allocation failed"
|
msgid "history structure allocation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/state.c:572 src/pv/state.c:583
|
#: src/pv/state.c:593 src/pv/state.c:604
|
||||||
msgid "file list allocation failed"
|
msgid "file list allocation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:464
|
#: src/pv/transfer.c:463
|
||||||
msgid "read failed"
|
msgid "read failed"
|
||||||
msgstr "erro de leitura"
|
msgstr "erro de leitura"
|
||||||
|
|
||||||
#: src/pv/transfer.c:487
|
#: src/pv/transfer.c:479
|
||||||
msgid "warning: read errors detected"
|
msgid "warning: read errors detected"
|
||||||
msgstr "aviso: erros de leitura detectados"
|
msgstr "aviso: erros de leitura detectados"
|
||||||
|
|
||||||
#: src/pv/transfer.c:503
|
#: src/pv/transfer.c:495
|
||||||
msgid "file is not seekable"
|
msgid "file is not seekable"
|
||||||
msgstr "não pode mover dentro do arquivo"
|
msgstr "não pode mover dentro do arquivo"
|
||||||
|
|
||||||
#: src/pv/transfer.c:581
|
#: src/pv/transfer.c:573
|
||||||
msgid "failed to seek past error"
|
msgid "failed to seek past error"
|
||||||
msgstr "não pode ir além do erro"
|
msgstr "não pode ir além do erro"
|
||||||
|
|
||||||
#: src/pv/transfer.c:601
|
#: src/pv/transfer.c:593
|
||||||
msgid "skipped past read error"
|
msgid "skipped past read error"
|
||||||
msgstr "ignorado erro de leitura"
|
msgstr "ignorado erro de leitura"
|
||||||
|
|
||||||
#: src/pv/transfer.c:642
|
#: src/pv/transfer.c:634
|
||||||
msgid "no transfer buffer allocated"
|
msgid "no transfer buffer allocated"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:684
|
#: src/pv/transfer.c:676
|
||||||
msgid "failed to set interval timer"
|
msgid "failed to set interval timer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:710
|
#: src/pv/transfer.c:702
|
||||||
msgid "failed to clear interval timer"
|
msgid "failed to clear interval timer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:740
|
#: src/pv/transfer.c:744
|
||||||
msgid "line position buffer allocation failed"
|
msgid "line position buffer allocation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:872
|
#: src/pv/transfer.c:917
|
||||||
msgid "write failed"
|
msgid "write failed"
|
||||||
msgstr "erro de gravação"
|
msgstr "erro de gravação"
|
||||||
|
|
||||||
#: src/pv/transfer.c:1109
|
#: src/pv/transfer.c:1154
|
||||||
msgid "select call failed"
|
msgid "select call failed"
|
||||||
msgstr "erro na chamada da função select"
|
msgstr "erro na chamada da função select"
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||||
"POT-Creation-Date: 2024-12-02 17:56+0000\n"
|
"POT-Creation-Date: 2024-12-22 12:09+0000\n"
|
||||||
"PO-Revision-Date: 2024-10-22 18:07+0000\n"
|
"PO-Revision-Date: 2024-10-22 18:07+0000\n"
|
||||||
"Last-Translator: 0ko <0ko@users.noreply.translate.codeberg.org>\n"
|
"Last-Translator: 0ko <0ko@users.noreply.translate.codeberg.org>\n"
|
||||||
"Language-Team: Russian <https://translate.codeberg.org/projects/pv/pv/ru/>\n"
|
"Language-Team: Russian <https://translate.codeberg.org/projects/pv/pv/ru/>\n"
|
||||||
@@ -13,264 +13,276 @@ msgstr ""
|
|||||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
"X-Generator: Weblate 5.8.1\n"
|
"X-Generator: Weblate 5.8.1\n"
|
||||||
|
|
||||||
#: src/main/help.c:284
|
#: src/main/help.c:236
|
||||||
msgid "show progress bar"
|
msgid "show progress bar"
|
||||||
msgstr "показать полосу прогресса"
|
msgstr "показать полосу прогресса"
|
||||||
|
|
||||||
#: src/main/help.c:287
|
#: src/main/help.c:239
|
||||||
msgid "show elapsed time"
|
msgid "show elapsed time"
|
||||||
msgstr "показать прошедшее время"
|
msgstr "показать прошедшее время"
|
||||||
|
|
||||||
#: src/main/help.c:290
|
#: src/main/help.c:242
|
||||||
msgid "show estimated time of arrival (completion)"
|
msgid "show estimated time of arrival (completion)"
|
||||||
msgstr "показать примерное время завершения"
|
msgstr "показать примерное время завершения"
|
||||||
|
|
||||||
#: src/main/help.c:293
|
#: src/main/help.c:245
|
||||||
msgid "show absolute estimated time of arrival (completion)"
|
msgid "show absolute estimated time of arrival (completion)"
|
||||||
msgstr "показать примерное абсолютное время завершения"
|
msgstr "показать примерное абсолютное время завершения"
|
||||||
|
|
||||||
#: src/main/help.c:296
|
#: src/main/help.c:248
|
||||||
msgid "show data transfer rate counter"
|
msgid "show data transfer rate counter"
|
||||||
msgstr "показать скорость передачи данных"
|
msgstr "показать скорость передачи данных"
|
||||||
|
|
||||||
#: src/main/help.c:299
|
#: src/main/help.c:251
|
||||||
msgid "show data transfer average rate counter"
|
msgid "show data transfer average rate counter"
|
||||||
msgstr "показать среднюю скорость передачи данных"
|
msgstr "показать среднюю скорость передачи данных"
|
||||||
|
|
||||||
#: src/main/help.c:302
|
#: src/main/help.c:254
|
||||||
msgid "show number of bytes transferred"
|
msgid "show number of bytes transferred"
|
||||||
msgstr "показать объём переданных данных в байтах"
|
msgstr "показать объём переданных данных в байтах"
|
||||||
|
|
||||||
#: src/main/help.c:305
|
#: src/main/help.c:257
|
||||||
msgid "show percentage of transfer buffer in use"
|
msgid "show percentage of transfer buffer in use"
|
||||||
msgstr "показать использование буфера передачи в процентах"
|
msgstr "показать использование буфера передачи в процентах"
|
||||||
|
|
||||||
#: src/main/help.c:307
|
#: src/main/help.c:259
|
||||||
msgid "NUM"
|
msgid "NUM"
|
||||||
msgstr "КОЛ"
|
msgstr "КОЛ"
|
||||||
|
|
||||||
#: src/main/help.c:308
|
#: src/main/help.c:260
|
||||||
msgid "show NUM bytes last written"
|
msgid "show NUM bytes last written"
|
||||||
msgstr "показать КОЛ байт, переданных в последний раз"
|
msgstr "показать КОЛ байт, переданных в последний раз"
|
||||||
|
|
||||||
#: src/main/help.c:310
|
#: src/main/help.c:262
|
||||||
msgid "FORMAT"
|
msgid "FORMAT"
|
||||||
msgstr "ФОРМАТ"
|
msgstr "ФОРМАТ"
|
||||||
|
|
||||||
#: src/main/help.c:311
|
#: src/main/help.c:263
|
||||||
msgid "set output format to FORMAT"
|
msgid "set output format to FORMAT"
|
||||||
msgstr "указать формат вывода как ФОРМАТ"
|
msgstr "указать формат вывода как ФОРМАТ"
|
||||||
|
|
||||||
#: src/main/help.c:314
|
#: src/main/help.c:266
|
||||||
msgid "output percentages, not visual information"
|
msgid "output percentages, not visual information"
|
||||||
msgstr "показать проценты вместо визуальной информации"
|
msgstr "показать проценты вместо визуальной информации"
|
||||||
|
|
||||||
#: src/main/help.c:317
|
#: src/main/help.c:269
|
||||||
msgid "do not output any transfer information at all"
|
msgid "do not output any transfer information at all"
|
||||||
msgstr "не отображать никакую информацию о передаче"
|
msgstr "не отображать никакую информацию о передаче"
|
||||||
|
|
||||||
#: src/main/help.c:321
|
#: src/main/help.c:273
|
||||||
msgid "show number of bits transferred"
|
msgid "show number of bits transferred"
|
||||||
msgstr "показать объём переданных данных в битах"
|
msgstr "показать объём переданных данных в битах"
|
||||||
|
|
||||||
#: src/main/help.c:324
|
#: src/main/help.c:276
|
||||||
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
||||||
msgstr "считать суффиксы как умножители на 1000, а не на 1024"
|
msgstr "считать суффиксы как умножители на 1000, а не на 1024"
|
||||||
|
|
||||||
#: src/main/help.c:327
|
#: src/main/help.c:279
|
||||||
msgid "display nothing until first byte transferred"
|
msgid "display nothing until first byte transferred"
|
||||||
msgstr "ничего не показывать, пока не будет передан первый байт"
|
msgstr "ничего не показывать, пока не будет передан первый байт"
|
||||||
|
|
||||||
#: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
|
#: src/main/help.c:281 src/main/help.c:296 src/main/help.c:299
|
||||||
msgid "SEC"
|
msgid "SEC"
|
||||||
msgstr "СЕК"
|
msgstr "СЕК"
|
||||||
|
|
||||||
#: src/main/help.c:330
|
#: src/main/help.c:282
|
||||||
msgid "display nothing until SEC seconds have passed"
|
msgid "display nothing until SEC seconds have passed"
|
||||||
msgstr "ничего не показывать, пока не пройдёт СЕК секунд"
|
msgstr "ничего не показывать, пока не пройдёт СЕК секунд"
|
||||||
|
|
||||||
#: src/main/help.c:332
|
#: src/main/help.c:284
|
||||||
msgid "SIZE"
|
msgid "SIZE"
|
||||||
msgstr "РАЗМ"
|
msgstr "РАЗМ"
|
||||||
|
|
||||||
#: src/main/help.c:333
|
#: src/main/help.c:285
|
||||||
msgid "set estimated data size to SIZE bytes"
|
msgid "set estimated data size to SIZE bytes"
|
||||||
msgstr "указать ожидаемый объём данных как РАЗМ байт"
|
msgstr "указать ожидаемый объём данных как РАЗМ байт"
|
||||||
|
|
||||||
#: src/main/help.c:336
|
#: src/main/help.c:288
|
||||||
msgid "if size unknown, show rate vs max rate"
|
msgid "if size unknown, show rate vs max rate"
|
||||||
msgstr "если объём неизвестен, показать скорость и макс. скорость"
|
msgstr "если объём неизвестен, показать скорость и макс. скорость"
|
||||||
|
|
||||||
#: src/main/help.c:339
|
#: src/main/help.c:291
|
||||||
msgid "count lines instead of bytes"
|
msgid "count lines instead of bytes"
|
||||||
msgstr "считать линии вместо байт"
|
msgstr "считать линии вместо байт"
|
||||||
|
|
||||||
#: src/main/help.c:342
|
#: src/main/help.c:294
|
||||||
msgid "lines are null-terminated"
|
msgid "lines are null-terminated"
|
||||||
msgstr "строки прерываются нулями"
|
msgstr "строки прерываются нулями"
|
||||||
|
|
||||||
#: src/main/help.c:345
|
#: src/main/help.c:297
|
||||||
msgid "update every SEC seconds"
|
msgid "update every SEC seconds"
|
||||||
msgstr "обновлять каждые СЕК секунд"
|
msgstr "обновлять каждые СЕК секунд"
|
||||||
|
|
||||||
#: src/main/help.c:348
|
#: src/main/help.c:300
|
||||||
msgid "compute average rate over past SEC seconds (default 30s)"
|
msgid "compute average rate over past SEC seconds (default 30s)"
|
||||||
msgstr "вычислять среднюю скорость за последние СЕК секунд (по умолчанию 30)"
|
msgstr "вычислять среднюю скорость за последние СЕК секунд (по умолчанию 30)"
|
||||||
|
|
||||||
#: src/main/help.c:350
|
#: src/main/help.c:302
|
||||||
msgid "WIDTH"
|
msgid "WIDTH"
|
||||||
msgstr "ШИРИНА"
|
msgstr "ШИРИНА"
|
||||||
|
|
||||||
#: src/main/help.c:351
|
#: src/main/help.c:303
|
||||||
msgid "assume terminal is WIDTH characters wide"
|
msgid "assume terminal is WIDTH characters wide"
|
||||||
msgstr "считать, что в одной строке помещается ШИРИНА символов"
|
msgstr "считать, что в одной строке помещается ШИРИНА символов"
|
||||||
|
|
||||||
#: src/main/help.c:353
|
#: src/main/help.c:305
|
||||||
msgid "HEIGHT"
|
msgid "HEIGHT"
|
||||||
msgstr "ВЫСОТА"
|
msgstr "ВЫСОТА"
|
||||||
|
|
||||||
#: src/main/help.c:354
|
#: src/main/help.c:306
|
||||||
msgid "assume terminal is HEIGHT rows high"
|
msgid "assume terminal is HEIGHT rows high"
|
||||||
msgstr "считать, что на экране помещается ВЫСОТА строк"
|
msgstr "считать, что на экране помещается ВЫСОТА строк"
|
||||||
|
|
||||||
#: src/main/help.c:356
|
#: src/main/help.c:308
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr "ИМЯ"
|
msgstr "ИМЯ"
|
||||||
|
|
||||||
#: src/main/help.c:357
|
#: src/main/help.c:309
|
||||||
msgid "prefix visual information with NAME"
|
msgid "prefix visual information with NAME"
|
||||||
msgstr "писать ИМЯ до визуальной информации"
|
msgstr "писать ИМЯ до визуальной информации"
|
||||||
|
|
||||||
#: src/main/help.c:359
|
#: src/main/help.c:311
|
||||||
|
msgid "STYLE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:312
|
||||||
|
msgid "set default bar style to NAME"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:314
|
||||||
msgid "SPEC"
|
msgid "SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:360
|
#: src/main/help.c:315
|
||||||
msgid "also send progress to SPEC"
|
msgid "also send progress to SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:363
|
#: src/main/help.c:318
|
||||||
msgid "output transfer statistics at the end"
|
msgid "output transfer statistics at the end"
|
||||||
msgstr "после завершения показать статистику"
|
msgstr "после завершения показать статистику"
|
||||||
|
|
||||||
#: src/main/help.c:366
|
#: src/main/help.c:321
|
||||||
msgid "output even if standard error is not a terminal"
|
msgid "output even if standard error is not a terminal"
|
||||||
msgstr "вевести, даже если стд. ошибка не является терминалом"
|
msgstr "вевести, даже если стд. ошибка не является терминалом"
|
||||||
|
|
||||||
#: src/main/help.c:369
|
#: src/main/help.c:324
|
||||||
msgid "use cursor positioning escape sequences"
|
msgid "use cursor positioning escape sequences"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"использовать символьные последовательности для позиционирования курсора"
|
"использовать символьные последовательности для позиционирования курсора"
|
||||||
|
|
||||||
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
|
#: src/main/help.c:327 src/main/help.c:357 src/main/help.c:369
|
||||||
#: src/main/help.c:424
|
#: src/main/help.c:379
|
||||||
msgid "FILE"
|
msgid "FILE"
|
||||||
msgstr "ФАЙЛ"
|
msgstr "ФАЙЛ"
|
||||||
|
|
||||||
#: src/main/help.c:373
|
#: src/main/help.c:328
|
||||||
msgid "write output to FILE instead of stdout"
|
msgid "write output to FILE instead of stdout"
|
||||||
msgstr "направить вывод в ФАЙЛ вместо стд. вывода"
|
msgstr "направить вывод в ФАЙЛ вместо стд. вывода"
|
||||||
|
|
||||||
#: src/main/help.c:375
|
#: src/main/help.c:330
|
||||||
msgid "RATE"
|
msgid "RATE"
|
||||||
msgstr "СКОР"
|
msgstr "СКОР"
|
||||||
|
|
||||||
#: src/main/help.c:376
|
#: src/main/help.c:331
|
||||||
msgid "limit transfer to RATE bytes per second"
|
msgid "limit transfer to RATE bytes per second"
|
||||||
msgstr "ограничить скорость передачи до СКОР байт/сек"
|
msgstr "ограничить скорость передачи до СКОР байт/сек"
|
||||||
|
|
||||||
#: src/main/help.c:378 src/main/help.c:387
|
#: src/main/help.c:333 src/main/help.c:342
|
||||||
msgid "BYTES"
|
msgid "BYTES"
|
||||||
msgstr "БАЙТ"
|
msgstr "БАЙТ"
|
||||||
|
|
||||||
#: src/main/help.c:379
|
#: src/main/help.c:334
|
||||||
msgid "use a buffer size of BYTES"
|
msgid "use a buffer size of BYTES"
|
||||||
msgstr "использовать буфер размера БАЙТ"
|
msgstr "использовать буфер размера БАЙТ"
|
||||||
|
|
||||||
#: src/main/help.c:382
|
#: src/main/help.c:337
|
||||||
msgid "never use splice(), always use read/write"
|
msgid "never use splice(), always use read/write"
|
||||||
msgstr "использовать чтение/запись вместо splice()"
|
msgstr "использовать чтение/запись вместо splice()"
|
||||||
|
|
||||||
#: src/main/help.c:385
|
#: src/main/help.c:340
|
||||||
msgid "skip read errors in input"
|
msgid "skip read errors in input"
|
||||||
msgstr "пропустить ошибки чтения во вводе"
|
msgstr "пропустить ошибки чтения во вводе"
|
||||||
|
|
||||||
#: src/main/help.c:388
|
#: src/main/help.c:343
|
||||||
msgid "skip errors in BYTES blocks at a time"
|
msgid "skip errors in BYTES blocks at a time"
|
||||||
msgstr "пропускать ошибки в <БАЙТ> блоках за раз"
|
msgstr "пропускать ошибки в <БАЙТ> блоках за раз"
|
||||||
|
|
||||||
#: src/main/help.c:391
|
#: src/main/help.c:346
|
||||||
msgid "stop after --size bytes have been transferred"
|
msgid "stop after --size bytes have been transferred"
|
||||||
msgstr "остановить после передачи --size байт"
|
msgstr "остановить после передачи --size байт"
|
||||||
|
|
||||||
#: src/main/help.c:394
|
#: src/main/help.c:349
|
||||||
msgid "flush cache to disk after every write"
|
msgid "flush cache to disk after every write"
|
||||||
msgstr "сбрасывать кеш на диск каждый раз"
|
msgstr "сбрасывать кеш на диск каждый раз"
|
||||||
|
|
||||||
#: src/main/help.c:397
|
#: src/main/help.c:352
|
||||||
msgid "use direct I/O to bypass cache"
|
msgid "use direct I/O to bypass cache"
|
||||||
msgstr "использовать прямой ввод/вывод для обхода кеша"
|
msgstr "использовать прямой ввод/вывод для обхода кеша"
|
||||||
|
|
||||||
#: src/main/help.c:400
|
#: src/main/help.c:355
|
||||||
msgid "discard input instead of writing to output"
|
msgid "discard input instead of writing to output"
|
||||||
msgstr "отбрасывать ввод вместо записи в вывод"
|
msgstr "отбрасывать ввод вместо записи в вывод"
|
||||||
|
|
||||||
#: src/main/help.c:403
|
#: src/main/help.c:358
|
||||||
msgid "write all input to FILE before writing to output"
|
msgid "write all input to FILE before writing to output"
|
||||||
msgstr "записывать весь ввод в ФАЙЛ прежде, чем отправлять на вывод"
|
msgstr "записывать весь ввод в ФАЙЛ прежде, чем отправлять на вывод"
|
||||||
|
|
||||||
#: src/main/help.c:405
|
#: src/main/help.c:360
|
||||||
msgid "PID[:FD]"
|
msgid "PID[:FD]"
|
||||||
msgstr "ИДпр[:FD]"
|
msgstr "ИДпр[:FD]"
|
||||||
|
|
||||||
#: src/main/help.c:406
|
#: src/main/help.c:361
|
||||||
msgid "watch file FD opened by process PID"
|
msgid "watch file FD opened by process PID"
|
||||||
msgstr "следить за FD файла, открытого процессом ИДпр"
|
msgstr "следить за FD файла, открытого процессом ИДпр"
|
||||||
|
|
||||||
#: src/main/help.c:409
|
#: src/main/help.c:364
|
||||||
msgid "PID"
|
msgid "PID"
|
||||||
msgstr "ИДпр"
|
msgstr "ИДпр"
|
||||||
|
|
||||||
#: src/main/help.c:410
|
#: src/main/help.c:365
|
||||||
msgid "update settings of process PID"
|
msgid "update settings of process PID"
|
||||||
msgstr "обновить настройки ИДпр процесса"
|
msgstr "обновить настройки ИДпр процесса"
|
||||||
|
|
||||||
#: src/main/help.c:415
|
#: src/main/help.c:370
|
||||||
msgid "save process ID in FILE"
|
msgid "save process ID in FILE"
|
||||||
msgstr "сохранить ИД процесса в ФАЙЛ"
|
msgstr "сохранить ИД процесса в ФАЙЛ"
|
||||||
|
|
||||||
#: src/main/help.c:418
|
#: src/main/help.c:373
|
||||||
msgid "show this help and exit"
|
msgid "show this help and exit"
|
||||||
msgstr "показать справку и завершить работу"
|
msgstr "показать справку и завершить работу"
|
||||||
|
|
||||||
#: src/main/help.c:421
|
#: src/main/help.c:376
|
||||||
msgid "show version information and exit"
|
msgid "show version information and exit"
|
||||||
msgstr "показать версию программы и завершить работу"
|
msgstr "показать версию программы и завершить работу"
|
||||||
|
|
||||||
#: src/main/help.c:425
|
#: src/main/help.c:380
|
||||||
msgid "write debug logs to FILE"
|
msgid "write debug logs to FILE"
|
||||||
msgstr "вести запись отладочного журнала в ФАЙЛ"
|
msgstr "вести запись отладочного журнала в ФАЙЛ"
|
||||||
|
|
||||||
#: src/main/help.c:450
|
#: src/main/help.c:406
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Usage: %s [OPTION] [FILE]..."
|
msgid "Usage: %s [OPTION] [FILE]..."
|
||||||
msgstr "Использование: %s [ОПЦИИ] [ФАЙЛ]..."
|
msgstr "Использование: %s [ОПЦИИ] [ФАЙЛ]..."
|
||||||
|
|
||||||
#: src/main/help.c:461
|
#: src/main/help.c:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:598
|
#: src/main/help.c:555
|
||||||
|
msgid "Supported format sequences:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:569
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please report any bugs to: %s"
|
msgid "Please report any bugs to: %s"
|
||||||
msgstr "Сообщайте о проблемах на: %s"
|
msgstr "Сообщайте о проблемах на: %s"
|
||||||
|
|
||||||
#: src/main/main.c:230
|
#: src/main/main.c:232
|
||||||
msgid "(input)"
|
msgid "(input)"
|
||||||
msgstr "(ввод)"
|
msgstr "(ввод)"
|
||||||
|
|
||||||
#: src/main/main.c:319
|
#: src/main/main.c:328
|
||||||
msgid "state allocation failed"
|
msgid "state allocation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -298,67 +310,71 @@ msgstr "не удалось открыть блочное устройство"
|
|||||||
msgid "failed to determine size of block device"
|
msgid "failed to determine size of block device"
|
||||||
msgstr "не удалось определить размер блочного устройства"
|
msgstr "не удалось определить размер блочного устройства"
|
||||||
|
|
||||||
#: src/main/options.c:344
|
#: src/main/options.c:345
|
||||||
msgid "option structure allocation failed"
|
msgid "option structure allocation failed"
|
||||||
msgstr "не удалось выделить память для структуры опций"
|
msgstr "не удалось выделить память для структуры опций"
|
||||||
|
|
||||||
#: src/main/options.c:363
|
#: src/main/options.c:364
|
||||||
msgid "option structure argv allocation failed"
|
msgid "option structure argv allocation failed"
|
||||||
msgstr "не удалось выделить память для структуры опций argv"
|
msgstr "не удалось выделить память для структуры опций argv"
|
||||||
|
|
||||||
#: src/main/options.c:425
|
#: src/main/options.c:417
|
||||||
|
msgid "numeric value not understood"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/options.c:435
|
||||||
msgid "integer argument expected"
|
msgid "integer argument expected"
|
||||||
msgstr "ожидалось целое число"
|
msgstr "ожидалось целое число"
|
||||||
|
|
||||||
#: src/main/options.c:436
|
#: src/main/options.c:447
|
||||||
msgid "numeric argument expected"
|
msgid "numeric argument expected"
|
||||||
msgstr "ожидалось число"
|
msgstr "ожидалось число"
|
||||||
|
|
||||||
#: src/main/options.c:447
|
#: src/main/options.c:458
|
||||||
msgid "process ID or pid:fd pair expected"
|
msgid "process ID or pid:fd pair expected"
|
||||||
msgstr "ожидался ИД процесса или пара ИДпр:ДФ"
|
msgstr "ожидался ИД процесса или пара ИДпр:ДФ"
|
||||||
|
|
||||||
#: src/main/options.c:454
|
#: src/main/options.c:465
|
||||||
msgid "invalid process ID"
|
msgid "invalid process ID"
|
||||||
msgstr "неправильный ИД процесса"
|
msgstr "неправильный ИД процесса"
|
||||||
|
|
||||||
#: src/main/options.c:679
|
#: src/main/options.c:698
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s --help' for more information."
|
msgid "Try `%s --help' for more information."
|
||||||
msgstr "Выполните `%s --help' для получения подробностей."
|
msgstr "Выполните `%s --help' для получения подробностей."
|
||||||
|
|
||||||
#: src/main/options.c:681
|
#: src/main/options.c:700
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s -h' for more information."
|
msgid "Try `%s -h' for more information."
|
||||||
msgstr "Выполните `%s -h' для получения подробностей."
|
msgstr "Выполните `%s -h' для получения подробностей."
|
||||||
|
|
||||||
#: src/main/options.c:712
|
#: src/main/options.c:731
|
||||||
msgid ""
|
msgid ""
|
||||||
"cannot use line mode or transfer modifier options when watching file "
|
"cannot use line mode or transfer modifier options when watching file "
|
||||||
"descriptors"
|
"descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:721
|
#: src/main/options.c:740
|
||||||
msgid "cannot use cursor positioning when watching file descriptors"
|
msgid "cannot use cursor positioning when watching file descriptors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/options.c:730
|
#: src/main/options.c:749
|
||||||
msgid "cannot use remote control when watching file descriptors"
|
msgid "cannot use remote control when watching file descriptors"
|
||||||
msgstr "удалённое управление невозможно при отслеживании дескрипторов файлов"
|
msgstr "удалённое управление невозможно при отслеживании дескрипторов файлов"
|
||||||
|
|
||||||
#: src/main/options.c:739
|
#: src/main/options.c:758
|
||||||
msgid "cannot transfer files when watching file descriptors"
|
msgid "cannot transfer files when watching file descriptors"
|
||||||
msgstr "передача файлов невозможна при отслеживании дескрипторов файлов"
|
msgstr "передача файлов невозможна при отслеживании дескрипторов файлов"
|
||||||
|
|
||||||
#: src/main/options.c:754
|
#: src/main/options.c:773
|
||||||
msgid "not available on systems without /proc/self/fdinfo"
|
msgid "not available on systems without /proc/self/fdinfo"
|
||||||
msgstr "невозможно на системах без /proc/self/fdinfo"
|
msgstr "невозможно на системах без /proc/self/fdinfo"
|
||||||
|
|
||||||
#: src/main/remote.c:304
|
#: src/main/remote.c:309
|
||||||
msgid "message not received"
|
msgid "message not received"
|
||||||
msgstr "сообщение не получено"
|
msgstr "сообщение не получено"
|
||||||
|
|
||||||
#: src/main/remote.c:431
|
#: src/main/remote.c:440
|
||||||
msgid "SA_SIGINFO not supported on this system"
|
msgid "SA_SIGINFO not supported on this system"
|
||||||
msgstr "Этой системой не поддерживается SA_SIGINFO"
|
msgstr "Этой системой не поддерживается SA_SIGINFO"
|
||||||
|
|
||||||
@@ -396,48 +412,18 @@ msgstr "попытка блокировки не удалась"
|
|||||||
msgid "failed to open terminal"
|
msgid "failed to open terminal"
|
||||||
msgstr "не удалось открыть терминал"
|
msgstr "не удалось открыть терминал"
|
||||||
|
|
||||||
#: src/pv/display.c:233
|
#: src/pv/display.c:249
|
||||||
msgid "yzafpnum kMGTPEZY"
|
msgid "yzafpnum kMGTPEZY"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/display.c:251
|
#: src/pv/display.c:267
|
||||||
msgid "yzafpnum KMGTPEZY"
|
msgid "yzafpnum KMGTPEZY"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/display.c:681 src/pv/transfer.c:1011
|
#: src/pv/display.c:1067 src/pv/transfer.c:1056
|
||||||
msgid "buffer allocation failed"
|
msgid "buffer allocation failed"
|
||||||
msgstr "не удалось выделить память для буфера"
|
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
|
#: src/pv/file.c:149
|
||||||
msgid "failed to seek to start of output"
|
msgid "failed to seek to start of output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -466,19 +452,50 @@ msgstr "(нет)"
|
|||||||
msgid "(stdin)"
|
msgid "(stdin)"
|
||||||
msgstr "(стд. ввод)"
|
msgstr "(стд. ввод)"
|
||||||
|
|
||||||
#: src/pv/loop.c:548
|
#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:93
|
||||||
|
#: src/pv/format/rate.c:32 src/pv/loop.c:551
|
||||||
|
msgid "b/s"
|
||||||
|
msgstr "бит/с"
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36
|
||||||
|
msgid "/s"
|
||||||
|
msgstr "/с"
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36 src/pv/loop.c:551
|
||||||
|
msgid "B/s"
|
||||||
|
msgstr "байт/с"
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:31
|
||||||
|
msgid "b"
|
||||||
|
msgstr "бит"
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:35 src/pv/transfer.c:594
|
||||||
|
msgid "B"
|
||||||
|
msgstr "байт"
|
||||||
|
|
||||||
|
#: src/pv/format/eta.c:53 src/pv/format/eta.c:57
|
||||||
|
msgid "ETA"
|
||||||
|
msgstr "ОЖИД"
|
||||||
|
|
||||||
|
#: src/pv/format/fineta.c:81
|
||||||
|
msgid "FIN"
|
||||||
|
msgstr "ЗАВЕРШ"
|
||||||
|
|
||||||
|
#: src/pv/loop.c:550
|
||||||
msgid "rate min/avg/max/mdev"
|
msgid "rate min/avg/max/mdev"
|
||||||
msgstr "скор. мин/сред/макс/дев"
|
msgstr "скор. мин/сред/макс/дев"
|
||||||
|
|
||||||
#: src/pv/loop.c:560
|
#: src/pv/loop.c:562
|
||||||
msgid "rate not measured"
|
msgid "rate not measured"
|
||||||
msgstr "скорость не изменяется"
|
msgstr "скорость не изменяется"
|
||||||
|
|
||||||
#: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
|
#: src/pv/loop.c:772 src/pv/loop.c:823 src/pv/loop.c:876 src/pv/watchpid.c:99
|
||||||
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
||||||
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
||||||
#: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
|
#: 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
|
#: src/pv/watchpid.c:385 src/pv/watchpid.c:406
|
||||||
msgid "pid"
|
msgid "pid"
|
||||||
msgstr "ИДпр"
|
msgstr "ИДпр"
|
||||||
|
|
||||||
@@ -486,51 +503,51 @@ msgstr "ИДпр"
|
|||||||
msgid "history structure allocation failed"
|
msgid "history structure allocation failed"
|
||||||
msgstr "не удалось выделить память для структуры истории"
|
msgstr "не удалось выделить память для структуры истории"
|
||||||
|
|
||||||
#: src/pv/state.c:572 src/pv/state.c:583
|
#: src/pv/state.c:593 src/pv/state.c:604
|
||||||
msgid "file list allocation failed"
|
msgid "file list allocation failed"
|
||||||
msgstr "не удалось выделить память для списка файлов"
|
msgstr "не удалось выделить память для списка файлов"
|
||||||
|
|
||||||
#: src/pv/transfer.c:464
|
#: src/pv/transfer.c:463
|
||||||
msgid "read failed"
|
msgid "read failed"
|
||||||
msgstr "чтение не удалось"
|
msgstr "чтение не удалось"
|
||||||
|
|
||||||
#: src/pv/transfer.c:487
|
#: src/pv/transfer.c:479
|
||||||
msgid "warning: read errors detected"
|
msgid "warning: read errors detected"
|
||||||
msgstr "внимание: замечены ошибки чтения"
|
msgstr "внимание: замечены ошибки чтения"
|
||||||
|
|
||||||
#: src/pv/transfer.c:503
|
#: src/pv/transfer.c:495
|
||||||
msgid "file is not seekable"
|
msgid "file is not seekable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:581
|
#: src/pv/transfer.c:573
|
||||||
msgid "failed to seek past error"
|
msgid "failed to seek past error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:601
|
#: src/pv/transfer.c:593
|
||||||
msgid "skipped past read error"
|
msgid "skipped past read error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:642
|
#: src/pv/transfer.c:634
|
||||||
msgid "no transfer buffer allocated"
|
msgid "no transfer buffer allocated"
|
||||||
msgstr "не выделена память для буфера передачи"
|
msgstr "не выделена память для буфера передачи"
|
||||||
|
|
||||||
#: src/pv/transfer.c:684
|
#: src/pv/transfer.c:676
|
||||||
msgid "failed to set interval timer"
|
msgid "failed to set interval timer"
|
||||||
msgstr "не удалось задать измеритель временного промежутка"
|
msgstr "не удалось задать измеритель временного промежутка"
|
||||||
|
|
||||||
#: src/pv/transfer.c:710
|
#: src/pv/transfer.c:702
|
||||||
msgid "failed to clear interval timer"
|
msgid "failed to clear interval timer"
|
||||||
msgstr "не удалось очистить измеритель временного промежутка"
|
msgstr "не удалось очистить измеритель временного промежутка"
|
||||||
|
|
||||||
#: src/pv/transfer.c:740
|
#: src/pv/transfer.c:744
|
||||||
msgid "line position buffer allocation failed"
|
msgid "line position buffer allocation failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/pv/transfer.c:872
|
#: src/pv/transfer.c:917
|
||||||
msgid "write failed"
|
msgid "write failed"
|
||||||
msgstr "запись не удалась"
|
msgstr "запись не удалась"
|
||||||
|
|
||||||
#: src/pv/transfer.c:1109
|
#: src/pv/transfer.c:1154
|
||||||
msgid "select call failed"
|
msgid "select call failed"
|
||||||
msgstr "запрос выборки не удался"
|
msgstr "запрос выборки не удался"
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: pv 1.8.14\n"
|
"Project-Id-Version: pv 1.8.14\n"
|
||||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||||
"POT-Creation-Date: 2024-12-02 17:56+0000\n"
|
"POT-Creation-Date: 2024-12-22 12:09+0000\n"
|
||||||
"PO-Revision-Date: 2024-10-12 23:51+0000\n"
|
"PO-Revision-Date: 2024-10-12 23:51+0000\n"
|
||||||
"Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n"
|
"Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n"
|
||||||
"Language-Team: Turkish <https://translate.codeberg.org/projects/pv/pv/tr/>\n"
|
"Language-Team: Turkish <https://translate.codeberg.org/projects/pv/pv/tr/>\n"
|
||||||
@@ -13,264 +13,276 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 5.7.2\n"
|
"X-Generator: Weblate 5.7.2\n"
|
||||||
|
|
||||||
#: src/main/help.c:284
|
#: src/main/help.c:236
|
||||||
msgid "show progress bar"
|
msgid "show progress bar"
|
||||||
msgstr "ilerleme çubuğunu göster"
|
msgstr "ilerleme çubuğunu göster"
|
||||||
|
|
||||||
#: src/main/help.c:287
|
#: src/main/help.c:239
|
||||||
msgid "show elapsed time"
|
msgid "show elapsed time"
|
||||||
msgstr "geçen süreyi göster"
|
msgstr "geçen süreyi göster"
|
||||||
|
|
||||||
#: src/main/help.c:290
|
#: src/main/help.c:242
|
||||||
msgid "show estimated time of arrival (completion)"
|
msgid "show estimated time of arrival (completion)"
|
||||||
msgstr "tahmini varış (tamamlanma) zamanını göster"
|
msgstr "tahmini varış (tamamlanma) zamanını göster"
|
||||||
|
|
||||||
#: src/main/help.c:293
|
#: src/main/help.c:245
|
||||||
msgid "show absolute estimated time of arrival (completion)"
|
msgid "show absolute estimated time of arrival (completion)"
|
||||||
msgstr "mutlak tahmini varış (tamamlanma) zamanını göster"
|
msgstr "mutlak tahmini varış (tamamlanma) zamanını göster"
|
||||||
|
|
||||||
#: src/main/help.c:296
|
#: src/main/help.c:248
|
||||||
msgid "show data transfer rate counter"
|
msgid "show data transfer rate counter"
|
||||||
msgstr "veri aktarım oranı sayacını göster"
|
msgstr "veri aktarım oranı sayacını göster"
|
||||||
|
|
||||||
#: src/main/help.c:299
|
#: src/main/help.c:251
|
||||||
msgid "show data transfer average rate counter"
|
msgid "show data transfer average rate counter"
|
||||||
msgstr "veri aktarımı ortalama hız sayacını göster"
|
msgstr "veri aktarımı ortalama hız sayacını göster"
|
||||||
|
|
||||||
#: src/main/help.c:302
|
#: src/main/help.c:254
|
||||||
msgid "show number of bytes transferred"
|
msgid "show number of bytes transferred"
|
||||||
msgstr "aktarılan bayt sayısını göster"
|
msgstr "aktarılan bayt sayısını göster"
|
||||||
|
|
||||||
#: src/main/help.c:305
|
#: src/main/help.c:257
|
||||||
msgid "show percentage of transfer buffer in use"
|
msgid "show percentage of transfer buffer in use"
|
||||||
msgstr "aktarım tamponunun kullanım yüzdesini göster"
|
msgstr "aktarım tamponunun kullanım yüzdesini göster"
|
||||||
|
|
||||||
#: src/main/help.c:307
|
#: src/main/help.c:259
|
||||||
msgid "NUM"
|
msgid "NUM"
|
||||||
msgstr "NUM"
|
msgstr "NUM"
|
||||||
|
|
||||||
#: src/main/help.c:308
|
#: src/main/help.c:260
|
||||||
msgid "show NUM bytes last written"
|
msgid "show NUM bytes last written"
|
||||||
msgstr "son yazılan NUM baytlarını göster"
|
msgstr "son yazılan NUM baytlarını göster"
|
||||||
|
|
||||||
#: src/main/help.c:310
|
#: src/main/help.c:262
|
||||||
msgid "FORMAT"
|
msgid "FORMAT"
|
||||||
msgstr "FORMAT"
|
msgstr "FORMAT"
|
||||||
|
|
||||||
#: src/main/help.c:311
|
#: src/main/help.c:263
|
||||||
msgid "set output format to FORMAT"
|
msgid "set output format to FORMAT"
|
||||||
msgstr "çıktı formatını FORMAT olarak ayarlayın"
|
msgstr "çıktı formatını FORMAT olarak ayarlayın"
|
||||||
|
|
||||||
#: src/main/help.c:314
|
#: src/main/help.c:266
|
||||||
msgid "output percentages, not visual information"
|
msgid "output percentages, not visual information"
|
||||||
msgstr "görsel bilgileri değil, yüzdeleri çıktı olarak yazdır"
|
msgstr "görsel bilgileri değil, yüzdeleri çıktı olarak yazdır"
|
||||||
|
|
||||||
#: src/main/help.c:317
|
#: src/main/help.c:269
|
||||||
msgid "do not output any transfer information at all"
|
msgid "do not output any transfer information at all"
|
||||||
msgstr "hiçbir transfer bilgisini yazdırma"
|
msgstr "hiçbir transfer bilgisini yazdırma"
|
||||||
|
|
||||||
#: src/main/help.c:321
|
#: src/main/help.c:273
|
||||||
msgid "show number of bits transferred"
|
msgid "show number of bits transferred"
|
||||||
msgstr "aktarılan bit sayısını göster"
|
msgstr "aktarılan bit sayısını göster"
|
||||||
|
|
||||||
#: src/main/help.c:324
|
#: src/main/help.c:276
|
||||||
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
msgid "treat suffixes as multiples of 1000 rather than 1024"
|
||||||
msgstr "ekleri 1024 yerine 1000'in katları olarak değerlendir"
|
msgstr "ekleri 1024 yerine 1000'in katları olarak değerlendir"
|
||||||
|
|
||||||
#: src/main/help.c:327
|
#: src/main/help.c:279
|
||||||
msgid "display nothing until first byte transferred"
|
msgid "display nothing until first byte transferred"
|
||||||
msgstr "ilk bayt aktarılana kadar hiçbir şey gösterme"
|
msgstr "ilk bayt aktarılana kadar hiçbir şey gösterme"
|
||||||
|
|
||||||
#: src/main/help.c:329 src/main/help.c:344 src/main/help.c:347
|
#: src/main/help.c:281 src/main/help.c:296 src/main/help.c:299
|
||||||
msgid "SEC"
|
msgid "SEC"
|
||||||
msgstr "SEC"
|
msgstr "SEC"
|
||||||
|
|
||||||
#: src/main/help.c:330
|
#: src/main/help.c:282
|
||||||
msgid "display nothing until SEC seconds have passed"
|
msgid "display nothing until SEC seconds have passed"
|
||||||
msgstr "SEC saniye geçene kadar hiçbir şey gösterme"
|
msgstr "SEC saniye geçene kadar hiçbir şey gösterme"
|
||||||
|
|
||||||
#: src/main/help.c:332
|
#: src/main/help.c:284
|
||||||
msgid "SIZE"
|
msgid "SIZE"
|
||||||
msgstr "BOYUT"
|
msgstr "BOYUT"
|
||||||
|
|
||||||
#: src/main/help.c:333
|
#: src/main/help.c:285
|
||||||
msgid "set estimated data size to SIZE bytes"
|
msgid "set estimated data size to SIZE bytes"
|
||||||
msgstr "tahmini veri boyutunu BOYUT bayt olarak ayarlayın"
|
msgstr "tahmini veri boyutunu BOYUT bayt olarak ayarlayın"
|
||||||
|
|
||||||
#: src/main/help.c:336
|
#: src/main/help.c:288
|
||||||
msgid "if size unknown, show rate vs max rate"
|
msgid "if size unknown, show rate vs max rate"
|
||||||
msgstr "boyut bilinmiyorsa, oranı maksimum oranla göster"
|
msgstr "boyut bilinmiyorsa, oranı maksimum oranla göster"
|
||||||
|
|
||||||
#: src/main/help.c:339
|
#: src/main/help.c:291
|
||||||
msgid "count lines instead of bytes"
|
msgid "count lines instead of bytes"
|
||||||
msgstr "bayt yerine satır say"
|
msgstr "bayt yerine satır say"
|
||||||
|
|
||||||
#: src/main/help.c:342
|
#: src/main/help.c:294
|
||||||
msgid "lines are null-terminated"
|
msgid "lines are null-terminated"
|
||||||
msgstr "satırlar boş sonlandırılır"
|
msgstr "satırlar boş sonlandırılır"
|
||||||
|
|
||||||
#: src/main/help.c:345
|
#: src/main/help.c:297
|
||||||
msgid "update every SEC seconds"
|
msgid "update every SEC seconds"
|
||||||
msgstr "her SEC saniyede bir güncelleme"
|
msgstr "her SEC saniyede bir güncelleme"
|
||||||
|
|
||||||
#: src/main/help.c:348
|
#: src/main/help.c:300
|
||||||
msgid "compute average rate over past SEC seconds (default 30s)"
|
msgid "compute average rate over past SEC seconds (default 30s)"
|
||||||
msgstr "geçmiş SEC saniyeleri üzerinden ortalama hızı hesapla (varsayılan 30s)"
|
msgstr "geçmiş SEC saniyeleri üzerinden ortalama hızı hesapla (varsayılan 30s)"
|
||||||
|
|
||||||
#: src/main/help.c:350
|
#: src/main/help.c:302
|
||||||
msgid "WIDTH"
|
msgid "WIDTH"
|
||||||
msgstr "GENİŞLİK"
|
msgstr "GENİŞLİK"
|
||||||
|
|
||||||
#: src/main/help.c:351
|
#: src/main/help.c:303
|
||||||
msgid "assume terminal is WIDTH characters wide"
|
msgid "assume terminal is WIDTH characters wide"
|
||||||
msgstr "terminalin GENİŞLİK karakter genişliğinde olduğunu varsayalım"
|
msgstr "terminalin GENİŞLİK karakter genişliğinde olduğunu varsayalım"
|
||||||
|
|
||||||
#: src/main/help.c:353
|
#: src/main/help.c:305
|
||||||
msgid "HEIGHT"
|
msgid "HEIGHT"
|
||||||
msgstr "YÜKSEKLİK"
|
msgstr "YÜKSEKLİK"
|
||||||
|
|
||||||
#: src/main/help.c:354
|
#: src/main/help.c:306
|
||||||
msgid "assume terminal is HEIGHT rows high"
|
msgid "assume terminal is HEIGHT rows high"
|
||||||
msgstr "terminalin YÜKSEKLİK sıraları yüksekliğinde olduğunu varsayalım"
|
msgstr "terminalin YÜKSEKLİK sıraları yüksekliğinde olduğunu varsayalım"
|
||||||
|
|
||||||
#: src/main/help.c:356
|
#: src/main/help.c:308
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr "İSİM"
|
msgstr "İSİM"
|
||||||
|
|
||||||
#: src/main/help.c:357
|
#: src/main/help.c:309
|
||||||
msgid "prefix visual information with NAME"
|
msgid "prefix visual information with NAME"
|
||||||
msgstr "görsel bilgiyi İSİM ile öne ekle"
|
msgstr "görsel bilgiyi İSİM ile öne ekle"
|
||||||
|
|
||||||
#: src/main/help.c:359
|
#: src/main/help.c:311
|
||||||
|
msgid "STYLE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:312
|
||||||
|
msgid "set default bar style to NAME"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:314
|
||||||
msgid "SPEC"
|
msgid "SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:360
|
#: src/main/help.c:315
|
||||||
msgid "also send progress to SPEC"
|
msgid "also send progress to SPEC"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main/help.c:363
|
#: src/main/help.c:318
|
||||||
msgid "output transfer statistics at the end"
|
msgid "output transfer statistics at the end"
|
||||||
msgstr "transfer istatistiklerini sonda göster"
|
msgstr "transfer istatistiklerini sonda göster"
|
||||||
|
|
||||||
#: src/main/help.c:366
|
#: src/main/help.c:321
|
||||||
msgid "output even if standard error is not a terminal"
|
msgid "output even if standard error is not a terminal"
|
||||||
msgstr "standart hata bir terminal olmasa bile çıktı yazdır"
|
msgstr "standart hata bir terminal olmasa bile çıktı yazdır"
|
||||||
|
|
||||||
#: src/main/help.c:369
|
#: src/main/help.c:324
|
||||||
msgid "use cursor positioning escape sequences"
|
msgid "use cursor positioning escape sequences"
|
||||||
msgstr "imleç konumlandırma kaçış dizilerini kullan"
|
msgstr "imleç konumlandırma kaçış dizilerini kullan"
|
||||||
|
|
||||||
#: src/main/help.c:372 src/main/help.c:402 src/main/help.c:414
|
#: src/main/help.c:327 src/main/help.c:357 src/main/help.c:369
|
||||||
#: src/main/help.c:424
|
#: src/main/help.c:379
|
||||||
msgid "FILE"
|
msgid "FILE"
|
||||||
msgstr "DOSYA"
|
msgstr "DOSYA"
|
||||||
|
|
||||||
#: src/main/help.c:373
|
#: src/main/help.c:328
|
||||||
msgid "write output to FILE instead of stdout"
|
msgid "write output to FILE instead of stdout"
|
||||||
msgstr "çıktıyı stdout yerine DOSYA'ya yaz"
|
msgstr "çıktıyı stdout yerine DOSYA'ya yaz"
|
||||||
|
|
||||||
#: src/main/help.c:375
|
#: src/main/help.c:330
|
||||||
msgid "RATE"
|
msgid "RATE"
|
||||||
msgstr "ORAN"
|
msgstr "ORAN"
|
||||||
|
|
||||||
#: src/main/help.c:376
|
#: src/main/help.c:331
|
||||||
msgid "limit transfer to RATE bytes per second"
|
msgid "limit transfer to RATE bytes per second"
|
||||||
msgstr "aktarımı saniye başına ORAN bayt ile sınırlandırın"
|
msgstr "aktarımı saniye başına ORAN bayt ile sınırlandırın"
|
||||||
|
|
||||||
#: src/main/help.c:378 src/main/help.c:387
|
#: src/main/help.c:333 src/main/help.c:342
|
||||||
msgid "BYTES"
|
msgid "BYTES"
|
||||||
msgstr "BAYTLAR"
|
msgstr "BAYTLAR"
|
||||||
|
|
||||||
#: src/main/help.c:379
|
#: src/main/help.c:334
|
||||||
msgid "use a buffer size of BYTES"
|
msgid "use a buffer size of BYTES"
|
||||||
msgstr "BAYTLAR tampon boyutu kullanın"
|
msgstr "BAYTLAR tampon boyutu kullanın"
|
||||||
|
|
||||||
#: src/main/help.c:382
|
#: src/main/help.c:337
|
||||||
msgid "never use splice(), always use read/write"
|
msgid "never use splice(), always use read/write"
|
||||||
msgstr "splice() kullanma, her zaman read/write kullan"
|
msgstr "splice() kullanma, her zaman read/write kullan"
|
||||||
|
|
||||||
#: src/main/help.c:385
|
#: src/main/help.c:340
|
||||||
msgid "skip read errors in input"
|
msgid "skip read errors in input"
|
||||||
msgstr "girdideki okuma hatalarını atla"
|
msgstr "girdideki okuma hatalarını atla"
|
||||||
|
|
||||||
#: src/main/help.c:388
|
#: src/main/help.c:343
|
||||||
msgid "skip errors in BYTES blocks at a time"
|
msgid "skip errors in BYTES blocks at a time"
|
||||||
msgstr "BAYTLAR blokları halinde hataları atla"
|
msgstr "BAYTLAR blokları halinde hataları atla"
|
||||||
|
|
||||||
#: src/main/help.c:391
|
#: src/main/help.c:346
|
||||||
msgid "stop after --size bytes have been transferred"
|
msgid "stop after --size bytes have been transferred"
|
||||||
msgstr "--size bayt transfer edildikten sonra dur"
|
msgstr "--size bayt transfer edildikten sonra dur"
|
||||||
|
|
||||||
#: src/main/help.c:394
|
#: src/main/help.c:349
|
||||||
msgid "flush cache to disk after every write"
|
msgid "flush cache to disk after every write"
|
||||||
msgstr "her yazmadan sonra önbelleği diske boşalt"
|
msgstr "her yazmadan sonra önbelleği diske boşalt"
|
||||||
|
|
||||||
#: src/main/help.c:397
|
#: src/main/help.c:352
|
||||||
msgid "use direct I/O to bypass cache"
|
msgid "use direct I/O to bypass cache"
|
||||||
msgstr "Önbelleği atlamak için doğrudan I/O kullan"
|
msgstr "Önbelleği atlamak için doğrudan I/O kullan"
|
||||||
|
|
||||||
#: src/main/help.c:400
|
#: src/main/help.c:355
|
||||||
msgid "discard input instead of writing to output"
|
msgid "discard input instead of writing to output"
|
||||||
msgstr "Girdiyi çıktıya yazmak yerine yok say"
|
msgstr "Girdiyi çıktıya yazmak yerine yok say"
|
||||||
|
|
||||||
#: src/main/help.c:403
|
#: src/main/help.c:358
|
||||||
msgid "write all input to FILE before writing to output"
|
msgid "write all input to FILE before writing to output"
|
||||||
msgstr "çıktıya yazmadan önce tüm girdiyi DOSYA'ya yaz"
|
msgstr "çıktıya yazmadan önce tüm girdiyi DOSYA'ya yaz"
|
||||||
|
|
||||||
#: src/main/help.c:405
|
#: src/main/help.c:360
|
||||||
msgid "PID[:FD]"
|
msgid "PID[:FD]"
|
||||||
msgstr "PID[:FD]"
|
msgstr "PID[:FD]"
|
||||||
|
|
||||||
#: src/main/help.c:406
|
#: src/main/help.c:361
|
||||||
msgid "watch file FD opened by process PID"
|
msgid "watch file FD opened by process PID"
|
||||||
msgstr "FD izleme dosyası PID işlemi tarafından açıldı"
|
msgstr "FD izleme dosyası PID işlemi tarafından açıldı"
|
||||||
|
|
||||||
#: src/main/help.c:409
|
#: src/main/help.c:364
|
||||||
msgid "PID"
|
msgid "PID"
|
||||||
msgstr "PID"
|
msgstr "PID"
|
||||||
|
|
||||||
#: src/main/help.c:410
|
#: src/main/help.c:365
|
||||||
msgid "update settings of process PID"
|
msgid "update settings of process PID"
|
||||||
msgstr "süreç PID ayarlarını güncelle"
|
msgstr "süreç PID ayarlarını güncelle"
|
||||||
|
|
||||||
#: src/main/help.c:415
|
#: src/main/help.c:370
|
||||||
msgid "save process ID in FILE"
|
msgid "save process ID in FILE"
|
||||||
msgstr "FILE'da işlem kimliğini (ID) kaydet"
|
msgstr "FILE'da işlem kimliğini (ID) kaydet"
|
||||||
|
|
||||||
#: src/main/help.c:418
|
#: src/main/help.c:373
|
||||||
msgid "show this help and exit"
|
msgid "show this help and exit"
|
||||||
msgstr "bu yardımı göster ve çık"
|
msgstr "bu yardımı göster ve çık"
|
||||||
|
|
||||||
#: src/main/help.c:421
|
#: src/main/help.c:376
|
||||||
msgid "show version information and exit"
|
msgid "show version information and exit"
|
||||||
msgstr "sürüm bilgilerini göster ve çık"
|
msgstr "sürüm bilgilerini göster ve çık"
|
||||||
|
|
||||||
#: src/main/help.c:425
|
#: src/main/help.c:380
|
||||||
msgid "write debug logs to FILE"
|
msgid "write debug logs to FILE"
|
||||||
msgstr "Hata ayıklama kayıtlarını DOSYA'ya yaz"
|
msgstr "Hata ayıklama kayıtlarını DOSYA'ya yaz"
|
||||||
|
|
||||||
#: src/main/help.c:450
|
#: src/main/help.c:406
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Usage: %s [OPTION] [FILE]..."
|
msgid "Usage: %s [OPTION] [FILE]..."
|
||||||
msgstr "Kullanım şekli: %s [AYAR] [DOSYA]..."
|
msgstr "Kullanım şekli: %s [AYAR] [DOSYA]..."
|
||||||
|
|
||||||
#: src/main/help.c:461
|
#: src/main/help.c:417
|
||||||
msgid ""
|
msgid ""
|
||||||
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"İzleme ile DOSYA(lar)ı veya standart girdiyi standart çıktı ile birleştirin."
|
"İzleme ile DOSYA(lar)ı veya standart girdiyi standart çıktı ile birleştirin."
|
||||||
|
|
||||||
#: src/main/help.c:598
|
#: src/main/help.c:555
|
||||||
|
msgid "Supported format sequences:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/help.c:569
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please report any bugs to: %s"
|
msgid "Please report any bugs to: %s"
|
||||||
msgstr "Lütfen hataları şu adrese bildirin: %s"
|
msgstr "Lütfen hataları şu adrese bildirin: %s"
|
||||||
|
|
||||||
#: src/main/main.c:230
|
#: src/main/main.c:232
|
||||||
msgid "(input)"
|
msgid "(input)"
|
||||||
msgstr "(giriş)"
|
msgstr "(giriş)"
|
||||||
|
|
||||||
#: src/main/main.c:319
|
#: src/main/main.c:328
|
||||||
msgid "state allocation failed"
|
msgid "state allocation failed"
|
||||||
msgstr "durum tahsisi başarısız oldu"
|
msgstr "durum tahsisi başarısız oldu"
|
||||||
|
|
||||||
@@ -298,41 +310,45 @@ msgstr "blok aygıtı açılamadı"
|
|||||||
msgid "failed to determine size of block device"
|
msgid "failed to determine size of block device"
|
||||||
msgstr "blok aygıtının boyutu belirlenemedi"
|
msgstr "blok aygıtının boyutu belirlenemedi"
|
||||||
|
|
||||||
#: src/main/options.c:344
|
#: src/main/options.c:345
|
||||||
msgid "option structure allocation failed"
|
msgid "option structure allocation failed"
|
||||||
msgstr "seçenek yapısı tahsisi başarısız oldu"
|
msgstr "seçenek yapısı tahsisi başarısız oldu"
|
||||||
|
|
||||||
#: src/main/options.c:363
|
#: src/main/options.c:364
|
||||||
msgid "option structure argv allocation failed"
|
msgid "option structure argv allocation failed"
|
||||||
msgstr "seçenek yapısı argv tahsisi başarısız oldu"
|
msgstr "seçenek yapısı argv tahsisi başarısız oldu"
|
||||||
|
|
||||||
#: src/main/options.c:425
|
#: src/main/options.c:417
|
||||||
|
msgid "numeric value not understood"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main/options.c:435
|
||||||
msgid "integer argument expected"
|
msgid "integer argument expected"
|
||||||
msgstr "tamsayı bağımsız değişkeni bekleniyor"
|
msgstr "tamsayı bağımsız değişkeni bekleniyor"
|
||||||
|
|
||||||
#: src/main/options.c:436
|
#: src/main/options.c:447
|
||||||
msgid "numeric argument expected"
|
msgid "numeric argument expected"
|
||||||
msgstr "sayısal bağımsız değişken bekleniyor"
|
msgstr "sayısal bağımsız değişken bekleniyor"
|
||||||
|
|
||||||
#: src/main/options.c:447
|
#: src/main/options.c:458
|
||||||
msgid "process ID or pid:fd pair expected"
|
msgid "process ID or pid:fd pair expected"
|
||||||
msgstr "süreç kimliği (ID) veya pid:fd çifti bekleniyor"
|
msgstr "süreç kimliği (ID) veya pid:fd çifti bekleniyor"
|
||||||
|
|
||||||
#: src/main/options.c:454
|
#: src/main/options.c:465
|
||||||
msgid "invalid process ID"
|
msgid "invalid process ID"
|
||||||
msgstr "geçersiz süreç kimliği (ID)"
|
msgstr "geçersiz süreç kimliği (ID)"
|
||||||
|
|
||||||
#: src/main/options.c:679
|
#: src/main/options.c:698
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s --help' for more information."
|
msgid "Try `%s --help' for more information."
|
||||||
msgstr "Daha fazla bilgi için `%s --help' seçeneğini deneyin."
|
msgstr "Daha fazla bilgi için `%s --help' seçeneğini deneyin."
|
||||||
|
|
||||||
#: src/main/options.c:681
|
#: src/main/options.c:700
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Try `%s -h' for more information."
|
msgid "Try `%s -h' for more information."
|
||||||
msgstr "Daha fazla bilgi için `%s -h' seçeneğini deneyin."
|
msgstr "Daha fazla bilgi için `%s -h' seçeneğini deneyin."
|
||||||
|
|
||||||
#: src/main/options.c:712
|
#: src/main/options.c:731
|
||||||
msgid ""
|
msgid ""
|
||||||
"cannot use line mode or transfer modifier options when watching file "
|
"cannot use line mode or transfer modifier options when watching file "
|
||||||
"descriptors"
|
"descriptors"
|
||||||
@@ -340,27 +356,27 @@ msgstr ""
|
|||||||
"dosya tanımlayıcılarını izlerken satır modu veya aktarım değiştirici "
|
"dosya tanımlayıcılarını izlerken satır modu veya aktarım değiştirici "
|
||||||
"seçeneklerini kullanamaz"
|
"seçeneklerini kullanamaz"
|
||||||
|
|
||||||
#: src/main/options.c:721
|
#: src/main/options.c:740
|
||||||
msgid "cannot use cursor positioning when watching file descriptors"
|
msgid "cannot use cursor positioning when watching file descriptors"
|
||||||
msgstr "dosya tanımlayıcılarını izlerken imleç konumlandırmayı kullanamaz"
|
msgstr "dosya tanımlayıcılarını izlerken imleç konumlandırmayı kullanamaz"
|
||||||
|
|
||||||
#: src/main/options.c:730
|
#: src/main/options.c:749
|
||||||
msgid "cannot use remote control when watching file descriptors"
|
msgid "cannot use remote control when watching file descriptors"
|
||||||
msgstr "dosya tanımlayıcılarını izlerken uzaktan kumandayı kullanamaz"
|
msgstr "dosya tanımlayıcılarını izlerken uzaktan kumandayı kullanamaz"
|
||||||
|
|
||||||
#: src/main/options.c:739
|
#: src/main/options.c:758
|
||||||
msgid "cannot transfer files when watching file descriptors"
|
msgid "cannot transfer files when watching file descriptors"
|
||||||
msgstr "dosya tanımlayıcıları izlenirken dosya aktarılamıyor"
|
msgstr "dosya tanımlayıcıları izlenirken dosya aktarılamıyor"
|
||||||
|
|
||||||
#: src/main/options.c:754
|
#: src/main/options.c:773
|
||||||
msgid "not available on systems without /proc/self/fdinfo"
|
msgid "not available on systems without /proc/self/fdinfo"
|
||||||
msgstr "/proc/self/fdinfo olmayan sistemlerde kullanılamaz"
|
msgstr "/proc/self/fdinfo olmayan sistemlerde kullanılamaz"
|
||||||
|
|
||||||
#: src/main/remote.c:304
|
#: src/main/remote.c:309
|
||||||
msgid "message not received"
|
msgid "message not received"
|
||||||
msgstr "mesaj alınamadı"
|
msgstr "mesaj alınamadı"
|
||||||
|
|
||||||
#: src/main/remote.c:431
|
#: src/main/remote.c:440
|
||||||
msgid "SA_SIGINFO not supported on this system"
|
msgid "SA_SIGINFO not supported on this system"
|
||||||
msgstr "SA_SIGINFO bu sistemde desteklenmiyor"
|
msgstr "SA_SIGINFO bu sistemde desteklenmiyor"
|
||||||
|
|
||||||
@@ -397,48 +413,18 @@ msgstr "kilit denemesi başarısız oldu"
|
|||||||
msgid "failed to open terminal"
|
msgid "failed to open terminal"
|
||||||
msgstr "terminal açılamadı"
|
msgstr "terminal açılamadı"
|
||||||
|
|
||||||
#: src/pv/display.c:233
|
#: src/pv/display.c:249
|
||||||
msgid "yzafpnum kMGTPEZY"
|
msgid "yzafpnum kMGTPEZY"
|
||||||
msgstr "yzafpnum kMGTPEZY"
|
msgstr "yzafpnum kMGTPEZY"
|
||||||
|
|
||||||
#: src/pv/display.c:251
|
#: src/pv/display.c:267
|
||||||
msgid "yzafpnum KMGTPEZY"
|
msgid "yzafpnum KMGTPEZY"
|
||||||
msgstr "yzafpnum KMGTPEZY"
|
msgstr "yzafpnum KMGTPEZY"
|
||||||
|
|
||||||
#: src/pv/display.c:681 src/pv/transfer.c:1011
|
#: src/pv/display.c:1067 src/pv/transfer.c:1056
|
||||||
msgid "buffer allocation failed"
|
msgid "buffer allocation failed"
|
||||||
msgstr "arabellek tahsisi başarısız oldu"
|
msgstr "arabellek tahsisi başarısız oldu"
|
||||||
|
|
||||||
#: src/pv/display.c:810
|
|
||||||
msgid "b"
|
|
||||||
msgstr "b"
|
|
||||||
|
|
||||||
#: src/pv/display.c:813 src/pv/transfer.c:602
|
|
||||||
msgid "B"
|
|
||||||
msgstr "B"
|
|
||||||
|
|
||||||
#: src/pv/display.c:857 src/pv/display.c:872 src/pv/display.c:1091
|
|
||||||
#: src/pv/loop.c:549
|
|
||||||
msgid "b/s"
|
|
||||||
msgstr "b/s"
|
|
||||||
|
|
||||||
#: src/pv/display.c:861 src/pv/display.c:876 src/pv/display.c:1095
|
|
||||||
msgid "/s"
|
|
||||||
msgstr "/s"
|
|
||||||
|
|
||||||
#: 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:904 src/pv/display.c:908
|
|
||||||
msgid "ETA"
|
|
||||||
msgstr "ETA"
|
|
||||||
|
|
||||||
#: src/pv/display.c:974
|
|
||||||
msgid "FIN"
|
|
||||||
msgstr "FIN"
|
|
||||||
|
|
||||||
#: src/pv/file.c:149
|
#: src/pv/file.c:149
|
||||||
msgid "failed to seek to start of output"
|
msgid "failed to seek to start of output"
|
||||||
msgstr "çıktının başlangıcına ulaşılamadı"
|
msgstr "çıktının başlangıcına ulaşılamadı"
|
||||||
@@ -467,19 +453,50 @@ msgstr "(yok)"
|
|||||||
msgid "(stdin)"
|
msgid "(stdin)"
|
||||||
msgstr "(stdin)"
|
msgstr "(stdin)"
|
||||||
|
|
||||||
#: src/pv/loop.c:548
|
#: src/pv/format/averagerate.c:30 src/pv/format/progressbar.c:93
|
||||||
|
#: src/pv/format/rate.c:32 src/pv/loop.c:551
|
||||||
|
msgid "b/s"
|
||||||
|
msgstr "b/s"
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36
|
||||||
|
msgid "/s"
|
||||||
|
msgstr "/s"
|
||||||
|
|
||||||
|
#: src/pv/format/averagerate.c:34 src/pv/format/progressbar.c:97
|
||||||
|
#: src/pv/format/rate.c:36 src/pv/loop.c:551
|
||||||
|
msgid "B/s"
|
||||||
|
msgstr "B/s"
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:31
|
||||||
|
msgid "b"
|
||||||
|
msgstr "b"
|
||||||
|
|
||||||
|
#: src/pv/format/bytes.c:35 src/pv/transfer.c:594
|
||||||
|
msgid "B"
|
||||||
|
msgstr "B"
|
||||||
|
|
||||||
|
#: src/pv/format/eta.c:53 src/pv/format/eta.c:57
|
||||||
|
msgid "ETA"
|
||||||
|
msgstr "ETA"
|
||||||
|
|
||||||
|
#: src/pv/format/fineta.c:81
|
||||||
|
msgid "FIN"
|
||||||
|
msgstr "FIN"
|
||||||
|
|
||||||
|
#: src/pv/loop.c:550
|
||||||
msgid "rate min/avg/max/mdev"
|
msgid "rate min/avg/max/mdev"
|
||||||
msgstr "oran min/ortalama/maks/standart sapma"
|
msgstr "oran min/ortalama/maks/standart sapma"
|
||||||
|
|
||||||
#: src/pv/loop.c:560
|
#: src/pv/loop.c:562
|
||||||
msgid "rate not measured"
|
msgid "rate not measured"
|
||||||
msgstr "oran ölçülmedi"
|
msgstr "oran ölçülmedi"
|
||||||
|
|
||||||
#: src/pv/loop.c:767 src/pv/loop.c:818 src/pv/loop.c:859 src/pv/watchpid.c:99
|
#: src/pv/loop.c:772 src/pv/loop.c:823 src/pv/loop.c:876 src/pv/watchpid.c:99
|
||||||
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
#: src/pv/watchpid.c:109 src/pv/watchpid.c:120 src/pv/watchpid.c:128
|
||||||
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
#: src/pv/watchpid.c:165 src/pv/watchpid.c:184 src/pv/watchpid.c:192
|
||||||
#: src/pv/watchpid.c:202 src/pv/watchpid.c:300 src/pv/watchpid.c:308
|
#: 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
|
#: src/pv/watchpid.c:385 src/pv/watchpid.c:406
|
||||||
msgid "pid"
|
msgid "pid"
|
||||||
msgstr "pid"
|
msgstr "pid"
|
||||||
|
|
||||||
@@ -487,51 +504,51 @@ msgstr "pid"
|
|||||||
msgid "history structure allocation failed"
|
msgid "history structure allocation failed"
|
||||||
msgstr "geçmiş yapısı tahsisi başarısız oldu"
|
msgstr "geçmiş yapısı tahsisi başarısız oldu"
|
||||||
|
|
||||||
#: src/pv/state.c:572 src/pv/state.c:583
|
#: src/pv/state.c:593 src/pv/state.c:604
|
||||||
msgid "file list allocation failed"
|
msgid "file list allocation failed"
|
||||||
msgstr "dosya listesi tahsisi başarısız oldu"
|
msgstr "dosya listesi tahsisi başarısız oldu"
|
||||||
|
|
||||||
#: src/pv/transfer.c:464
|
#: src/pv/transfer.c:463
|
||||||
msgid "read failed"
|
msgid "read failed"
|
||||||
msgstr "okuma başarısız"
|
msgstr "okuma başarısız"
|
||||||
|
|
||||||
#: src/pv/transfer.c:487
|
#: src/pv/transfer.c:479
|
||||||
msgid "warning: read errors detected"
|
msgid "warning: read errors detected"
|
||||||
msgstr "uyarı: okuma hataları tespit edildi"
|
msgstr "uyarı: okuma hataları tespit edildi"
|
||||||
|
|
||||||
#: src/pv/transfer.c:503
|
#: src/pv/transfer.c:495
|
||||||
msgid "file is not seekable"
|
msgid "file is not seekable"
|
||||||
msgstr "dosya aranabilir değil"
|
msgstr "dosya aranabilir değil"
|
||||||
|
|
||||||
#: src/pv/transfer.c:581
|
#: src/pv/transfer.c:573
|
||||||
msgid "failed to seek past error"
|
msgid "failed to seek past error"
|
||||||
msgstr "geçmiş hatayı aramakta başarısız oldu"
|
msgstr "geçmiş hatayı aramakta başarısız oldu"
|
||||||
|
|
||||||
#: src/pv/transfer.c:601
|
#: src/pv/transfer.c:593
|
||||||
msgid "skipped past read error"
|
msgid "skipped past read error"
|
||||||
msgstr "geçmiş okuma hatası atlandı"
|
msgstr "geçmiş okuma hatası atlandı"
|
||||||
|
|
||||||
#: src/pv/transfer.c:642
|
#: src/pv/transfer.c:634
|
||||||
msgid "no transfer buffer allocated"
|
msgid "no transfer buffer allocated"
|
||||||
msgstr "aktarım arabelleği ayrılmamış"
|
msgstr "aktarım arabelleği ayrılmamış"
|
||||||
|
|
||||||
#: src/pv/transfer.c:684
|
#: src/pv/transfer.c:676
|
||||||
msgid "failed to set interval timer"
|
msgid "failed to set interval timer"
|
||||||
msgstr "aralık zamanlayıcısı ayarlanamadı"
|
msgstr "aralık zamanlayıcısı ayarlanamadı"
|
||||||
|
|
||||||
#: src/pv/transfer.c:710
|
#: src/pv/transfer.c:702
|
||||||
msgid "failed to clear interval timer"
|
msgid "failed to clear interval timer"
|
||||||
msgstr "aralık zamanlayıcısı temizlenemedi"
|
msgstr "aralık zamanlayıcısı temizlenemedi"
|
||||||
|
|
||||||
#: src/pv/transfer.c:740
|
#: src/pv/transfer.c:744
|
||||||
msgid "line position buffer allocation failed"
|
msgid "line position buffer allocation failed"
|
||||||
msgstr "satır konumu arabellek tahsisi başarısız oldu"
|
msgstr "satır konumu arabellek tahsisi başarısız oldu"
|
||||||
|
|
||||||
#: src/pv/transfer.c:872
|
#: src/pv/transfer.c:917
|
||||||
msgid "write failed"
|
msgid "write failed"
|
||||||
msgstr "yazma başarısız"
|
msgstr "yazma başarısız"
|
||||||
|
|
||||||
#: src/pv/transfer.c:1109
|
#: src/pv/transfer.c:1154
|
||||||
msgid "select call failed"
|
msgid "select call failed"
|
||||||
msgstr "seçme çağrısı başarısız oldu"
|
msgstr "seçme çağrısı başarısız oldu"
|
||||||
|
|
||||||
|
|||||||
@@ -43,3 +43,11 @@ typedef bool _Bool;
|
|||||||
# define true 1
|
# define true 1
|
||||||
# define __bool_true_false_are_defined 1
|
# define __bool_true_false_are_defined 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Whether "--remote" should be available. */
|
||||||
|
#undef PV_REMOTE_CONTROL
|
||||||
|
#if HAVE_DECL_SA_SIGINFO
|
||||||
|
# if SIGINFO_PROVIDES_PID
|
||||||
|
#define PV_REMOTE_CONTROL 1
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
/* Debugging support enabled */
|
/* Debugging support enabled */
|
||||||
#undef ENABLE_DEBUGGING
|
#undef ENABLE_DEBUGGING
|
||||||
|
|
||||||
|
/* Build with ncurses support */
|
||||||
|
#undef ENABLE_NCURSES
|
||||||
|
|
||||||
/* Define to 1 if translation of program messages to the user's native
|
/* Define to 1 if translation of program messages to the user's native
|
||||||
language is requested. */
|
language is requested. */
|
||||||
#undef ENABLE_NLS
|
#undef ENABLE_NLS
|
||||||
@@ -28,6 +31,10 @@
|
|||||||
*/
|
*/
|
||||||
#undef HAVE_DCGETTEXT
|
#undef HAVE_DCGETTEXT
|
||||||
|
|
||||||
|
/* Define to 1 if you have the declaration of `SA_SIGINFO', and to 0 if you
|
||||||
|
don't. */
|
||||||
|
#undef HAVE_DECL_SA_SIGINFO
|
||||||
|
|
||||||
/* Define to 1 if you have the `dup2' function. */
|
/* Define to 1 if you have the `dup2' function. */
|
||||||
#undef HAVE_DUP2
|
#undef HAVE_DUP2
|
||||||
|
|
||||||
@@ -37,6 +44,9 @@
|
|||||||
/* Define to 1 if you have the `fdatasync' function. */
|
/* Define to 1 if you have the `fdatasync' function. */
|
||||||
#undef HAVE_FDATASYNC
|
#undef HAVE_FDATASYNC
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fmod' function. */
|
||||||
|
#undef HAVE_FMOD
|
||||||
|
|
||||||
/* Define to 1 if you have the `fpathconf' function. */
|
/* Define to 1 if you have the `fpathconf' function. */
|
||||||
#undef HAVE_FPATHCONF
|
#undef HAVE_FPATHCONF
|
||||||
|
|
||||||
@@ -61,6 +71,9 @@
|
|||||||
/* IPC support enabled */
|
/* IPC support enabled */
|
||||||
#undef HAVE_IPC
|
#undef HAVE_IPC
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <langinfo.h> header file. */
|
||||||
|
#undef HAVE_LANGINFO_H
|
||||||
|
|
||||||
/* Define to 1 if you have the <libgen.h> header file. */
|
/* Define to 1 if you have the <libgen.h> header file. */
|
||||||
#undef HAVE_LIBGEN_H
|
#undef HAVE_LIBGEN_H
|
||||||
|
|
||||||
@@ -196,6 +209,9 @@
|
|||||||
/* Define to 1 if you have the <termios.h> header file. */
|
/* Define to 1 if you have the <termios.h> header file. */
|
||||||
#undef HAVE_TERMIOS_H
|
#undef HAVE_TERMIOS_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <term.h> header file. */
|
||||||
|
#undef HAVE_TERM_H
|
||||||
|
|
||||||
/* Define to 1 if you have the <unistd.h> header file. */
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
#undef HAVE_UNISTD_H
|
#undef HAVE_UNISTD_H
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ struct opts_s {
|
|||||||
/*@keep@*/ const char *program_name; /* name the program is running as */
|
/*@keep@*/ const char *program_name; /* name the program is running as */
|
||||||
/*@keep@*/ /*@null@*/ char *output; /* fd to write output to */
|
/*@keep@*/ /*@null@*/ char *output; /* fd to write output to */
|
||||||
/*@keep@*/ /*@null@*/ char *name; /* display name, if any */
|
/*@keep@*/ /*@null@*/ char *name; /* display name, if any */
|
||||||
|
/*@keep@*/ /*@null@*/ char *default_bar_style; /* default bar style */
|
||||||
/*@keep@*/ /*@null@*/ char *format; /* output format, if any */
|
/*@keep@*/ /*@null@*/ char *format; /* output format, if any */
|
||||||
/*@keep@*/ /*@null@*/ char *pidfile; /* PID file, if any */
|
/*@keep@*/ /*@null@*/ char *pidfile; /* PID file, if any */
|
||||||
/*@keep@*/ /*@null@*/ char *store_and_forward_file; /* store and forward file, if any */
|
/*@keep@*/ /*@null@*/ char *store_and_forward_file; /* store and forward file, if any */
|
||||||
|
|||||||
+206
-44
@@ -9,6 +9,9 @@
|
|||||||
#ifndef _PV_INTERNAL_H
|
#ifndef _PV_INTERNAL_H
|
||||||
#define _PV_INTERNAL_H 1
|
#define _PV_INTERNAL_H 1
|
||||||
|
|
||||||
|
#ifdef HAVE_STDINT_H
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@@ -20,26 +23,6 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* Types of display component that make up an output string.
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
PV_COMPONENT_STRING, /* fixed string */
|
|
||||||
PV_COMPONENT_PROGRESS, /* progress bar, with percentage if known */
|
|
||||||
PV_COMPONENT_BYTES, /* number of bytes transferred */
|
|
||||||
PV_COMPONENT_TIMER, /* elapsed time */
|
|
||||||
PV_COMPONENT_RATE, /* current transfer rate */
|
|
||||||
PV_COMPONENT_AVERAGERATE, /* average transfer rate */
|
|
||||||
PV_COMPONENT_ETA, /* estimated time remaining until completion */
|
|
||||||
PV_COMPONENT_FINETA, /* estimated time of completion */
|
|
||||||
PV_COMPONENT_NAME, /* name prefix */
|
|
||||||
PV_COMPONENT_BUFPERCENT, /* percentage of buffer used */
|
|
||||||
PV_COMPONENT_OUTPUTBUF, /* recent bytes in output buffer */
|
|
||||||
PV_COMPONENT__MAX
|
|
||||||
} pv_display_component;
|
|
||||||
|
|
||||||
#define PV_SIZEOF_COMPONENT_STR 1024 /* size of buffer for each component */
|
|
||||||
|
|
||||||
#define RATE_GRANULARITY 100000000 /* nsec between -L rate chunks */
|
#define RATE_GRANULARITY 100000000 /* nsec between -L rate chunks */
|
||||||
#define RATE_BURST_WINDOW 5 /* rate burst window (multiples of rate) */
|
#define RATE_BURST_WINDOW 5 /* rate burst window (multiples of rate) */
|
||||||
#define REMOTE_INTERVAL 100000000 /* nsec between checks for -R */
|
#define REMOTE_INTERVAL 100000000 /* nsec between checks for -R */
|
||||||
@@ -55,8 +38,10 @@ typedef enum {
|
|||||||
|
|
||||||
#define PV_SIZEOF_DEFAULT_FORMAT 512
|
#define PV_SIZEOF_DEFAULT_FORMAT 512
|
||||||
#define PV_SIZEOF_CWD 4096
|
#define PV_SIZEOF_CWD 4096
|
||||||
#define PV_SIZEOF_LASTOUTPUT_BUFFER 256
|
#define PV_SIZEOF_LASTWRITTEN_BUFFER 256
|
||||||
|
#define PV_SIZEOF_PREVLINE_BUFFER 1024
|
||||||
#define PV_FORMAT_ARRAY_MAX 100
|
#define PV_FORMAT_ARRAY_MAX 100
|
||||||
|
#define PV_SIZEOF_FORMAT_SEGMENTS_BUF 4096
|
||||||
#define PV_SIZEOF_CRS_LOCK_FILE 1024
|
#define PV_SIZEOF_CRS_LOCK_FILE 1024
|
||||||
|
|
||||||
#define PV_SIZEOF_FILE_FDINFO 4096
|
#define PV_SIZEOF_FILE_FDINFO 4096
|
||||||
@@ -64,6 +49,10 @@ typedef enum {
|
|||||||
#define PV_SIZEOF_FILE_FDPATH 4096
|
#define PV_SIZEOF_FILE_FDPATH 4096
|
||||||
#define PV_SIZEOF_DISPLAY_NAME 512
|
#define PV_SIZEOF_DISPLAY_NAME 512
|
||||||
|
|
||||||
|
#define PV_BARSTYLE_MAX 4 /* number of different styles allowed in a format */
|
||||||
|
#define PV_BARSTYLE_SIZEOF_STRING 10 /* max length of a bar constituent component in bytes */
|
||||||
|
#define PV_BARSTYLE_MAX_FILLERS 10 /* max number of bar filler strings */
|
||||||
|
|
||||||
#define PV_DISPLAY_WINDOWTITLE 1
|
#define PV_DISPLAY_WINDOWTITLE 1
|
||||||
#define PV_DISPLAY_PROCESSTITLE 2
|
#define PV_DISPLAY_PROCESSTITLE 2
|
||||||
|
|
||||||
@@ -76,6 +65,72 @@ struct pvcursorstate_s {
|
|||||||
bool tty_tostop_added; /* whether any instance had to set TOSTOP on the terminal */
|
bool tty_tostop_added; /* whether any instance had to set TOSTOP on the terminal */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Types of transfer count - bytes, decimal bytes or lines.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
PV_TRANSFERCOUNT_BYTES,
|
||||||
|
PV_TRANSFERCOUNT_DECBYTES,
|
||||||
|
PV_TRANSFERCOUNT_LINES
|
||||||
|
} pvtransfercount_t;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure describing a short string used as part of a progress bar, whose
|
||||||
|
* width in display characters may not be the same as its length in bytes.
|
||||||
|
*/
|
||||||
|
struct pvbarstring_spec_s {
|
||||||
|
char string[PV_BARSTYLE_SIZEOF_STRING];
|
||||||
|
uint8_t width;
|
||||||
|
uint8_t bytes;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure describing a style of progress bar.
|
||||||
|
*
|
||||||
|
* The part that moves back and forth when the size isn't known, such as
|
||||||
|
* "<=>", is "indicator".
|
||||||
|
*
|
||||||
|
* The string used to populate the rest of the bar is one of "filler", which
|
||||||
|
* contains "filler_entries" array items. The first item "filler[0]" is
|
||||||
|
* used for an empty part such as " ". The last item
|
||||||
|
* "filler[filler_entries-1]" is used for a 100% full part, such as "=".
|
||||||
|
*
|
||||||
|
* If there are more than the minimum of 2 entries, then the intervening
|
||||||
|
* entries are used for partial fills.
|
||||||
|
*
|
||||||
|
* When there are only 2 entries and the bar isn't completely empty or full,
|
||||||
|
* the last filled portion of the bar is filled with "tip" instead of the
|
||||||
|
* last filler item to indicate the tip of the bar, such as ">".
|
||||||
|
*
|
||||||
|
* Note that only the indicator is expected to ever be wider than 1 display
|
||||||
|
* character. All other items are expected to have a width of 0 or 1.
|
||||||
|
*
|
||||||
|
* The "style_id" is an opaque identifier that should only be used to
|
||||||
|
* determine whether two styles are the same. It is always nonzero.
|
||||||
|
*/
|
||||||
|
struct pvbarstyle_s {
|
||||||
|
uint8_t style_id;
|
||||||
|
uint8_t filler_entries;
|
||||||
|
struct pvbarstring_spec_s indicator;
|
||||||
|
struct pvbarstring_spec_s tip;
|
||||||
|
struct pvbarstring_spec_s filler[PV_BARSTYLE_MAX_FILLERS];
|
||||||
|
};
|
||||||
|
typedef struct pvbarstyle_s *pvbarstyle_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* Display format component type, -1 for static string. */
|
||||||
|
typedef int8_t pvdisplay_component_t;
|
||||||
|
#define PVDISPLAY_COMPONENT_MAX (127) /* INT8_MAX */
|
||||||
|
|
||||||
|
/* Byte count of a part of the display. */
|
||||||
|
typedef uint16_t pvdisplay_bytecount_t;
|
||||||
|
#define PVDISPLAY_BYTECOUNT_MAX (65535) /* UINT16_MAX */
|
||||||
|
|
||||||
|
/* Width of a part of the display. */
|
||||||
|
typedef uint16_t pvdisplay_width_t;
|
||||||
|
#define PVDISPLAY_WIDTH_MAX (65535) /* UINT16_MAX */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Structure for holding PV internal state. Opaque outside the PV library.
|
* Structure for holding PV internal state. Opaque outside the PV library.
|
||||||
@@ -112,6 +167,7 @@ struct pvstate_s {
|
|||||||
/*@only@*/ /*@null@*/ char *format_string; /* output format string */
|
/*@only@*/ /*@null@*/ char *format_string; /* output format string */
|
||||||
/*@only@*/ /*@null@*/ char *extra_format_string; /* extra format string */
|
/*@only@*/ /*@null@*/ char *extra_format_string; /* extra format string */
|
||||||
/*@null@*/ char *output_name; /* name of the output, for diagnostics */
|
/*@null@*/ char *output_name; /* name of the output, for diagnostics */
|
||||||
|
/*@null@*/ char *default_bar_style; /* which bar style to use by default */
|
||||||
off_t error_skip_block; /* skip block size, 0 for adaptive */
|
off_t error_skip_block; /* skip block size, 0 for adaptive */
|
||||||
off_t rate_limit; /* rate limit, in bytes per second */
|
off_t rate_limit; /* rate limit, in bytes per second */
|
||||||
size_t target_buffer_size; /* buffer size (0=default) */
|
size_t target_buffer_size; /* buffer size (0=default) */
|
||||||
@@ -122,7 +178,7 @@ struct pvstate_s {
|
|||||||
int output_fd; /* fd to write output to */
|
int output_fd; /* fd to write output to */
|
||||||
unsigned int average_rate_window; /* time window in seconds for average rate calculations */
|
unsigned int average_rate_window; /* time window in seconds for average rate calculations */
|
||||||
unsigned int history_interval; /* seconds between each average rate calc history entry */
|
unsigned int history_interval; /* seconds between each average rate calc history entry */
|
||||||
unsigned int width; /* screen width */
|
pvdisplay_width_t width; /* screen width */
|
||||||
unsigned int height; /* screen height */
|
unsigned int height; /* screen height */
|
||||||
unsigned int extra_displays; /* bitmask of extra display destinations */
|
unsigned int extra_displays; /* bitmask of extra display destinations */
|
||||||
bool force; /* display even if not on terminal */
|
bool force; /* display even if not on terminal */
|
||||||
@@ -142,6 +198,9 @@ struct pvstate_s {
|
|||||||
bool no_splice; /* never use splice() */
|
bool no_splice; /* never use splice() */
|
||||||
bool discard_input; /* write nothing to stdout */
|
bool discard_input; /* write nothing to stdout */
|
||||||
bool show_stats; /* show statistics on exit */
|
bool show_stats; /* show statistics on exit */
|
||||||
|
bool can_display_utf8; /* whether UTF-8 output is permitted */
|
||||||
|
bool can_display_colour; /* whether the terminal supports colour */
|
||||||
|
bool checked_colour_support; /* whether we have checked colour support yet */
|
||||||
bool width_set_manually; /* width was set manually, not detected */
|
bool width_set_manually; /* width was set manually, not detected */
|
||||||
bool height_set_manually; /* height was set manually, not detected */
|
bool height_set_manually; /* height was set manually, not detected */
|
||||||
} control;
|
} control;
|
||||||
@@ -159,13 +218,13 @@ struct pvstate_s {
|
|||||||
struct sigaction old_sigint;
|
struct sigaction old_sigint;
|
||||||
struct sigaction old_sighup;
|
struct sigaction old_sighup;
|
||||||
struct sigaction old_sigterm;
|
struct sigaction old_sigterm;
|
||||||
#ifdef SIGINFO_PROVIDES_PID
|
#ifdef PV_REMOTE_CONTROL
|
||||||
struct sigaction old_sigusr2;
|
struct sigaction old_sigusr2;
|
||||||
#endif
|
#endif
|
||||||
struct sigaction old_sigalrm;
|
struct sigaction old_sigalrm;
|
||||||
struct timespec tstp_time; /* see pv_sig_tstp() / __cont() */
|
struct timespec tstp_time; /* see pv_sig_tstp() / __cont() */
|
||||||
struct timespec toffset; /* total time spent stopped */
|
struct timespec toffset; /* total time spent stopped */
|
||||||
#ifdef SIGINFO_PROVIDES_PID
|
#ifdef PV_REMOTE_CONTROL
|
||||||
volatile sig_atomic_t rxusr2; /* whether SIGUSR2 was received */
|
volatile sig_atomic_t rxusr2; /* whether SIGUSR2 was received */
|
||||||
volatile pid_t sender; /* PID of sending process for SIGUSR2 */
|
volatile pid_t sender; /* PID of sending process for SIGUSR2 */
|
||||||
#endif
|
#endif
|
||||||
@@ -189,29 +248,53 @@ struct pvstate_s {
|
|||||||
*****************/
|
*****************/
|
||||||
struct pvdisplay_s {
|
struct pvdisplay_s {
|
||||||
|
|
||||||
struct { /* format string broken into display components */
|
struct pvdisplay_segment_s { /* format string broken into segments */
|
||||||
size_t str_start; /* for strings: start offset */
|
/* See pv__format_init() for more details. */
|
||||||
size_t str_length; /* for strings: length */
|
/*@dependent@*/ /*@null@*/ const char *string_parameter; /* parameter after colon in %{x:} */
|
||||||
pv_display_component type; /* type of display component */
|
pvdisplay_bytecount_t string_parameter_bytes; /* number of bytes in string_parameter */
|
||||||
|
pvdisplay_component_t type; /* component type, -1 for static string */
|
||||||
|
int8_t parameter; /* component parameter, such as bar style index */
|
||||||
|
pvdisplay_width_t chosen_size; /* "n" from %<n>A, or 0 */
|
||||||
|
pvdisplay_bytecount_t offset; /* start offset of this segment in the build buffer */
|
||||||
|
pvdisplay_bytecount_t bytes; /* length of segment in bytes in the build buffer */
|
||||||
|
pvdisplay_width_t width; /* displayed width of segment */
|
||||||
} format[PV_FORMAT_ARRAY_MAX];
|
} format[PV_FORMAT_ARRAY_MAX];
|
||||||
|
|
||||||
struct { /* display components */
|
struct pvbarstyle_s barstyle[PV_BARSTYLE_MAX];
|
||||||
char content[PV_SIZEOF_COMPONENT_STR]; /* string to display */
|
|
||||||
size_t length; /* number of bytes in string */
|
|
||||||
bool required; /* true if included in format */
|
|
||||||
} component[PV_COMPONENT__MAX];
|
|
||||||
|
|
||||||
char lastoutput_buffer[PV_SIZEOF_LASTOUTPUT_BUFFER];
|
/* The last-written "n" bytes. */
|
||||||
|
char lastwritten_buffer[PV_SIZEOF_LASTWRITTEN_BUFFER];
|
||||||
|
|
||||||
|
/* The most recently output complete line. */
|
||||||
|
char previous_line[PV_SIZEOF_PREVLINE_BUFFER];
|
||||||
|
/* The line being received now. */
|
||||||
|
char next_line[PV_SIZEOF_PREVLINE_BUFFER];
|
||||||
|
|
||||||
/*@only@*/ /*@null@*/ char *display_buffer; /* buffer for display string */
|
/*@only@*/ /*@null@*/ char *display_buffer; /* buffer for display string */
|
||||||
size_t display_buffer_size; /* size allocated to display buffer */
|
off_t initial_offset; /* offset when first opened (when watching fds) */
|
||||||
size_t display_string_len; /* length of string in display buffer */
|
size_t next_line_len; /* length of currently receiving line so far */
|
||||||
off_t initial_offset; /* offset when first opened (when watching fds) */
|
|
||||||
size_t lastoutput_length; /* number of last-output bytes to show */
|
|
||||||
|
|
||||||
size_t format_segment_count; /* number of format string segments */
|
size_t format_segment_count; /* number of format string segments */
|
||||||
|
|
||||||
unsigned int prev_screen_width; /* screen width last time we were called */
|
pvtransfercount_t count_type; /* type of count for transfer, rate, etc */
|
||||||
|
|
||||||
|
pvdisplay_width_t prev_screen_width; /* screen width last time we were called */
|
||||||
|
|
||||||
|
pvdisplay_bytecount_t display_buffer_size; /* size allocated to display buffer */
|
||||||
|
pvdisplay_bytecount_t display_string_bytes; /* byte length of string in display buffer */
|
||||||
|
pvdisplay_width_t display_string_width; /* displayed width of string in display buffer */
|
||||||
|
pvdisplay_bytecount_t lastwritten_bytes; /* largest number of last-written bytes to show */
|
||||||
|
|
||||||
|
bool showing_timer; /* set if showing timer */
|
||||||
|
bool showing_bytes; /* set if showing byte/line count */
|
||||||
|
bool showing_rate; /* set if showing transfer rate */
|
||||||
|
bool showing_last_written; /* set if displaying the last few bytes written */
|
||||||
|
bool showing_previous_line; /* set if displaying the previously output line */
|
||||||
|
|
||||||
|
bool format_uses_colour; /* set if the format string uses colours */
|
||||||
|
bool colour_permitted; /* whether colour is permitted for this display */
|
||||||
|
bool sgr_code_active; /* set while SGR code is active in a display line */
|
||||||
|
bool final_update; /* set internally on the final update */
|
||||||
bool display_visible; /* set once anything written to terminal */
|
bool display_visible; /* set once anything written to terminal */
|
||||||
|
|
||||||
} display;
|
} display;
|
||||||
@@ -248,7 +331,7 @@ struct pvstate_s {
|
|||||||
|
|
||||||
off_t prev_transferred; /* total amount transferred when called last time */
|
off_t prev_transferred; /* total amount transferred when called last time */
|
||||||
|
|
||||||
int percentage; /* transfer percentage completion */
|
double percentage; /* transfer percentage completion */
|
||||||
} calc;
|
} calc;
|
||||||
|
|
||||||
/********************
|
/********************
|
||||||
@@ -306,7 +389,7 @@ struct pvstate_s {
|
|||||||
off_t transferred; /* amount transferred (written - unconsumed) */
|
off_t transferred; /* amount transferred (written - unconsumed) */
|
||||||
|
|
||||||
/* Keep track of line positions to backtrack written_but_not_consumed. */
|
/* Keep track of line positions to backtrack written_but_not_consumed. */
|
||||||
/*@null@*/ off_t *line_positions; /* line separator write positions (circular buffer) */
|
/*@only@*/ /*@null@*/ off_t *line_positions; /* line separator write positions (circular buffer) */
|
||||||
size_t line_positions_capacity; /* total size of line position array */
|
size_t line_positions_capacity; /* total size of line position array */
|
||||||
size_t line_positions_length; /* number of positions stored in array */
|
size_t line_positions_length; /* number of positions stored in array */
|
||||||
size_t line_positions_head; /* index to use for next position */
|
size_t line_positions_head; /* index to use for next position */
|
||||||
@@ -346,6 +429,36 @@ struct pvstate_s {
|
|||||||
} transfer;
|
} transfer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct pvdisplay_s *pvdisplay_t;
|
||||||
|
typedef struct pvdisplay_segment_s *pvdisplay_segment_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure containing the parameters used by formatters.
|
||||||
|
*/
|
||||||
|
struct pvformatter_args_s {
|
||||||
|
/*@dependent@*/ pvstate_t state; /* overall state */
|
||||||
|
/*@dependent@*/ pvdisplay_t display; /* the display being updated */
|
||||||
|
/*@dependent@*/ pvdisplay_segment_t segment; /* the segment of the display */
|
||||||
|
/*@dependent@*/ char *buffer; /* buffer to write formatted segments into */
|
||||||
|
pvdisplay_bytecount_t buffer_size; /* size of the buffer */
|
||||||
|
pvdisplay_bytecount_t offset; /* current write position in the buffer */
|
||||||
|
};
|
||||||
|
typedef struct pvformatter_args_s *pvformatter_args_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* Pointer to a formatter function. */
|
||||||
|
typedef pvdisplay_bytecount_t (*pvdisplay_formatter_t)(pvformatter_args_t);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure defining a format string sequence following a %.
|
||||||
|
*/
|
||||||
|
struct pvdisplay_component_s {
|
||||||
|
/*@null@ */ const char *match; /* string to match */
|
||||||
|
/*@null@ */ pvdisplay_formatter_t function; /* function to call */
|
||||||
|
bool dynamic; /* whether it can scale with screen size */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
struct pvwatchfd_s {
|
struct pvwatchfd_s {
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
@@ -366,17 +479,66 @@ struct pvwatchfd_s {
|
|||||||
};
|
};
|
||||||
typedef struct pvwatchfd_s *pvwatchfd_t;
|
typedef struct pvwatchfd_s *pvwatchfd_t;
|
||||||
|
|
||||||
typedef struct pvdisplay_s *pvdisplay_t;
|
|
||||||
|
|
||||||
void pv_error(pvstate_t, char *, ...);
|
void pv_error(pvstate_t, char *, ...);
|
||||||
|
|
||||||
int pv_main_loop(pvstate_t);
|
int pv_main_loop(pvstate_t);
|
||||||
void pv_calculate_transfer_rate(pvstate_t, bool);
|
void pv_calculate_transfer_rate(pvstate_t, bool);
|
||||||
|
|
||||||
|
long pv_bound_long(long, long, long);
|
||||||
|
long pv_seconds_remaining(const off_t, const off_t, const long double);
|
||||||
|
void pv_si_prefix(long double *, char *, const long double, pvtransfercount_t);
|
||||||
|
void pv_describe_amount(char *, size_t, char *, long double, char *, char *, pvtransfercount_t);
|
||||||
|
|
||||||
|
int8_t pv_display_barstyle_index(pvformatter_args_t, const char *);
|
||||||
|
|
||||||
|
pvdisplay_bytecount_t pv_formatter_segmentcontent(char *, pvformatter_args_t);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Formatting functions.
|
||||||
|
*
|
||||||
|
* Each formatting function takes a state, the current display, and the
|
||||||
|
* segment it's for; it also takes a buffer, with a particular size, and an
|
||||||
|
* offset at which to start writing to the buffer.
|
||||||
|
*
|
||||||
|
* If the component is dynamically sized (such as a progress bar with no
|
||||||
|
* chosen_size constraint), the segment's "width" is expected to have
|
||||||
|
* already been populated by the caller, with the target width.
|
||||||
|
*
|
||||||
|
* The function writes the appropriate string to the buffer at the offset,
|
||||||
|
* and updates the segment's "offset" and "bytes". The number of bytes
|
||||||
|
* written ("bytes") is also returned; it will be 0 if the string would not
|
||||||
|
* fit into the buffer.
|
||||||
|
*
|
||||||
|
* The caller is expected to update the segment's "width".
|
||||||
|
*
|
||||||
|
* If called with a buffer size of 0, only the side effects occur (such as
|
||||||
|
* setting flags like display->showing_timer).
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_progress(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_progress_bar_only(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_progress_amount_only(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_bar_default(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_bar_plain(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_bar_block(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_bar_granular(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_bar_shaded(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_timer(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_eta(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_fineta(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_rate(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_average_rate(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_bytes(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_buffer_percent(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_last_written(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_previous_line(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_name(pvformatter_args_t);
|
||||||
|
pvdisplay_bytecount_t pv_formatter_sgr(pvformatter_args_t);
|
||||||
|
|
||||||
bool pv_format(pvstate_t, /*@null@*/ const char *, pvdisplay_t, bool, bool);
|
bool pv_format(pvstate_t, /*@null@*/ const char *, pvdisplay_t, bool, bool);
|
||||||
void pv_display(pvstate_t, bool);
|
void pv_display(pvstate_t, bool);
|
||||||
ssize_t pv_transfer(pvstate_t, int, bool *, bool *, off_t, long *);
|
ssize_t pv_transfer(pvstate_t, int, bool *, bool *, off_t, long *);
|
||||||
int pv_next_file(pvstate_t, unsigned int, int);
|
int pv_next_file(pvstate_t, unsigned int, int);
|
||||||
/*@out@*/ const char *pv_current_file_name(pvstate_t);
|
/*@keep@*/ const char *pv_current_file_name(pvstate_t);
|
||||||
|
|
||||||
void pv_write_retry(int, const char *, size_t);
|
void pv_write_retry(int, const char *, size_t);
|
||||||
void pv_tty_write(pvstate_t, const char *, size_t);
|
void pv_tty_write(pvstate_t, const char *, size_t);
|
||||||
|
|||||||
+28
-5
@@ -45,8 +45,9 @@ typedef struct pvstate_s *pvstate_t;
|
|||||||
* Valid number types for pv_getnum_check().
|
* Valid number types for pv_getnum_check().
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
PV_NUMTYPE_INTEGER,
|
PV_NUMTYPE_ANY_WITH_SUFFIX,
|
||||||
PV_NUMTYPE_DOUBLE
|
PV_NUMTYPE_BARE_INTEGER,
|
||||||
|
PV_NUMTYPE_BARE_DOUBLE
|
||||||
} pv_numtype;
|
} pv_numtype;
|
||||||
|
|
||||||
|
|
||||||
@@ -54,6 +55,11 @@ typedef enum {
|
|||||||
* Simple string functions for processing numbers.
|
* Simple string functions for processing numbers.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return true if the character is an ASCII digit.
|
||||||
|
*/
|
||||||
|
extern bool pv_isdigit(char);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the given string converted to a double, for use as a time
|
* Return the given string converted to a double, for use as a time
|
||||||
* interval.
|
* interval.
|
||||||
@@ -80,11 +86,11 @@ extern unsigned int pv_getnum_count(const char *, bool);
|
|||||||
extern bool pv_getnum_check(const char *, pv_numtype);
|
extern bool pv_getnum_check(const char *, pv_numtype);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return an integer representing the first amount as a percentage of the
|
* Return a value representing the first amount as a percentage of the
|
||||||
* second total, i.e. 100*amount/total. If the second value, the total, is
|
* second total, i.e. 100*amount/total. If the second value, the total, is
|
||||||
* zero or less, return 0.
|
* zero or less, return 0.
|
||||||
*/
|
*/
|
||||||
extern int pv_percentage(off_t, const off_t);
|
extern double pv_percentage(off_t, const off_t);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* String handling wrappers.
|
* String handling wrappers.
|
||||||
@@ -115,6 +121,16 @@ extern size_t pv_strlcat(char *, const char *, size_t);
|
|||||||
*/
|
*/
|
||||||
/*@null@ */ /*@temp@ */ extern void *pv_memrchr(const void *, int, size_t);
|
/*@null@ */ /*@temp@ */ extern void *pv_memrchr(const void *, int, size_t);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the displayed width of a string.
|
||||||
|
*/
|
||||||
|
extern size_t pv_strwidth(const char *, size_t);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return true if the character is printable.
|
||||||
|
*/
|
||||||
|
extern bool pv_isprint(char);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Functions relating to elapsed time.
|
* Functions relating to elapsed time.
|
||||||
*/
|
*/
|
||||||
@@ -209,12 +225,14 @@ extern void pv_state_interval_set(pvstate_t, double);
|
|||||||
extern void pv_state_width_set(pvstate_t, unsigned int, bool);
|
extern void pv_state_width_set(pvstate_t, unsigned int, bool);
|
||||||
extern void pv_state_height_set(pvstate_t, unsigned int, bool);
|
extern void pv_state_height_set(pvstate_t, unsigned int, bool);
|
||||||
extern void pv_state_name_set(pvstate_t, /*@null@*/ const char *);
|
extern void pv_state_name_set(pvstate_t, /*@null@*/ const char *);
|
||||||
|
extern void pv_state_default_bar_style_set(pvstate_t, /*@null@ */ const char *);
|
||||||
extern void pv_state_format_string_set(pvstate_t, /*@null@*/ const char *);
|
extern void pv_state_format_string_set(pvstate_t, /*@null@*/ const char *);
|
||||||
extern void pv_state_extra_display_set(pvstate_t, /*@null@*/ const char *);
|
extern void pv_state_extra_display_set(pvstate_t, /*@null@*/ const char *);
|
||||||
extern void pv_state_watch_pid_set(pvstate_t, pid_t);
|
extern void pv_state_watch_pid_set(pvstate_t, pid_t);
|
||||||
extern void pv_state_watch_fd_set(pvstate_t, int);
|
extern void pv_state_watch_fd_set(pvstate_t, int);
|
||||||
extern void pv_state_output_set(pvstate_t, int, const char *);
|
extern void pv_state_output_set(pvstate_t, int, const char *);
|
||||||
extern void pv_state_average_rate_window_set(pvstate_t, unsigned int);
|
extern void pv_state_average_rate_window_set(pvstate_t, unsigned int);
|
||||||
|
extern void pv_state_set_can_display_utf8(pvstate_t, bool);
|
||||||
|
|
||||||
extern void pv_state_inputfiles(pvstate_t, unsigned int, const char **);
|
extern void pv_state_inputfiles(pvstate_t, unsigned int, const char **);
|
||||||
|
|
||||||
@@ -238,7 +256,7 @@ extern off_t pv_calc_total_size(pvstate_t);
|
|||||||
*/
|
*/
|
||||||
extern void pv_sig_init(pvstate_t);
|
extern void pv_sig_init(pvstate_t);
|
||||||
|
|
||||||
#ifdef SIGINFO_PROVIDES_PID
|
#ifdef PV_REMOTE_CONTROL
|
||||||
/*
|
/*
|
||||||
* Return true if SIGUSR2 has been received, and indicate the sender.
|
* Return true if SIGUSR2 has been received, and indicate the sender.
|
||||||
*/
|
*/
|
||||||
@@ -270,6 +288,11 @@ extern void pv_sig_fini(pvstate_t);
|
|||||||
*/
|
*/
|
||||||
extern void pv_state_free(/*@only@*/ pvstate_t);
|
extern void pv_state_free(/*@only@*/ pvstate_t);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return a string listing all supported format sequences.
|
||||||
|
*/
|
||||||
|
/*@null@*/ char *pv_format_sequences(void);
|
||||||
|
|
||||||
#if ! HAVE_SETPROCTITLE
|
#if ! HAVE_SETPROCTITLE
|
||||||
void initproctitle(int, char **);
|
void initproctitle(int, char **);
|
||||||
void setproctitle(const char *, ...);
|
void setproctitle(const char *, ...);
|
||||||
|
|||||||
+35
-64
@@ -22,77 +22,27 @@
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the number of display columns needed to show the given string.
|
* Return the number of display columns needed to show the given
|
||||||
*
|
* null-terminated string.
|
||||||
* To do this, we convert it to a wide character string, and use the wide
|
|
||||||
* character display width function "wcswidth()" on it.
|
|
||||||
*
|
*
|
||||||
* If NLS is disabled, or the string cannot be converted, this is just the
|
* If NLS is disabled, or the string cannot be converted, this is just the
|
||||||
* same as "strlen()".
|
* same as "strlen()".
|
||||||
*/
|
*/
|
||||||
static size_t display_width(const char *string)
|
static size_t display_width(const char *string)
|
||||||
{
|
{
|
||||||
size_t width;
|
size_t bytes;
|
||||||
|
|
||||||
#if defined(ENABLE_NLS) && defined(HAVE_WCHAR_H)
|
|
||||||
size_t wide_char_count;
|
|
||||||
size_t wide_string_buffer_size;
|
|
||||||
wchar_t *wide_string;
|
|
||||||
|
|
||||||
if (NULL == string)
|
if (NULL == string)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/*@-nullpass@ */
|
bytes = strlen(string); /* flawfinder: ignore */
|
||||||
/*
|
/*
|
||||||
* splint note: mbstowcs() manual page on Linux explicitly says it
|
* flawfinder rationale: we have already checked for NULL, and it is
|
||||||
* takes NULL.
|
* explicitly required of the caller to provide a null-terminated
|
||||||
|
* string.
|
||||||
*/
|
*/
|
||||||
wide_char_count = mbstowcs(NULL, string, 0);
|
|
||||||
/*@+nullpass@ */
|
|
||||||
if (wide_char_count == (size_t) -1) {
|
|
||||||
debug("%s: %s: %s", "mbstowcs", string, strerror(errno));
|
|
||||||
return strlen(string); /* flawfinder: ignore */
|
|
||||||
/*
|
|
||||||
* flawfinder rationale: we have already checked for NULL,
|
|
||||||
* and we don't know the size of the originating buffer so
|
|
||||||
* can't use strnlen(); it is up to the caller to provide a
|
|
||||||
* terminated string.
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
wide_string_buffer_size = sizeof(*wide_string) * (1 + wide_char_count);
|
return pv_strwidth(string, bytes);
|
||||||
wide_string = malloc(wide_string_buffer_size);
|
|
||||||
if (NULL == wide_string) {
|
|
||||||
perror("malloc");
|
|
||||||
return strlen(string); /* flawfinder: ignore */
|
|
||||||
/* flawfinder rationale: see above. */
|
|
||||||
}
|
|
||||||
memset(wide_string, 0, wide_string_buffer_size);
|
|
||||||
|
|
||||||
if (mbstowcs(wide_string, string, 1 + wide_char_count) == (size_t) -1) {
|
|
||||||
debug("%s: %s: %s", "mbstowcs", string, strerror(errno));
|
|
||||||
width = strlen(string); /* flawfinder: ignore */
|
|
||||||
/* flawfinder rationale: see above. */
|
|
||||||
} else if (NULL != wide_string) {
|
|
||||||
/*@-unrecog @ */
|
|
||||||
/* splint seems unable to see the prototype. */
|
|
||||||
width = wcswidth(wide_string, wide_char_count);
|
|
||||||
/*@+unrecog @ */
|
|
||||||
} else {
|
|
||||||
width = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
free(wide_string);
|
|
||||||
|
|
||||||
#else /* ! defined(ENABLE_NLS) && defined(HAVE_WCHAR_H) */
|
|
||||||
if (NULL == string)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
width = strlen(string); /* flawfinder: ignore */
|
|
||||||
/* flawfinder rationale: see above. */
|
|
||||||
#endif /* defined(ENABLE_NLS) && defined(HAVE_WCHAR_H) */
|
|
||||||
|
|
||||||
return width;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -134,9 +84,9 @@ static void display_word_wrap_7bit(const char *string, size_t display_width, siz
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Output a string to standard output, word wrapping to "display_width"
|
* Output a null-terminated string to standard output, word wrapping to
|
||||||
* display character positions, and left-padding any new lines after the
|
* "display_width" display character positions, and left-padding any new
|
||||||
* first one with "left_margin" spaces.
|
* lines after the first one with "left_margin" spaces.
|
||||||
*
|
*
|
||||||
* Wide characters are handled if NLS is enabled, but if they can't be, this
|
* Wide characters are handled if NLS is enabled, but if they can't be, this
|
||||||
* falls back to a version which just counts bytes as characters.
|
* falls back to a version which just counts bytes as characters.
|
||||||
@@ -153,7 +103,7 @@ static void display_word_wrap(const char *string, size_t display_width, size_t l
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/*@-nullpass@ */
|
/*@-nullpass@ */
|
||||||
/* splint note: see earlier mbstowcs() call. */
|
/* splint note: see mbstowcs() call in pv_strwidth(). */
|
||||||
wide_char_count = mbstowcs(NULL, string, 0);
|
wide_char_count = mbstowcs(NULL, string, 0);
|
||||||
/*@+nullpass@ */
|
/*@+nullpass@ */
|
||||||
if (wide_char_count == (size_t) -1) {
|
if (wide_char_count == (size_t) -1) {
|
||||||
@@ -181,7 +131,9 @@ static void display_word_wrap(const char *string, size_t display_width, size_t l
|
|||||||
start_idx = 0;
|
start_idx = 0;
|
||||||
chars_remaining = wide_char_count;
|
chars_remaining = wide_char_count;
|
||||||
|
|
||||||
|
/*@-unrecog@ *//* splint seems unable to see the prototype for wcswidth(). */
|
||||||
while (chars_remaining > 0 && wcswidth(&(wide_string[start_idx]), chars_remaining) > display_width) {
|
while (chars_remaining > 0 && wcswidth(&(wide_string[start_idx]), chars_remaining) > display_width) {
|
||||||
|
/*@+unrecog@ */
|
||||||
size_t next_idx;
|
size_t next_idx;
|
||||||
|
|
||||||
end_idx = start_idx + display_width;
|
end_idx = start_idx + display_width;
|
||||||
@@ -356,6 +308,9 @@ void display_help(void)
|
|||||||
{ "-N", "--name", N_("NAME"),
|
{ "-N", "--name", N_("NAME"),
|
||||||
N_("prefix visual information with NAME"),
|
N_("prefix visual information with NAME"),
|
||||||
{ 0, 0, 0, 0} },
|
{ 0, 0, 0, 0} },
|
||||||
|
{ "-u", "--bar-style", N_("STYLE"),
|
||||||
|
N_("set default bar style to NAME"),
|
||||||
|
{ 0, 0, 0, 0} },
|
||||||
{ "-x", "--extra-display", N_("SPEC"),
|
{ "-x", "--extra-display", N_("SPEC"),
|
||||||
N_("also send progress to SPEC"),
|
N_("also send progress to SPEC"),
|
||||||
{ 0, 0, 0, 0} },
|
{ 0, 0, 0, 0} },
|
||||||
@@ -405,11 +360,11 @@ void display_help(void)
|
|||||||
{ "-d", "--watchfd", N_("PID[:FD]"),
|
{ "-d", "--watchfd", N_("PID[:FD]"),
|
||||||
N_("watch file FD opened by process PID"),
|
N_("watch file FD opened by process PID"),
|
||||||
{ 0, 0, 0, 0} },
|
{ 0, 0, 0, 0} },
|
||||||
#ifdef SIGINFO_PROVIDES_PID
|
#ifdef PV_REMOTE_CONTROL
|
||||||
{ "-R", "--remote", N_("PID"),
|
{ "-R", "--remote", N_("PID"),
|
||||||
N_("update settings of process PID"),
|
N_("update settings of process PID"),
|
||||||
{ 0, 0, 0, 0} },
|
{ 0, 0, 0, 0} },
|
||||||
#endif /* SIGINFO_PROVIDES_PID */
|
#endif /* PV_REMOTE_CONTROL */
|
||||||
{ "", NULL, NULL, NULL, { 0, 0, 0, 0} },
|
{ "", NULL, NULL, NULL, { 0, 0, 0, 0} },
|
||||||
{ "-P", "--pidfile", N_("FILE"),
|
{ "-P", "--pidfile", N_("FILE"),
|
||||||
N_("save process ID in FILE"),
|
N_("save process ID in FILE"),
|
||||||
@@ -434,6 +389,7 @@ void display_help(void)
|
|||||||
size_t right_margin = 77;
|
size_t right_margin = 77;
|
||||||
const char *program_description;
|
const char *program_description;
|
||||||
const char *bug_report_note;
|
const char *bug_report_note;
|
||||||
|
char *format_sequences = NULL;
|
||||||
unsigned int terminal_width = 0, terminal_height = 0;
|
unsigned int terminal_width = 0, terminal_height = 0;
|
||||||
|
|
||||||
pv_screensize(&terminal_width, &terminal_height);
|
pv_screensize(&terminal_width, &terminal_height);
|
||||||
@@ -593,6 +549,21 @@ void display_help(void)
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
format_sequences = pv_format_sequences();
|
||||||
|
if (NULL != format_sequences) {
|
||||||
|
const char *format_sequence_header;
|
||||||
|
format_sequence_header = _("Supported format sequences:");
|
||||||
|
if (NULL != format_sequence_header) {
|
||||||
|
printf("\n");
|
||||||
|
display_word_wrap(format_sequence_header, right_margin, 0);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("\n ");
|
||||||
|
display_word_wrap(format_sequences, right_margin, 2);
|
||||||
|
free(format_sequences);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
bug_report_note = _("Please report any bugs to: %s");
|
bug_report_note = _("Please report any bugs to: %s");
|
||||||
|
|||||||
+14
-1
@@ -19,7 +19,9 @@
|
|||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#ifdef HAVE_LANGINFO_H
|
||||||
|
#include <langinfo.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
int pv_remote_set(opts_t, pvstate_t);
|
int pv_remote_set(opts_t, pvstate_t);
|
||||||
void pv_remote_init(void);
|
void pv_remote_init(void);
|
||||||
@@ -279,6 +281,7 @@ int main(int argc, char **argv)
|
|||||||
/*@only@ */ pvstate_t state = NULL;
|
/*@only@ */ pvstate_t state = NULL;
|
||||||
int retcode = 0;
|
int retcode = 0;
|
||||||
bool can_have_eta = true;
|
bool can_have_eta = true;
|
||||||
|
bool can_display_utf8 = false;
|
||||||
|
|
||||||
#if ! HAVE_SETPROCTITLE
|
#if ! HAVE_SETPROCTITLE
|
||||||
initproctitle(argc, argv);
|
initproctitle(argc, argv);
|
||||||
@@ -289,6 +292,12 @@ int main(int argc, char **argv)
|
|||||||
(void) setlocale(LC_ALL, "");
|
(void) setlocale(LC_ALL, "");
|
||||||
(void) bindtextdomain(PACKAGE, LOCALEDIR);
|
(void) bindtextdomain(PACKAGE, LOCALEDIR);
|
||||||
(void) textdomain(PACKAGE);
|
(void) textdomain(PACKAGE);
|
||||||
|
#ifdef HAVE_LANGINFO_H
|
||||||
|
/*@-mustfreefresh@ *//* splint thinks nl_langinfo() leaks memory */
|
||||||
|
if (0 == strcmp(nl_langinfo(CODESET), "UTF-8"))
|
||||||
|
can_display_utf8 = true;
|
||||||
|
/*@+mustfreefresh@ */
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Parse the command line arguments. */
|
/* Parse the command line arguments. */
|
||||||
@@ -493,6 +502,7 @@ int main(int argc, char **argv)
|
|||||||
pv_state_no_splice_set(state, opts->no_splice);
|
pv_state_no_splice_set(state, opts->no_splice);
|
||||||
pv_state_size_set(state, opts->size);
|
pv_state_size_set(state, opts->size);
|
||||||
pv_state_name_set(state, opts->name);
|
pv_state_name_set(state, opts->name);
|
||||||
|
pv_state_default_bar_style_set(state, opts->default_bar_style);
|
||||||
pv_state_format_string_set(state, opts->format);
|
pv_state_format_string_set(state, opts->format);
|
||||||
pv_state_extra_display_set(state, opts->extra_display);
|
pv_state_extra_display_set(state, opts->extra_display);
|
||||||
pv_state_watch_pid_set(state, opts->watch_pid);
|
pv_state_watch_pid_set(state, opts->watch_pid);
|
||||||
@@ -503,6 +513,9 @@ int main(int argc, char **argv)
|
|||||||
can_have_eta ? opts->fineta : false, opts->rate, opts->average_rate,
|
can_have_eta ? opts->fineta : false, opts->rate, opts->average_rate,
|
||||||
opts->bytes, opts->bufpercent, opts->lastwritten, opts->name);
|
opts->bytes, opts->bufpercent, opts->lastwritten, opts->name);
|
||||||
|
|
||||||
|
debug("%s: %s", "can_display_utf8", can_display_utf8 ? "true" : "false");
|
||||||
|
pv_state_set_can_display_utf8(state, can_display_utf8);
|
||||||
|
|
||||||
/* Initialise the signal handling. */
|
/* Initialise the signal handling. */
|
||||||
pv_sig_init(state);
|
pv_sig_init(state);
|
||||||
|
|
||||||
|
|||||||
+30
-11
@@ -296,6 +296,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
|
|||||||
{ "width", 1, NULL, (int) 'w' },
|
{ "width", 1, NULL, (int) 'w' },
|
||||||
{ "height", 1, NULL, (int) 'H' },
|
{ "height", 1, NULL, (int) 'H' },
|
||||||
{ "name", 1, NULL, (int) 'N' },
|
{ "name", 1, NULL, (int) 'N' },
|
||||||
|
{ "bar-style", 1, NULL, (int) 'u' },
|
||||||
{ "format", 1, NULL, (int) 'F' },
|
{ "format", 1, NULL, (int) 'F' },
|
||||||
{ "extra-display", 1, NULL, (int) 'x' },
|
{ "extra-display", 1, NULL, (int) 'x' },
|
||||||
{ "stats", 0, NULL, (int) 'v' },
|
{ "stats", 0, NULL, (int) 'v' },
|
||||||
@@ -322,7 +323,7 @@ opts_t opts_parse(unsigned int argc, char **argv)
|
|||||||
/*@+nullassign@ */
|
/*@+nullassign@ */
|
||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
#endif /* HAVE_GETOPT_LONG */
|
#endif /* HAVE_GETOPT_LONG */
|
||||||
char *short_options = "hVpteIrab8kTA:fvnqcWD:s:gl0i:w:H:N:F:x:L:B:CEZ:SYKXU:R:P:d:m:o:"
|
char *short_options = "hVpteIrab8kTA:fvnqcWD:s:gl0i:w:H:N:u:F:x:L:B:CEZ:SYKXU:R:P:d:m:o:"
|
||||||
#ifdef ENABLE_DEBUGGING
|
#ifdef ENABLE_DEBUGGING
|
||||||
"!:"
|
"!:"
|
||||||
#endif
|
#endif
|
||||||
@@ -405,24 +406,33 @@ opts_t opts_parse(unsigned int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
/* falls through */
|
/* falls through */
|
||||||
/*@fallthrough@ */
|
/*@fallthrough@ */
|
||||||
|
case 'L':
|
||||||
|
/*@fallthrough@ */
|
||||||
|
case 'B':
|
||||||
|
/*@fallthrough@ */
|
||||||
|
case 'Z':
|
||||||
|
if (!pv_getnum_check(optarg, PV_NUMTYPE_ANY_WITH_SUFFIX)) {
|
||||||
|
/*@-mustfreefresh@ *//* see above */
|
||||||
|
fprintf(stderr, "%s: -%c: %s: %s\n", opts->program_name, c, optarg,
|
||||||
|
_("numeric value not understood"));
|
||||||
|
opts_free(opts);
|
||||||
|
return NULL;
|
||||||
|
/*@+mustfreefresh@ */
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'A':
|
case 'A':
|
||||||
/*@fallthrough@ */
|
/*@fallthrough@ */
|
||||||
case 'w':
|
case 'w':
|
||||||
/*@fallthrough@ */
|
/*@fallthrough@ */
|
||||||
case 'H':
|
case 'H':
|
||||||
/*@fallthrough@ */
|
/*@fallthrough@ */
|
||||||
case 'L':
|
|
||||||
/*@fallthrough@ */
|
|
||||||
case 'B':
|
|
||||||
/*@fallthrough@ */
|
|
||||||
case 'R':
|
case 'R':
|
||||||
/*@fallthrough@ */
|
/*@fallthrough@ */
|
||||||
case 'm':
|
case 'm':
|
||||||
/*@fallthrough@ */
|
if (!pv_getnum_check(optarg, PV_NUMTYPE_BARE_INTEGER)) {
|
||||||
case 'Z':
|
|
||||||
if (!pv_getnum_check(optarg, PV_NUMTYPE_INTEGER)) {
|
|
||||||
/*@-mustfreefresh@ *//* see above */
|
/*@-mustfreefresh@ *//* see above */
|
||||||
fprintf(stderr, "%s: -%c: %s\n", opts->program_name, c, _("integer argument expected"));
|
fprintf(stderr, "%s: -%c: %s: %s\n", opts->program_name, c, optarg,
|
||||||
|
_("integer argument expected"));
|
||||||
opts_free(opts);
|
opts_free(opts);
|
||||||
return NULL;
|
return NULL;
|
||||||
/*@+mustfreefresh@ */
|
/*@+mustfreefresh@ */
|
||||||
@@ -431,9 +441,10 @@ opts_t opts_parse(unsigned int argc, char **argv)
|
|||||||
case 'i':
|
case 'i':
|
||||||
/*@fallthrough@ */
|
/*@fallthrough@ */
|
||||||
case 'D':
|
case 'D':
|
||||||
if (!pv_getnum_check(optarg, PV_NUMTYPE_DOUBLE)) {
|
if (!pv_getnum_check(optarg, PV_NUMTYPE_BARE_DOUBLE)) {
|
||||||
/*@-mustfreefresh@ *//* see above */
|
/*@-mustfreefresh@ *//* see above */
|
||||||
fprintf(stderr, "%s: -%c: %s\n", opts->program_name, c, _("numeric argument expected"));
|
fprintf(stderr, "%s: -%c: %s: %s\n", opts->program_name, c, optarg,
|
||||||
|
_("numeric argument expected"));
|
||||||
opts_free(opts);
|
opts_free(opts);
|
||||||
return NULL;
|
return NULL;
|
||||||
/*@+mustfreefresh@ */
|
/*@+mustfreefresh@ */
|
||||||
@@ -584,6 +595,14 @@ opts_t opts_parse(unsigned int argc, char **argv)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'u':
|
||||||
|
opts->default_bar_style = pv_strdup(optarg);
|
||||||
|
if (NULL == opts->default_bar_style) {
|
||||||
|
fprintf(stderr, "%s: -u: %s\n", opts->program_name, strerror(errno));
|
||||||
|
opts_free(opts);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'L':
|
case 'L':
|
||||||
opts->rate_limit = pv_getnum_size(optarg, opts->decimal_units);
|
opts->rate_limit = pv_getnum_size(optarg, opts->decimal_units);
|
||||||
break;
|
break;
|
||||||
|
|||||||
+17
-8
@@ -21,7 +21,7 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#ifdef SIGINFO_PROVIDES_PID
|
#ifdef PV_REMOTE_CONTROL
|
||||||
void pv_error(pvstate_t, char *, ...);
|
void pv_error(pvstate_t, char *, ...);
|
||||||
|
|
||||||
struct remote_msg {
|
struct remote_msg {
|
||||||
@@ -44,11 +44,13 @@ struct remote_msg {
|
|||||||
bool height_set_manually; /* height was set manually, not detected */
|
bool height_set_manually; /* height was set manually, not detected */
|
||||||
char name[256]; /* flawfinder: ignore */
|
char name[256]; /* flawfinder: ignore */
|
||||||
char format[256]; /* flawfinder: ignore */
|
char format[256]; /* flawfinder: ignore */
|
||||||
|
char extra_display[256]; /* flawfinder: ignore */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* flawfinder rationale: name and format are always explicitly zeroed and
|
* flawfinder rationale: name, format, and extra_display are always
|
||||||
* bounded to one less than their size so they are always \0 terminated.
|
* explicitly zeroed and bounded to one less than their size so they are
|
||||||
|
* always \0 terminated.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -207,11 +209,14 @@ int pv_remote_set(opts_t opts, pvstate_t state)
|
|||||||
if (opts->format != NULL) {
|
if (opts->format != NULL) {
|
||||||
strncpy(msgbuf.format, opts->format, sizeof(msgbuf.format) - 1); /* flawfinder: ignore */
|
strncpy(msgbuf.format, opts->format, sizeof(msgbuf.format) - 1); /* flawfinder: ignore */
|
||||||
}
|
}
|
||||||
|
if (opts->extra_display != NULL) {
|
||||||
|
strncpy(msgbuf.extra_display, opts->extra_display, sizeof(msgbuf.extra_display) - 1); /* flawfinder: ignore */
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* flawfinder rationale: both name and format are explicitly bounded
|
* flawfinder rationale: name, format, and extra_display are
|
||||||
* to 1 less than the size of their buffer and the buffer is \0
|
* explicitly bounded to 1 less than the size of their buffer and
|
||||||
* terminated by memset() earlier.
|
* the buffer is \0 terminated by memset() earlier.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -364,9 +369,11 @@ void pv_remote_check(pvstate_t state)
|
|||||||
|
|
||||||
pv_state_format_string_set(state, NULL);
|
pv_state_format_string_set(state, NULL);
|
||||||
pv_state_name_set(state, NULL);
|
pv_state_name_set(state, NULL);
|
||||||
|
pv_state_extra_display_set(state, NULL);
|
||||||
|
|
||||||
msgbuf.name[sizeof(msgbuf.name) - 1] = '\0';
|
msgbuf.name[sizeof(msgbuf.name) - 1] = '\0';
|
||||||
msgbuf.format[sizeof(msgbuf.format) - 1] = '\0';
|
msgbuf.format[sizeof(msgbuf.format) - 1] = '\0';
|
||||||
|
msgbuf.extra_display[sizeof(msgbuf.extra_display) - 1] = '\0';
|
||||||
|
|
||||||
pv_state_set_format(state, msgbuf.progress, msgbuf.timer,
|
pv_state_set_format(state, msgbuf.progress, msgbuf.timer,
|
||||||
msgbuf.eta, msgbuf.fineta, msgbuf.rate,
|
msgbuf.eta, msgbuf.fineta, msgbuf.rate,
|
||||||
@@ -389,6 +396,8 @@ void pv_remote_check(pvstate_t state)
|
|||||||
pv_state_height_set(state, msgbuf.height, msgbuf.height_set_manually);
|
pv_state_height_set(state, msgbuf.height, msgbuf.height_set_manually);
|
||||||
if (msgbuf.format[0] != '\0')
|
if (msgbuf.format[0] != '\0')
|
||||||
pv_state_format_string_set(state, msgbuf.format);
|
pv_state_format_string_set(state, msgbuf.format);
|
||||||
|
if (msgbuf.extra_display[0] != '\0')
|
||||||
|
pv_state_extra_display_set(state, msgbuf.extra_display);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -407,10 +416,10 @@ void pv_remote_fini(void)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !SIGINFO_PROVIDES_PID */
|
#else /* !PV_REMOTE_CONTROL */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Dummy stubs for remote control when we don't have SIGINFO_PROVIDES_PID.
|
* Dummy stubs for remote control when we don't have PV_REMOTE_CONTROL.
|
||||||
*/
|
*/
|
||||||
void pv_remote_init(void)
|
void pv_remote_init(void)
|
||||||
{
|
{
|
||||||
|
|||||||
+4
-4
@@ -164,8 +164,8 @@ void pv_calculate_transfer_rate(pvstate_t state, bool final)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Ensure the percentage is never negative or huge. */
|
/* Ensure the percentage is never negative or huge. */
|
||||||
if (state->calc.percentage < 0)
|
if (state->calc.percentage < 0.0)
|
||||||
state->calc.percentage = 0;
|
state->calc.percentage = 0.0;
|
||||||
if (state->calc.percentage > 100000)
|
if (state->calc.percentage > 100000.0)
|
||||||
state->calc.percentage = 100000;
|
state->calc.percentage = 100000.0;
|
||||||
}
|
}
|
||||||
|
|||||||
+656
-658
File diff suppressed because it is too large
Load Diff
@@ -136,9 +136,6 @@ void pv_elapsedtime_add(struct timespec *return_time, const struct timespec *fir
|
|||||||
* large enough and are relying on the compiler to do the casting
|
* large enough and are relying on the compiler to do the casting
|
||||||
* correctly, since the manual for timespec(3) states the types are
|
* correctly, since the manual for timespec(3) states the types are
|
||||||
* implementation-defined.
|
* implementation-defined.
|
||||||
*
|
|
||||||
* TODO: review this to make sure that this isn't just an elaborate
|
|
||||||
* excuse for "it's hard to fix and I don't know how".
|
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -390,7 +390,7 @@ int pv_next_file(pvstate_t state, unsigned int filenum, int oldfd)
|
|||||||
* internal state and must not be passed to free() or used after "state" is
|
* internal state and must not be passed to free() or used after "state" is
|
||||||
* freed.
|
* freed.
|
||||||
*/
|
*/
|
||||||
/*@out@*/ const char *pv_current_file_name(pvstate_t state)
|
/*@keep@*/ const char *pv_current_file_name(pvstate_t state)
|
||||||
{
|
{
|
||||||
static char *str_none = NULL;
|
static char *str_none = NULL;
|
||||||
static char *str_stdin = NULL;
|
static char *str_stdin = NULL;
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Formatter function for average rate.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Average transfer rate.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_average_rate(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
char content[128]; /* flawfinder: ignore - always bounded */
|
||||||
|
|
||||||
|
content[0] = '\0';
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*@-mustfreefresh@ */
|
||||||
|
if (args->state->control.bits && !args->state->control.linemode) {
|
||||||
|
/* bits per second */
|
||||||
|
pv_describe_amount(content, sizeof(content),
|
||||||
|
"(%s)", 8 * args->state->calc.average_rate, "", _("b/s"), args->display->count_type);
|
||||||
|
} else {
|
||||||
|
/* bytes or lines per second */
|
||||||
|
pv_describe_amount(content,
|
||||||
|
sizeof(content), "(%s)", args->state->calc.average_rate, _("/s"), _("B/s"),
|
||||||
|
args->display->count_type);
|
||||||
|
}
|
||||||
|
/*@+mustfreefresh@ *//* splint: see above. */
|
||||||
|
|
||||||
|
return pv_formatter_segmentcontent(content, args);
|
||||||
|
}
|
||||||
@@ -0,0 +1,204 @@
|
|||||||
|
/*
|
||||||
|
* Formatter functions for styled progress bars.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#if defined(ENABLE_NLS) && defined(HAVE_WCHAR_H)
|
||||||
|
#include <wchar.h>
|
||||||
|
#if defined(HAVE_WCTYPE_H)
|
||||||
|
#include <wctype.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Populate "style" with the named bar style, falling back to plain if the
|
||||||
|
* name was not recognised. Returns true if the named style was found.
|
||||||
|
*
|
||||||
|
* Note that strings are copied into the structure, rather than just
|
||||||
|
* updating pointers, to maintain separation of concern between different
|
||||||
|
* parts of the code - and because on 64-bit architectures, the sizes of the
|
||||||
|
* data types and their associated alignment padding tend to outweigh the
|
||||||
|
* memory savings from using pointers and shared strings.
|
||||||
|
*/
|
||||||
|
static bool pv_barstyle(pvformatter_args_t args, pvbarstyle_t style, const char *name)
|
||||||
|
{
|
||||||
|
#define populate_string(item, str, w) { \
|
||||||
|
item.width = w; \
|
||||||
|
item.bytes = strlen(str); /* flawfinder: ignore */ \
|
||||||
|
if (item.bytes > 0 && item.bytes <= PV_BARSTYLE_SIZEOF_STRING) \
|
||||||
|
memcpy(item.string, str, item.bytes); /* flawfinder: ignore */ \
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* flawfinder - strlen() on null-terminated static strings is OK,
|
||||||
|
* and with the memcpy(), we check the buffer is big enough.
|
||||||
|
*/
|
||||||
|
|
||||||
|
memset(style, 0, sizeof(*style));
|
||||||
|
|
||||||
|
if (args->state->control.can_display_utf8 && 0 == strcmp(name, "block")) {
|
||||||
|
|
||||||
|
style->style_id = 2;
|
||||||
|
|
||||||
|
populate_string(style->indicator, "◀▶", 2);
|
||||||
|
populate_string(style->tip, "", 0);
|
||||||
|
|
||||||
|
populate_string(style->filler[0], " ", 1);
|
||||||
|
populate_string(style->filler[1], "█", 1);
|
||||||
|
|
||||||
|
style->filler_entries = 2;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} else if (args->state->control.can_display_utf8 && 0 == strcmp(name, "granular")) {
|
||||||
|
|
||||||
|
style->style_id = 3;
|
||||||
|
|
||||||
|
populate_string(style->indicator, "◀▶", 2);
|
||||||
|
populate_string(style->tip, "", 0);
|
||||||
|
|
||||||
|
populate_string(style->filler[0], " ", 1);
|
||||||
|
populate_string(style->filler[1], "▏", 1);
|
||||||
|
populate_string(style->filler[2], "▎", 1);
|
||||||
|
populate_string(style->filler[3], "▍", 1);
|
||||||
|
populate_string(style->filler[4], "▌", 1);
|
||||||
|
populate_string(style->filler[5], "▋", 1);
|
||||||
|
populate_string(style->filler[6], "▊", 1);
|
||||||
|
populate_string(style->filler[7], "▉", 1);
|
||||||
|
populate_string(style->filler[8], "█", 1);
|
||||||
|
|
||||||
|
style->filler_entries = 9;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} else if (args->state->control.can_display_utf8 && 0 == strcmp(name, "shaded")) {
|
||||||
|
|
||||||
|
style->style_id = 4;
|
||||||
|
|
||||||
|
populate_string(style->indicator, "▒▓▒", 3);
|
||||||
|
populate_string(style->tip, "", 0);
|
||||||
|
|
||||||
|
populate_string(style->filler[0], "░", 1);
|
||||||
|
populate_string(style->filler[1], "▒", 1);
|
||||||
|
populate_string(style->filler[2], "▓", 1);
|
||||||
|
populate_string(style->filler[3], "█", 1);
|
||||||
|
|
||||||
|
style->filler_entries = 4;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Default plain style. */
|
||||||
|
|
||||||
|
style->style_id = 1;
|
||||||
|
|
||||||
|
populate_string(style->indicator, "<=>", 3);
|
||||||
|
populate_string(style->tip, ">", 1);
|
||||||
|
|
||||||
|
populate_string(style->filler[0], " ", 1);
|
||||||
|
populate_string(style->filler[1], "=", 1);
|
||||||
|
|
||||||
|
style->filler_entries = 2;
|
||||||
|
|
||||||
|
if (0 == strcmp(name, "plain"))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the index into args->display->barstyle for the style with the
|
||||||
|
* given name, adding that style to the array if it's not there already and
|
||||||
|
* there's room.
|
||||||
|
*
|
||||||
|
* If there is no room, returns zero, so the first style is re-used.
|
||||||
|
*/
|
||||||
|
int8_t pv_display_barstyle_index(pvformatter_args_t args, const char *name)
|
||||||
|
{
|
||||||
|
struct pvbarstyle_s style;
|
||||||
|
int8_t barstyle_index;
|
||||||
|
#ifdef ENABLE_DEBUGGING
|
||||||
|
bool found;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
memset(&style, 0, sizeof(style));
|
||||||
|
#ifdef ENABLE_DEBUGGING
|
||||||
|
found = pv_barstyle(args, &style, name);
|
||||||
|
if (!found)
|
||||||
|
debug("%s: %s", name, "bar style not found, using plain");
|
||||||
|
#else
|
||||||
|
(void) pv_barstyle(args, &style, name);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (barstyle_index = 0;
|
||||||
|
barstyle_index < PV_BARSTYLE_MAX && args->display->barstyle[barstyle_index].style_id > 0;
|
||||||
|
barstyle_index++) {
|
||||||
|
if (args->display->barstyle[barstyle_index].style_id == style.style_id) {
|
||||||
|
debug("%s: %s: %d", name, "found in bar style array", barstyle_index);
|
||||||
|
return barstyle_index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (barstyle_index >= PV_BARSTYLE_MAX) {
|
||||||
|
debug("%s: %s", name, "no room to add another bar style - returning 0");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(&(args->display->barstyle[barstyle_index]), &style, sizeof(style)); /* flawfinder: ignore */
|
||||||
|
/* flawfinder - the destination is an array element of the right size. */
|
||||||
|
debug("%s: %s: %d", name, "added to bar style array", barstyle_index);
|
||||||
|
return barstyle_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pvdisplay_bytecount_t pv_formatter_bar_default(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
if (0 == args->segment->parameter) {
|
||||||
|
const char *default_name;
|
||||||
|
default_name = args->state->control.default_bar_style;
|
||||||
|
/*@-branchstate@ */
|
||||||
|
if (NULL == default_name)
|
||||||
|
default_name = "plain";
|
||||||
|
/*@+branchstate@ */
|
||||||
|
/* splint - it doesn't matter that default_name may be static */
|
||||||
|
args->segment->parameter = 1 + pv_display_barstyle_index(args, default_name);
|
||||||
|
}
|
||||||
|
return pv_formatter_progress_bar_only(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
pvdisplay_bytecount_t pv_formatter_bar_plain(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
if (0 == args->segment->parameter)
|
||||||
|
args->segment->parameter = 1 + pv_display_barstyle_index(args, "plain");
|
||||||
|
return pv_formatter_progress_bar_only(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
pvdisplay_bytecount_t pv_formatter_bar_block(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
if (0 == args->segment->parameter)
|
||||||
|
args->segment->parameter = 1 + pv_display_barstyle_index(args, "block");
|
||||||
|
return pv_formatter_progress_bar_only(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
pvdisplay_bytecount_t pv_formatter_bar_granular(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
if (0 == args->segment->parameter)
|
||||||
|
args->segment->parameter = 1 + pv_display_barstyle_index(args, "granular");
|
||||||
|
return pv_formatter_progress_bar_only(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
pvdisplay_bytecount_t pv_formatter_bar_shaded(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
if (0 == args->segment->parameter)
|
||||||
|
args->segment->parameter = 1 + pv_display_barstyle_index(args, "shaded");
|
||||||
|
return pv_formatter_progress_bar_only(args);
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Formatter function for transfer buffer percentage utilisation.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Percentage transfer buffer utilisation.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_buffer_percent(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
char content[16]; /* flawfinder: ignore - always bounded */
|
||||||
|
|
||||||
|
content[0] = '\0';
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (args->state->transfer.buffer_size > 0) {
|
||||||
|
double pct_used = pv_percentage((off_t)
|
||||||
|
(args->state->transfer.read_position -
|
||||||
|
args->state->transfer.write_position),
|
||||||
|
(off_t)
|
||||||
|
(args->state->transfer.buffer_size));
|
||||||
|
(void) pv_snprintf(content, sizeof(content), "{%3.0f%%}", pct_used);
|
||||||
|
}
|
||||||
|
#ifdef HAVE_SPLICE
|
||||||
|
if (args->state->transfer.splice_used)
|
||||||
|
(void) pv_snprintf(content, sizeof(content), "{%s}", "----");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return pv_formatter_segmentcontent(content, args);
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* Formatter function for bytes or lines transferred.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Number of bytes or lines transferred.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_bytes(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
char content[128]; /* flawfinder: ignore - always bounded */
|
||||||
|
|
||||||
|
args->display->showing_bytes = true;
|
||||||
|
|
||||||
|
content[0] = '\0';
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*@-mustfreefresh@ */
|
||||||
|
if (args->state->control.bits && !args->state->control.linemode) {
|
||||||
|
pv_describe_amount(content, sizeof(content), "%s",
|
||||||
|
(long double) (args->state->transfer.transferred * 8), "", _("b"),
|
||||||
|
args->display->count_type);
|
||||||
|
} else {
|
||||||
|
pv_describe_amount(content, sizeof(content), "%s",
|
||||||
|
(long double) (args->state->transfer.transferred), "", _("B"),
|
||||||
|
args->display->count_type);
|
||||||
|
}
|
||||||
|
/*@+mustfreefresh@ *//* splint - false positive from gettext(). */
|
||||||
|
|
||||||
|
return pv_formatter_segmentcontent(content, args);
|
||||||
|
}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Formatter function for ETA display.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Estimated time until completion.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_eta(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
char content[128]; /* flawfinder: ignore - always bounded */
|
||||||
|
long eta;
|
||||||
|
|
||||||
|
content[0] = '\0';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't try to calculate this if the size is not known.
|
||||||
|
*/
|
||||||
|
if (args->state->control.size < 1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
eta =
|
||||||
|
pv_seconds_remaining((args->state->transfer.transferred - args->display->initial_offset),
|
||||||
|
args->state->control.size - args->display->initial_offset,
|
||||||
|
args->state->calc.current_avg_rate);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bounds check, so we don't overrun the suffix buffer. This means
|
||||||
|
* the ETA will always be less than 100,000 hours.
|
||||||
|
*/
|
||||||
|
eta = pv_bound_long(eta, 0, (long) 360000000L);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the ETA is more than a day, include a day count as well as
|
||||||
|
* hours, minutes, and seconds.
|
||||||
|
*/
|
||||||
|
/*@-mustfreefresh@ */
|
||||||
|
if (eta > 86400L) {
|
||||||
|
(void) pv_snprintf(content,
|
||||||
|
sizeof(content),
|
||||||
|
"%.16s %ld:%02ld:%02ld:%02ld",
|
||||||
|
_("ETA"), eta / 86400, (eta / 3600) % 24, (eta / 60) % 60, eta % 60);
|
||||||
|
} else {
|
||||||
|
(void) pv_snprintf(content,
|
||||||
|
sizeof(content),
|
||||||
|
"%.16s %ld:%02ld:%02ld", _("ETA"), eta / 3600, (eta / 60) % 60, eta % 60);
|
||||||
|
}
|
||||||
|
/*@+mustfreefresh@ *//* splint: see above. */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If this is the final update, show a blank space where the ETA
|
||||||
|
* used to be.
|
||||||
|
*/
|
||||||
|
if (args->display->final_update) {
|
||||||
|
size_t erase_idx;
|
||||||
|
for (erase_idx = 0; erase_idx < sizeof(content) && content[erase_idx] != '\0'; erase_idx++) {
|
||||||
|
content[erase_idx] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pv_formatter_segmentcontent(content, args);
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Formatter function for the local time at which the transfer is expected
|
||||||
|
* to complete.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Estimated local time of completion.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_fineta(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
char content[128]; /* flawfinder: ignore - always bounded */
|
||||||
|
time_t now, then;
|
||||||
|
struct tm *time_ptr;
|
||||||
|
long eta;
|
||||||
|
const char *time_format;
|
||||||
|
bool show_fineta;
|
||||||
|
|
||||||
|
content[0] = '\0';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't try to calculate this if the size is not known.
|
||||||
|
*/
|
||||||
|
if (args->state->control.size < 1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
now = time(NULL);
|
||||||
|
show_fineta = true;
|
||||||
|
time_format = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The completion clock time may be hidden by a failed localtime
|
||||||
|
* lookup.
|
||||||
|
*/
|
||||||
|
|
||||||
|
eta = pv_seconds_remaining(args->state->transfer.transferred - args->display->initial_offset,
|
||||||
|
args->state->control.size - args->display->initial_offset,
|
||||||
|
args->state->calc.current_avg_rate);
|
||||||
|
|
||||||
|
/* Bounds check - see pv_formatter_eta(). */
|
||||||
|
eta = pv_bound_long(eta, 0, (long) 360000000L);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Only include the date if the ETA is more than 6 hours
|
||||||
|
* away.
|
||||||
|
*/
|
||||||
|
if (eta > (long) (6 * 3600)) {
|
||||||
|
time_format = "%Y-%m-%d %H:%M:%S";
|
||||||
|
} else {
|
||||||
|
time_format = "%H:%M:%S";
|
||||||
|
}
|
||||||
|
|
||||||
|
then = now + eta;
|
||||||
|
time_ptr = localtime(&then);
|
||||||
|
|
||||||
|
if (NULL == time_ptr) {
|
||||||
|
show_fineta = false;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* The localtime() function keeps data stored in a static
|
||||||
|
* buffer that gets overwritten by time functions.
|
||||||
|
*/
|
||||||
|
struct tm time = *time_ptr;
|
||||||
|
size_t content_bytes;
|
||||||
|
|
||||||
|
/*@-mustfreefresh@ */
|
||||||
|
(void) pv_snprintf(content, sizeof(content), "%.16s ", _("FIN"));
|
||||||
|
/*@+mustfreefresh@ *//* splint: see above. */
|
||||||
|
content_bytes = strlen(content); /* flawfinder: ignore */
|
||||||
|
/* flawfinder: always bounded with \0 by pv_snprintf(). */
|
||||||
|
(void) strftime(content + content_bytes, sizeof(content) - 1 - content_bytes, time_format, &time);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!show_fineta) {
|
||||||
|
size_t erase_idx;
|
||||||
|
for (erase_idx = 0; erase_idx < sizeof(content) && content[erase_idx] != '\0'; erase_idx++) {
|
||||||
|
content[erase_idx] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pv_formatter_segmentcontent(content, args);
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Formatter function for showing the last bytes written.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Display the last few bytes written.
|
||||||
|
*
|
||||||
|
* As a side effect, this sets args->display->lastwritten_bytes to
|
||||||
|
* the segment's chosen_size, if it was previously smaller than that.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_last_written(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
pvdisplay_bytecount_t bytes_to_show, read_offset, write_offset, remaining;
|
||||||
|
|
||||||
|
args->display->showing_last_written = true;
|
||||||
|
|
||||||
|
bytes_to_show = args->segment->chosen_size;
|
||||||
|
if (0 == bytes_to_show)
|
||||||
|
bytes_to_show = args->segment->width;
|
||||||
|
if (0 == bytes_to_show)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (bytes_to_show > PV_SIZEOF_LASTWRITTEN_BUFFER)
|
||||||
|
bytes_to_show = PV_SIZEOF_LASTWRITTEN_BUFFER;
|
||||||
|
if (bytes_to_show > args->display->lastwritten_bytes)
|
||||||
|
args->display->lastwritten_bytes = bytes_to_show;
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (args->offset + bytes_to_show >= args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
args->segment->offset = args->offset;
|
||||||
|
args->segment->bytes = bytes_to_show;
|
||||||
|
|
||||||
|
read_offset = args->display->lastwritten_bytes - bytes_to_show;
|
||||||
|
write_offset = args->offset;
|
||||||
|
for (remaining = bytes_to_show; remaining > 0; remaining--) {
|
||||||
|
char display_char = args->display->lastwritten_buffer[read_offset++];
|
||||||
|
args->buffer[write_offset++] = pv_isprint(display_char) ? display_char : '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
return bytes_to_show;
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Formatter function for showing the name of the transfer.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Display the transfer's name.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_name(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
char string_format[32]; /* flawfinder: ignore - always bounded */
|
||||||
|
char content[512]; /* flawfinder: ignore - always bounded */
|
||||||
|
pvdisplay_bytecount_t field_width;
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
field_width = args->segment->chosen_size;
|
||||||
|
if (field_width < 1)
|
||||||
|
field_width = 9;
|
||||||
|
if (field_width > 500)
|
||||||
|
field_width = 500;
|
||||||
|
|
||||||
|
memset(string_format, 0, sizeof(string_format));
|
||||||
|
(void) pv_snprintf(string_format, sizeof(string_format), "%%%d.500s:", field_width);
|
||||||
|
|
||||||
|
content[0] = '\0';
|
||||||
|
if (args->state->control.name) {
|
||||||
|
(void) pv_snprintf(content, sizeof(content), string_format, args->state->control.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pv_formatter_segmentcontent(content, args);
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Formatter function for the most recently written line.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Display the previously written line.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_previous_line(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
pvdisplay_bytecount_t bytes_to_show, read_offset, write_offset, remaining;
|
||||||
|
|
||||||
|
args->display->showing_previous_line = true;
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
bytes_to_show = args->segment->chosen_size;
|
||||||
|
if (0 == bytes_to_show)
|
||||||
|
bytes_to_show = args->segment->width;
|
||||||
|
if (0 == bytes_to_show)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (bytes_to_show > PV_SIZEOF_PREVLINE_BUFFER)
|
||||||
|
bytes_to_show = PV_SIZEOF_PREVLINE_BUFFER;
|
||||||
|
|
||||||
|
if (args->offset + bytes_to_show >= args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
args->segment->offset = args->offset;
|
||||||
|
args->segment->bytes = bytes_to_show;
|
||||||
|
|
||||||
|
read_offset = 0;
|
||||||
|
write_offset = args->offset;
|
||||||
|
for (remaining = bytes_to_show; remaining > 0; remaining--) {
|
||||||
|
char display_char = args->display->previous_line[read_offset++];
|
||||||
|
args->buffer[write_offset++] = pv_isprint(display_char) ? display_char : ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
return bytes_to_show;
|
||||||
|
}
|
||||||
@@ -0,0 +1,407 @@
|
|||||||
|
/*
|
||||||
|
* Formatter functions for progress bars.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#if HAVE_MATH_H
|
||||||
|
#include <math.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Convenience macro for appending a string to the buffer. */
|
||||||
|
#define append_to_buffer(x) { \
|
||||||
|
if (buffer_offset < (buffer_size - x.bytes)) { \
|
||||||
|
memcpy(&(buffer[buffer_offset]), x.string, x.bytes); /* flawfinder: ignore */ \
|
||||||
|
buffer_offset += x.bytes; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* flawfinder - we are checking that there is room in the destination
|
||||||
|
* buffer, given its size and our current offset.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write a progress bar to a buffer, in known-size or rate-gauge mode - a
|
||||||
|
* bar, and a percentage (size) or max rate (gauge). The total width of the
|
||||||
|
* content is bounded to the given width. Returns the number of bytes
|
||||||
|
* written to the buffer.
|
||||||
|
*
|
||||||
|
* If "bar_sides" is false, only the bar itself is rendered, not the opening
|
||||||
|
* and closing characters.
|
||||||
|
*
|
||||||
|
* If "include_bar" is false, the bar is omitted entirely.
|
||||||
|
*
|
||||||
|
* If "include_amount" is false, the percentage or rate after the bar is
|
||||||
|
* omitted.
|
||||||
|
*
|
||||||
|
* This is only called by pv_formatter_progress().
|
||||||
|
*/
|
||||||
|
static pvdisplay_bytecount_t pv_formatter_progress_knownsize(pvformatter_args_t args, char *buffer,
|
||||||
|
pvdisplay_bytecount_t buffer_size, bool bar_sides,
|
||||||
|
bool include_bar, bool include_amount)
|
||||||
|
{
|
||||||
|
char after_bar[32]; /* flawfinder: ignore - only populated by pv_snprintf(). */
|
||||||
|
pvdisplay_bytecount_t after_bar_bytes, buffer_offset;
|
||||||
|
pvdisplay_width_t after_bar_width;
|
||||||
|
pvdisplay_width_t bar_area_width, filled_bar_width, pad_count;
|
||||||
|
double bar_percentage;
|
||||||
|
pvbarstyle_t style;
|
||||||
|
pvdisplay_bytecount_t full_cell_index;
|
||||||
|
bool has_tip = false;
|
||||||
|
|
||||||
|
buffer[0] = '\0';
|
||||||
|
|
||||||
|
if (args->segment->parameter > 0 && args->segment->parameter <= PV_BARSTYLE_MAX) {
|
||||||
|
style = &(args->display->barstyle[args->segment->parameter - 1]);
|
||||||
|
} else {
|
||||||
|
style = &(args->display->barstyle[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
full_cell_index = style->filler_entries;
|
||||||
|
if (full_cell_index > 0)
|
||||||
|
full_cell_index--;
|
||||||
|
if (1 == full_cell_index && style->tip.width > 0)
|
||||||
|
has_tip = true;
|
||||||
|
|
||||||
|
memset(after_bar, 0, sizeof(after_bar));
|
||||||
|
|
||||||
|
if (args->state->control.size > 0) {
|
||||||
|
/* Percentage of data transferred. */
|
||||||
|
bar_percentage = (double) (args->state->calc.percentage);
|
||||||
|
(void) pv_snprintf(after_bar, sizeof(after_bar), " %3ld%%", (int) bar_percentage);
|
||||||
|
} else {
|
||||||
|
/* Current rate vs max rate. */
|
||||||
|
bar_percentage = 0.0;
|
||||||
|
if (args->state->calc.rate_max > 0) {
|
||||||
|
bar_percentage =
|
||||||
|
(double) (100.0 * args->state->calc.transfer_rate / args->state->calc.rate_max);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@-mustfreefresh@ */
|
||||||
|
if (args->state->control.bits && !args->state->control.linemode) {
|
||||||
|
/* bits per second */
|
||||||
|
pv_describe_amount(after_bar, sizeof(after_bar), "/%s",
|
||||||
|
8.0 * args->state->calc.rate_max, "", _("b/s"), args->display->count_type);
|
||||||
|
} else {
|
||||||
|
/* bytes or lines per second */
|
||||||
|
pv_describe_amount(after_bar, sizeof(after_bar),
|
||||||
|
"/%s", args->state->calc.rate_max, _("/s"), _("B/s"),
|
||||||
|
args->display->count_type);
|
||||||
|
}
|
||||||
|
/*@+mustfreefresh@ *//* splint: see above about gettext(). */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!include_amount)
|
||||||
|
after_bar[0] = '\0';
|
||||||
|
|
||||||
|
after_bar_bytes = strlen(after_bar); /* flawfinder: ignore */
|
||||||
|
/* flawfinder: always \0-terminated by pv_snprintf() and the earlier memset(). */
|
||||||
|
after_bar_width = pv_strwidth(after_bar, after_bar_bytes);
|
||||||
|
|
||||||
|
if (!include_bar) {
|
||||||
|
/*
|
||||||
|
* Only returning the "after bar" portion - the amount
|
||||||
|
* (progress or max rate).
|
||||||
|
*/
|
||||||
|
if (buffer_size < after_bar_bytes)
|
||||||
|
return 0;
|
||||||
|
if (after_bar_bytes > 1) {
|
||||||
|
/* NB we skip the leading space. */
|
||||||
|
memmove(buffer, after_bar + 1, after_bar_bytes - 1);
|
||||||
|
buffer[after_bar_bytes - 1] = '\0';
|
||||||
|
return after_bar_bytes - 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bar_sides) {
|
||||||
|
if (args->segment->width < (after_bar_width + 2))
|
||||||
|
return 0;
|
||||||
|
bar_area_width = args->segment->width - after_bar_width - 2;
|
||||||
|
} else {
|
||||||
|
if (args->segment->width < after_bar_width)
|
||||||
|
return 0;
|
||||||
|
bar_area_width = args->segment->width - after_bar_width;
|
||||||
|
}
|
||||||
|
|
||||||
|
filled_bar_width = (pvdisplay_width_t) ((bar_area_width * bar_percentage) / 100);
|
||||||
|
/* Leave room for the tip of the bar. */
|
||||||
|
if (has_tip && filled_bar_width > 0)
|
||||||
|
filled_bar_width -= style->tip.width;
|
||||||
|
|
||||||
|
debug("percentage=%.2f width=%d bar_area_width=%d filled_bar_width=%d after_bar_width=%d", bar_percentage,
|
||||||
|
args->segment->width, bar_area_width, filled_bar_width, after_bar_width);
|
||||||
|
|
||||||
|
buffer_offset = 0;
|
||||||
|
|
||||||
|
if (bar_sides) {
|
||||||
|
/* The opening of the bar area. */
|
||||||
|
buffer[buffer_offset++] = '[';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The bar portion. */
|
||||||
|
pad_count = 0;
|
||||||
|
while (pad_count < filled_bar_width && pad_count < bar_area_width) {
|
||||||
|
append_to_buffer(style->filler[full_cell_index]);
|
||||||
|
pad_count += style->filler[full_cell_index].width;
|
||||||
|
if (0 == style->filler[full_cell_index].width)
|
||||||
|
pad_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The tip of the bar, if not at 100%. */
|
||||||
|
if (has_tip && pad_count < bar_area_width) {
|
||||||
|
append_to_buffer(style->tip);
|
||||||
|
pad_count += style->tip.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* A partial cell, if there are intermediates and we're not at 100%. */
|
||||||
|
if (pad_count < bar_area_width && full_cell_index > 1 && !has_tip) {
|
||||||
|
double exact_width = (((double) bar_area_width) * bar_percentage) / 100.0;
|
||||||
|
double cell_portion = exact_width - (double) filled_bar_width;
|
||||||
|
double cell_index_double = ((double) full_cell_index) * cell_portion;
|
||||||
|
size_t cell_index = (size_t) cell_index_double;
|
||||||
|
|
||||||
|
if (cell_index > full_cell_index)
|
||||||
|
cell_index = full_cell_index;
|
||||||
|
|
||||||
|
append_to_buffer(style->filler[cell_index]);
|
||||||
|
pad_count += style->filler[cell_index].width;
|
||||||
|
if (0 == style->filler[cell_index].width)
|
||||||
|
pad_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The spaces after the bar. */
|
||||||
|
while (pad_count < bar_area_width) {
|
||||||
|
append_to_buffer(style->filler[0]);
|
||||||
|
pad_count += style->filler[0].width;
|
||||||
|
if (0 == style->filler[0].width)
|
||||||
|
pad_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bar_sides) {
|
||||||
|
/* The closure of the bar area. */
|
||||||
|
if (buffer_offset < buffer_size - 1)
|
||||||
|
buffer[buffer_offset++] = ']';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The percentage. */
|
||||||
|
if (after_bar_bytes > 0 && after_bar_bytes < (buffer_size - 1 - buffer_offset)) {
|
||||||
|
memmove(buffer + buffer_offset, after_bar, after_bar_bytes);
|
||||||
|
buffer_offset += after_bar_bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer[buffer_offset] = '\0';
|
||||||
|
|
||||||
|
return buffer_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write a progress bar to a buffer, in unknown-size mode - just a moving
|
||||||
|
* indicator. The total width of the content is bounded to the given width.
|
||||||
|
* Returns the number of bytes written to the buffer.
|
||||||
|
*
|
||||||
|
* If "bar_sides" is false, only the bar itself is rendered, not the opening
|
||||||
|
* and closing characters.
|
||||||
|
*
|
||||||
|
* This is only called by pv_formatter_progress().
|
||||||
|
*/
|
||||||
|
static pvdisplay_bytecount_t pv_formatter_progress_unknownsize(pvformatter_args_t args, char *buffer,
|
||||||
|
pvdisplay_bytecount_t buffer_size, bool bar_sides)
|
||||||
|
{
|
||||||
|
pvdisplay_bytecount_t buffer_offset;
|
||||||
|
pvdisplay_width_t bar_area_width, pad_count;
|
||||||
|
double indicator_position, padding_width;
|
||||||
|
pvbarstyle_t style;
|
||||||
|
|
||||||
|
buffer[0] = '\0';
|
||||||
|
|
||||||
|
if (args->segment->parameter > 0 && args->segment->parameter <= PV_BARSTYLE_MAX) {
|
||||||
|
style = &(args->display->barstyle[args->segment->parameter - 1]);
|
||||||
|
} else {
|
||||||
|
style = &(args->display->barstyle[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bar_sides) {
|
||||||
|
if (args->segment->width < (style->indicator.width + 3))
|
||||||
|
return 0;
|
||||||
|
bar_area_width = args->segment->width - (style->indicator.width + 2);
|
||||||
|
} else {
|
||||||
|
if (args->segment->width < (style->indicator.width + 2))
|
||||||
|
return 0;
|
||||||
|
bar_area_width = args->segment->width - style->indicator.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note that pv_calculate_transfer_rate() sets the percentage when
|
||||||
|
* the size is unknown to a value that goes 0 - 200 and resets, so
|
||||||
|
* here we make values above 100 send the indicator back down again,
|
||||||
|
* so it moves back and forth.
|
||||||
|
*/
|
||||||
|
indicator_position = args->state->calc.percentage;
|
||||||
|
if (indicator_position > 200.0)
|
||||||
|
#if HAVE_FMOD
|
||||||
|
indicator_position = fmod(indicator_position, 200.0);
|
||||||
|
#else
|
||||||
|
{
|
||||||
|
while (indicator_position > 200.0)
|
||||||
|
indicator_position -= 200.0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (indicator_position > 100.0)
|
||||||
|
indicator_position = 200.0 - indicator_position;
|
||||||
|
if (indicator_position < 0.0)
|
||||||
|
indicator_position = 0.0;
|
||||||
|
|
||||||
|
buffer_offset = 0;
|
||||||
|
|
||||||
|
if (bar_sides) {
|
||||||
|
/* The opening of the bar area. */
|
||||||
|
buffer[buffer_offset++] = '[';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The spaces before the indicator. */
|
||||||
|
pad_count = 0;
|
||||||
|
padding_width = (((double) bar_area_width) * indicator_position) / 100.0;
|
||||||
|
while (pad_count < bar_area_width && pad_count < (pvdisplay_width_t) padding_width) {
|
||||||
|
append_to_buffer(style->filler[0]);
|
||||||
|
pad_count += style->filler[0].width;
|
||||||
|
if (0 == style->filler[0].width)
|
||||||
|
pad_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The indicator. */
|
||||||
|
if (buffer_offset < buffer_size - style->indicator.bytes) {
|
||||||
|
append_to_buffer(style->indicator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The spaces after the indicator. */
|
||||||
|
while (pad_count < bar_area_width) {
|
||||||
|
append_to_buffer(style->filler[0]);
|
||||||
|
pad_count += style->filler[0].width;
|
||||||
|
if (0 == style->filler[0].width)
|
||||||
|
pad_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bar_sides) {
|
||||||
|
/* The closure of the bar area. */
|
||||||
|
if (buffer_offset < buffer_size - 1)
|
||||||
|
buffer[buffer_offset++] = ']';
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer[buffer_offset] = '\0';
|
||||||
|
|
||||||
|
return buffer_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Progress bar.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_progress(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
char content[4096]; /* flawfinder: ignore - always bounded */
|
||||||
|
pvdisplay_bytecount_t bytes;
|
||||||
|
|
||||||
|
content[0] = '\0';
|
||||||
|
|
||||||
|
if (0 == args->segment->parameter) {
|
||||||
|
const char *default_name;
|
||||||
|
default_name = args->state->control.default_bar_style;
|
||||||
|
/*@-branchstate@ */
|
||||||
|
if (NULL == default_name)
|
||||||
|
default_name = "plain";
|
||||||
|
/*@+branchstate@ */
|
||||||
|
/* splint - it doesn't matter that default_name may be static */
|
||||||
|
args->segment->parameter = 1 + pv_display_barstyle_index(args, default_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (args->state->control.size > 0 || args->state->control.rate_gauge) {
|
||||||
|
/* Known size or rate gauge - bar with percentage. */
|
||||||
|
bytes = pv_formatter_progress_knownsize(args, content, sizeof(content), true, true, true);
|
||||||
|
} else {
|
||||||
|
/* Unknown size - back-and-forth moving indicator. */
|
||||||
|
bytes = pv_formatter_progress_unknownsize(args, content, sizeof(content), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
content[bytes] = '\0';
|
||||||
|
|
||||||
|
return pv_formatter_segmentcontent(content, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Progress bar, without sides and without a number afterwards.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_progress_bar_only(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
char content[4096]; /* flawfinder: ignore - always bounded */
|
||||||
|
pvdisplay_bytecount_t bytes;
|
||||||
|
|
||||||
|
content[0] = '\0';
|
||||||
|
|
||||||
|
if (0 == args->segment->parameter) {
|
||||||
|
const char *default_name;
|
||||||
|
default_name = args->state->control.default_bar_style;
|
||||||
|
/*@-branchstate@ */
|
||||||
|
if (NULL == default_name)
|
||||||
|
default_name = "plain";
|
||||||
|
/*@+branchstate@ */
|
||||||
|
/* splint - it doesn't matter that default_name may be static */
|
||||||
|
args->segment->parameter = 1 + pv_display_barstyle_index(args, default_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (args->state->control.size > 0 || args->state->control.rate_gauge) {
|
||||||
|
/* Known size or rate gauge - bar with percentage. */
|
||||||
|
bytes = pv_formatter_progress_knownsize(args, content, sizeof(content), false, true, false);
|
||||||
|
} else {
|
||||||
|
/* Unknown size - back-and-forth moving indicator. */
|
||||||
|
bytes = pv_formatter_progress_unknownsize(args, content, sizeof(content), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
content[bytes] = '\0';
|
||||||
|
|
||||||
|
return pv_formatter_segmentcontent(content, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The number after the progress bar.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_progress_amount_only(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
char content[256]; /* flawfinder: ignore - always bounded */
|
||||||
|
pvdisplay_bytecount_t bytes;
|
||||||
|
|
||||||
|
content[0] = '\0';
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (args->state->control.size > 0 || args->state->control.rate_gauge) {
|
||||||
|
/* Known size or rate gauge - percentage or rate. */
|
||||||
|
bytes = pv_formatter_progress_knownsize(args, content, sizeof(content), false, false, true);
|
||||||
|
} else {
|
||||||
|
/* Unknown size - no number. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
content[bytes] = '\0';
|
||||||
|
|
||||||
|
return pv_formatter_segmentcontent(content, args);
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Formatter function for the current rate of transfer.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Transfer rate.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_rate(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
char content[128]; /* flawfinder: ignore - always bounded */
|
||||||
|
|
||||||
|
args->display->showing_rate = true;
|
||||||
|
|
||||||
|
content[0] = '\0';
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*@-mustfreefresh@ */
|
||||||
|
if (args->state->control.bits && !args->state->control.linemode) {
|
||||||
|
/* bits per second */
|
||||||
|
pv_describe_amount(content, sizeof(content), "[%s]",
|
||||||
|
8 * args->state->calc.transfer_rate, "", _("b/s"), args->display->count_type);
|
||||||
|
} else {
|
||||||
|
/* bytes or lines per second */
|
||||||
|
pv_describe_amount(content, sizeof(content),
|
||||||
|
"[%s]", args->state->calc.transfer_rate, _("/s"), _("B/s"),
|
||||||
|
args->display->count_type);
|
||||||
|
}
|
||||||
|
/*@+mustfreefresh@ *//* splint: see above. */
|
||||||
|
|
||||||
|
return pv_formatter_segmentcontent(content, args);
|
||||||
|
}
|
||||||
@@ -0,0 +1,214 @@
|
|||||||
|
/*
|
||||||
|
* Formatter function for ECMA-48 SGR codes.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
struct sgr_keyword_map_s {
|
||||||
|
/*@null@ */ const char *keyword;
|
||||||
|
uint8_t bytes;
|
||||||
|
uint8_t code;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return an array mapping keywords to ECMA-48 SGR code numbers.
|
||||||
|
*/
|
||||||
|
/*@keep@ */ static struct sgr_keyword_map_s *sgr_keywords(void)
|
||||||
|
{
|
||||||
|
/*@keep@ */ static struct sgr_keyword_map_s keywords[] = {
|
||||||
|
{ "reset", 0, 0 },
|
||||||
|
{ "none", 0, 0 },
|
||||||
|
{ "bold", 0, 1 },
|
||||||
|
{ "dim", 0, 2 },
|
||||||
|
{ "italic", 0, 3 },
|
||||||
|
{ "underscore", 0, 4 },
|
||||||
|
{ "underline", 0, 4 },
|
||||||
|
{ "blink", 0, 5 },
|
||||||
|
{ "reverse", 0, 7 },
|
||||||
|
{ "no-bold", 0, 22 }, /* same as no-dim */
|
||||||
|
{ "no-dim", 0, 22 },
|
||||||
|
{ "no-italic", 0, 23 },
|
||||||
|
{ "no-underscore", 0, 24 },
|
||||||
|
{ "no-underline", 0, 24 },
|
||||||
|
{ "no-blink", 0, 25 },
|
||||||
|
{ "no-reverse", 0, 27 },
|
||||||
|
{ "black", 0, 30 },
|
||||||
|
{ "red", 0, 31 },
|
||||||
|
{ "green", 0, 32 },
|
||||||
|
{ "brown", 0, 33 },
|
||||||
|
{ "yellow", 0, 33 },
|
||||||
|
{ "blue", 0, 34 },
|
||||||
|
{ "magenta", 0, 35 },
|
||||||
|
{ "cyan", 0, 36 },
|
||||||
|
{ "white", 0, 37 },
|
||||||
|
{ "fg-black", 0, 30 },
|
||||||
|
{ "fg-red", 0, 31 },
|
||||||
|
{ "fg-green", 0, 32 },
|
||||||
|
{ "fg-brown", 0, 33 },
|
||||||
|
{ "fg-yellow", 0, 33 },
|
||||||
|
{ "fg-blue", 0, 34 },
|
||||||
|
{ "fg-magenta", 0, 35 },
|
||||||
|
{ "fg-cyan", 0, 36 },
|
||||||
|
{ "fg-white", 0, 37 },
|
||||||
|
{ "fg-default", 0, 39 },
|
||||||
|
{ "bg-black", 0, 40 },
|
||||||
|
{ "bg-red", 0, 41 },
|
||||||
|
{ "bg-green", 0, 42 },
|
||||||
|
{ "bg-brown", 0, 43 },
|
||||||
|
{ "bg-yellow", 0, 43 },
|
||||||
|
{ "bg-blue", 0, 44 },
|
||||||
|
{ "bg-magenta", 0, 45 },
|
||||||
|
{ "bg-cyan", 0, 46 },
|
||||||
|
{ "bg-white", 0, 47 },
|
||||||
|
{ "bg-default", 0, 49 },
|
||||||
|
{ NULL, 0, 0 }
|
||||||
|
};
|
||||||
|
int keyword_index;
|
||||||
|
|
||||||
|
/* Calculate the lengths of each keyword on the first call. */
|
||||||
|
if (0 == keywords[0].bytes) {
|
||||||
|
for (keyword_index = 0; NULL != keywords[keyword_index].keyword; keyword_index++) {
|
||||||
|
keywords[keyword_index].bytes = strlen(keywords[keyword_index].keyword); /* flawfinder: ignore */
|
||||||
|
/* flawfinder - strlen() on a static null-terminated string is OK. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@-compmempass@ */
|
||||||
|
return keywords;
|
||||||
|
/*@+compmempass@ */
|
||||||
|
/*
|
||||||
|
* splint - found no other way to pass static back without a false
|
||||||
|
* positive warning about a memory leak.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Display SGR codes if colour output is supported.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_sgr(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
/*@keep@ */ static struct sgr_keyword_map_s *keywords;
|
||||||
|
char content[1024]; /* flawfinder: ignore */
|
||||||
|
pvdisplay_bytecount_t write_position, read_position, keyword_start, keyword_length;
|
||||||
|
int numeric_value, code_count, most_recent_code;
|
||||||
|
|
||||||
|
/* flawfinder - null-terminated and bounded with pv_snprintf(). */
|
||||||
|
|
||||||
|
if (!args->display->colour_permitted)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
args->display->format_uses_colour = true;
|
||||||
|
|
||||||
|
if (!args->state->control.can_display_colour)
|
||||||
|
return 0;
|
||||||
|
if (NULL == args->segment->string_parameter)
|
||||||
|
return 0;
|
||||||
|
if (0 == args->segment->string_parameter_bytes)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
keywords = sgr_keywords();
|
||||||
|
|
||||||
|
write_position = 0;
|
||||||
|
content[0] = '\0';
|
||||||
|
|
||||||
|
debug("%p+%d [%.*s]", args->segment->string_parameter, args->segment->string_parameter_bytes,
|
||||||
|
args->segment->string_parameter_bytes, args->segment->string_parameter);
|
||||||
|
|
||||||
|
read_position = 0;
|
||||||
|
keyword_start = 0;
|
||||||
|
keyword_length = 0;
|
||||||
|
numeric_value = -1;
|
||||||
|
code_count = 0;
|
||||||
|
most_recent_code = -1;
|
||||||
|
|
||||||
|
while (read_position < args->segment->string_parameter_bytes) {
|
||||||
|
char read_char = args->segment->string_parameter[read_position++];
|
||||||
|
if ((',' == read_char) || (';' == read_char)) {
|
||||||
|
keyword_length = read_position - keyword_start;
|
||||||
|
if (keyword_length > 0)
|
||||||
|
keyword_length--;
|
||||||
|
} else {
|
||||||
|
if ((read_char >= '0' && read_char <= '9')
|
||||||
|
&& (numeric_value >= 0 || keyword_start == read_position - 1)) {
|
||||||
|
if (keyword_start == read_position - 1)
|
||||||
|
numeric_value = 0;
|
||||||
|
numeric_value = numeric_value * 10 + (int) (read_char - '0');
|
||||||
|
} else {
|
||||||
|
numeric_value = -1;
|
||||||
|
}
|
||||||
|
if (read_position >= args->segment->string_parameter_bytes) {
|
||||||
|
keyword_length = read_position - keyword_start;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (keyword_length > 0) {
|
||||||
|
int code = -1;
|
||||||
|
|
||||||
|
debug("keyword@%d+%d: [%.*s]; numeric=%d", keyword_start, keyword_length, keyword_length,
|
||||||
|
&(args->segment->string_parameter[keyword_start]), numeric_value);
|
||||||
|
|
||||||
|
if (numeric_value >= 0 && numeric_value < 255) {
|
||||||
|
code = numeric_value;
|
||||||
|
} else {
|
||||||
|
int keyword_index;
|
||||||
|
for (keyword_index = 0; -1 == code && NULL != keywords[keyword_index].keyword;
|
||||||
|
keyword_index++) {
|
||||||
|
if (keyword_length != keywords[keyword_index].bytes)
|
||||||
|
continue;
|
||||||
|
if (0 !=
|
||||||
|
strncmp(keywords[keyword_index].keyword,
|
||||||
|
&(args->segment->string_parameter[keyword_start]), keyword_length))
|
||||||
|
continue;
|
||||||
|
code = (int) (keywords[keyword_index].code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
debug("code=%d", code);
|
||||||
|
|
||||||
|
if (code >= 0) {
|
||||||
|
if (code_count > 15) {
|
||||||
|
write_position +=
|
||||||
|
pv_snprintf(content + write_position, sizeof(content) - write_position,
|
||||||
|
"%s", "m");
|
||||||
|
code_count = 0;
|
||||||
|
}
|
||||||
|
if (0 == code_count) {
|
||||||
|
write_position +=
|
||||||
|
pv_snprintf(content + write_position, sizeof(content) - write_position,
|
||||||
|
"%s", "\033[");
|
||||||
|
} else {
|
||||||
|
write_position +=
|
||||||
|
pv_snprintf(content + write_position, sizeof(content) - write_position,
|
||||||
|
"%s", ";");
|
||||||
|
}
|
||||||
|
write_position +=
|
||||||
|
pv_snprintf(content + write_position, sizeof(content) - write_position, "%d", code);
|
||||||
|
code_count++;
|
||||||
|
most_recent_code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
keyword_length = 0;
|
||||||
|
keyword_start = read_position;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (code_count > 0)
|
||||||
|
write_position += pv_snprintf(content + write_position, sizeof(content) - write_position, "%s", "m");
|
||||||
|
|
||||||
|
if (most_recent_code > 0) {
|
||||||
|
args->display->sgr_code_active = true;
|
||||||
|
} else if (0 == most_recent_code) {
|
||||||
|
args->display->sgr_code_active = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pv_formatter_segmentcontent(content, args);
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Formatter function for the elapsed transfer time.
|
||||||
|
*
|
||||||
|
* Copyright 2024 Andrew Wood
|
||||||
|
*
|
||||||
|
* License GPLv3+: GNU GPL version 3 or later; see `docs/COPYING'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "pv.h"
|
||||||
|
#include "pv-internal.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Elapsed time.
|
||||||
|
*/
|
||||||
|
pvdisplay_bytecount_t pv_formatter_timer(pvformatter_args_t args)
|
||||||
|
{
|
||||||
|
char content[128]; /* flawfinder: ignore - always bounded */
|
||||||
|
|
||||||
|
args->display->showing_timer = true;
|
||||||
|
|
||||||
|
content[0] = '\0';
|
||||||
|
|
||||||
|
if (0 == args->buffer_size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bounds check, so we don't overrun the prefix buffer. This does
|
||||||
|
* mean that the timer will stop at a 100,000 hours, but since
|
||||||
|
* that's 11 years, it shouldn't be a problem.
|
||||||
|
*/
|
||||||
|
if (args->state->transfer.elapsed_seconds > (long double) 360000000.0L)
|
||||||
|
args->state->transfer.elapsed_seconds = (long double) 360000000.0L;
|
||||||
|
|
||||||
|
/* Also check it's not negative. */
|
||||||
|
if (args->state->transfer.elapsed_seconds < 0.0)
|
||||||
|
args->state->transfer.elapsed_seconds = 0.0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the elapsed time is more than a day, include a day count as
|
||||||
|
* well as hours, minutes, and seconds.
|
||||||
|
*/
|
||||||
|
if (args->state->transfer.elapsed_seconds > (long double) 86400.0L) {
|
||||||
|
(void) pv_snprintf(content,
|
||||||
|
sizeof(content),
|
||||||
|
"%ld:%02ld:%02ld:%02ld",
|
||||||
|
((long) (args->state->transfer.elapsed_seconds)) / 86400,
|
||||||
|
(((long) (args->state->transfer.elapsed_seconds)) / 3600) %
|
||||||
|
24, (((long) (args->state->transfer.elapsed_seconds)) / 60) % 60,
|
||||||
|
((long) (args->state->transfer.elapsed_seconds)) % 60);
|
||||||
|
} else {
|
||||||
|
(void) pv_snprintf(content,
|
||||||
|
sizeof(content),
|
||||||
|
"%ld:%02ld:%02ld",
|
||||||
|
((long) (args->state->transfer.elapsed_seconds)) / 3600,
|
||||||
|
(((long) (args->state->transfer.elapsed_seconds)) / 60) % 60,
|
||||||
|
((long) (args->state->transfer.elapsed_seconds)) % 60);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pv_formatter_segmentcontent(content, args);
|
||||||
|
}
|
||||||
+26
-9
@@ -481,12 +481,14 @@ int pv_main_loop(pvstate_t state)
|
|||||||
|
|
||||||
state->flag.terminal_resized = 0;
|
state->flag.terminal_resized = 0;
|
||||||
|
|
||||||
new_width = state->control.width;
|
new_width = (unsigned int) (state->control.width);
|
||||||
new_height = state->control.height;
|
new_height = state->control.height;
|
||||||
pv_screensize(&new_width, &new_height);
|
pv_screensize(&new_width, &new_height);
|
||||||
|
|
||||||
|
if (new_width > PVDISPLAY_WIDTH_MAX)
|
||||||
|
new_width = PVDISPLAY_WIDTH_MAX;
|
||||||
if (!state->control.width_set_manually)
|
if (!state->control.width_set_manually)
|
||||||
state->control.width = new_width;
|
state->control.width = (pvdisplay_width_t) new_width;
|
||||||
if (!state->control.height_set_manually)
|
if (!state->control.height_set_manually)
|
||||||
state->control.height = new_height;
|
state->control.height = new_height;
|
||||||
}
|
}
|
||||||
@@ -695,12 +697,15 @@ int pv_watchfd_loop(pvstate_t state)
|
|||||||
|
|
||||||
state->flag.terminal_resized = 0;
|
state->flag.terminal_resized = 0;
|
||||||
|
|
||||||
new_width = state->control.width;
|
new_width = (unsigned int) (state->control.width);
|
||||||
new_height = state->control.height;
|
new_height = state->control.height;
|
||||||
pv_screensize(&new_width, &new_height);
|
pv_screensize(&new_width, &new_height);
|
||||||
|
|
||||||
|
if (new_width > PVDISPLAY_WIDTH_MAX)
|
||||||
|
new_width = PVDISPLAY_WIDTH_MAX;
|
||||||
|
|
||||||
if (!state->control.width_set_manually)
|
if (!state->control.width_set_manually)
|
||||||
state->control.width = new_width;
|
state->control.width = (pvdisplay_width_t) new_width;
|
||||||
if (!state->control.height_set_manually)
|
if (!state->control.height_set_manually)
|
||||||
state->control.height = new_height;
|
state->control.height = new_height;
|
||||||
}
|
}
|
||||||
@@ -841,8 +846,20 @@ int pv_watchpid_loop(pvstate_t state)
|
|||||||
|
|
||||||
/* Resize the display, if a resize signal was received. */
|
/* Resize the display, if a resize signal was received. */
|
||||||
if (1 == state->flag.terminal_resized) {
|
if (1 == state->flag.terminal_resized) {
|
||||||
|
unsigned int new_width, new_height;
|
||||||
|
|
||||||
state->flag.terminal_resized = 0;
|
state->flag.terminal_resized = 0;
|
||||||
pv_screensize(&(state->control.width), &(state->control.height));
|
|
||||||
|
new_width = (unsigned int) (state->control.width);
|
||||||
|
new_height = state->control.height;
|
||||||
|
pv_screensize(&new_width, &new_height);
|
||||||
|
|
||||||
|
if (new_width > PVDISPLAY_WIDTH_MAX)
|
||||||
|
new_width = PVDISPLAY_WIDTH_MAX;
|
||||||
|
|
||||||
|
state->control.width = (pvdisplay_width_t) new_width;
|
||||||
|
state->control.height = new_height;
|
||||||
|
|
||||||
for (idx = 0; NULL != info_array && idx < array_length; idx++) {
|
for (idx = 0; NULL != info_array && idx < array_length; idx++) {
|
||||||
if (NULL == info_array[idx].state)
|
if (NULL == info_array[idx].state)
|
||||||
continue;
|
continue;
|
||||||
@@ -974,10 +991,10 @@ int pv_watchpid_loop(pvstate_t state)
|
|||||||
debug("%s: %d", "adding blank lines", blank_lines);
|
debug("%s: %d", "adding blank lines", blank_lines);
|
||||||
|
|
||||||
while (blank_lines > 0) {
|
while (blank_lines > 0) {
|
||||||
unsigned int x;
|
pvdisplay_width_t blank_count;
|
||||||
if (displayed_lines > 0)
|
if (displayed_lines > 0)
|
||||||
pv_tty_write(state, "\n", 1);
|
pv_tty_write(state, "\n", 1);
|
||||||
for (x = 0; x < state->control.width; x++)
|
for (blank_count = 0; blank_count < state->control.width; blank_count++)
|
||||||
pv_tty_write(state, " ", 1);
|
pv_tty_write(state, " ", 1);
|
||||||
pv_tty_write(state, "\r", 1);
|
pv_tty_write(state, "\r", 1);
|
||||||
blank_lines--;
|
blank_lines--;
|
||||||
@@ -997,8 +1014,8 @@ int pv_watchpid_loop(pvstate_t state)
|
|||||||
*/
|
*/
|
||||||
blank_lines = prev_displayed_lines;
|
blank_lines = prev_displayed_lines;
|
||||||
while (blank_lines > 0) {
|
while (blank_lines > 0) {
|
||||||
unsigned int x;
|
pvdisplay_width_t blank_count;
|
||||||
for (x = 0; x < state->control.width; x++)
|
for (blank_count = 0; blank_count < state->control.width; blank_count++)
|
||||||
pv_tty_write(state, " ", 1);
|
pv_tty_write(state, " ", 1);
|
||||||
pv_tty_write(state, "\r", 1);
|
pv_tty_write(state, "\r", 1);
|
||||||
blank_lines--;
|
blank_lines--;
|
||||||
|
|||||||
+36
-29
@@ -17,7 +17,7 @@
|
|||||||
* including <ctype.h> causes weird versioned glibc dependencies on certain
|
* including <ctype.h> causes weird versioned glibc dependencies on certain
|
||||||
* Red Hat systems, complicating package management.
|
* Red Hat systems, complicating package management.
|
||||||
*/
|
*/
|
||||||
static bool pv__isdigit(char c)
|
bool pv_isdigit(char c)
|
||||||
{
|
{
|
||||||
return ((c >= '0') && (c <= '9')) ? true : false;
|
return ((c >= '0') && (c <= '9')) ? true : false;
|
||||||
}
|
}
|
||||||
@@ -37,21 +37,22 @@ off_t pv_getnum_size(const char *str, bool decimal_units)
|
|||||||
unsigned int fractional_divisor = 1;
|
unsigned int fractional_divisor = 1;
|
||||||
unsigned int binary_shift = 0;
|
unsigned int binary_shift = 0;
|
||||||
off_t decimal_multiplier = 0;
|
off_t decimal_multiplier = 0;
|
||||||
|
size_t readpos = 0;
|
||||||
|
|
||||||
if (NULL == str)
|
if (NULL == str)
|
||||||
return (off_t) 0;
|
return (off_t) 0;
|
||||||
|
|
||||||
/* Skip any non-numeric leading characters. */
|
/* Skip any non-numeric leading characters. */
|
||||||
while (str[0] != '\0' && (!pv__isdigit(str[0])))
|
while (str[readpos] != '\0' && (!pv_isdigit(str[readpos])))
|
||||||
str++;
|
readpos++;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parse the integral part of the number - the digits before the
|
* Parse the integral part of the number - the digits before the
|
||||||
* decimal mark or units.
|
* decimal mark or units.
|
||||||
*/
|
*/
|
||||||
for (; pv__isdigit(str[0]); str++) {
|
for (; pv_isdigit(str[readpos]); readpos++) {
|
||||||
integral_part = integral_part * 10;
|
integral_part = integral_part * 10;
|
||||||
integral_part += (off_t) (str[0] - '0');
|
integral_part += (off_t) (str[readpos] - '0');
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -62,13 +63,13 @@ off_t pv_getnum_size(const char *str, bool decimal_units)
|
|||||||
* will fail if there are any locales whose decimal mark is not one
|
* will fail if there are any locales whose decimal mark is not one
|
||||||
* of those two characters.
|
* of those two characters.
|
||||||
*/
|
*/
|
||||||
if (('.' == str[0]) || (',' == str[0])) {
|
if (('.' == str[readpos]) || (',' == str[readpos])) {
|
||||||
str++;
|
readpos++;
|
||||||
for (; pv__isdigit(str[0]); str++) {
|
for (; pv_isdigit(str[readpos]); readpos++) {
|
||||||
/* Stop counting below 0.0001. */
|
/* Stop counting below 0.0001. */
|
||||||
if (fractional_divisor < 10000) {
|
if (fractional_divisor < 10000) {
|
||||||
fractional_part = fractional_part * 10;
|
fractional_part = fractional_part * 10;
|
||||||
fractional_part += (off_t) (str[0] - '0');
|
fractional_part += (off_t) (str[readpos] - '0');
|
||||||
fractional_divisor = fractional_divisor * 10;
|
fractional_divisor = fractional_divisor * 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -78,11 +79,11 @@ off_t pv_getnum_size(const char *str, bool decimal_units)
|
|||||||
* Parse any units given (K=KiB=*1024, M=MiB=1024KiB, G=GiB=1024MiB,
|
* Parse any units given (K=KiB=*1024, M=MiB=1024KiB, G=GiB=1024MiB,
|
||||||
* T=TiB=1024GiB; replace 1024 with 1000 if decimal_units is true).
|
* T=TiB=1024GiB; replace 1024 with 1000 if decimal_units is true).
|
||||||
*/
|
*/
|
||||||
if (str[0] != '\0') {
|
if (str[readpos] != '\0') {
|
||||||
/* Skip any spaces or tabs after the digits. */
|
/* Skip any spaces or tabs after the digits. */
|
||||||
while ((' ' == str[0]) || ('\t' == str[0]))
|
while ((' ' == str[readpos]) || ('\t' == str[readpos]))
|
||||||
str++;
|
readpos++;
|
||||||
switch (str[0]) {
|
switch (str[readpos]) {
|
||||||
case 'k':
|
case 'k':
|
||||||
case 'K':
|
case 'K':
|
||||||
binary_shift = 10;
|
binary_shift = 10;
|
||||||
@@ -159,6 +160,8 @@ off_t pv_getnum_size(const char *str, bool decimal_units)
|
|||||||
fractional_part = fractional_part / fractional_divisor;
|
fractional_part = fractional_part / fractional_divisor;
|
||||||
integral_part += fractional_part;
|
integral_part += fractional_part;
|
||||||
|
|
||||||
|
debug("%s [%s] = %ld", str, decimal_units ? "decimal" : "binary", integral_part);
|
||||||
|
|
||||||
return integral_part;
|
return integral_part;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,11 +179,11 @@ double pv_getnum_interval(const char *str)
|
|||||||
return 0.0;
|
return 0.0;
|
||||||
|
|
||||||
/* Skip any non-digit characters at the start. */
|
/* Skip any non-digit characters at the start. */
|
||||||
while (str[0] != '\0' && (!pv__isdigit(str[0])))
|
while (str[0] != '\0' && (!pv_isdigit(str[0])))
|
||||||
str++;
|
str++;
|
||||||
|
|
||||||
/* Parse the digits before the decimal mark. */
|
/* Parse the digits before the decimal mark. */
|
||||||
for (; pv__isdigit(str[0]); str++) {
|
for (; pv_isdigit(str[0]); str++) {
|
||||||
result = result * 10;
|
result = result * 10;
|
||||||
result += (double) (str[0] - '0');
|
result += (double) (str[0] - '0');
|
||||||
}
|
}
|
||||||
@@ -193,7 +196,7 @@ double pv_getnum_interval(const char *str)
|
|||||||
str++;
|
str++;
|
||||||
|
|
||||||
/* Parse the digits after the decimal mark, up to 0.0000001. */
|
/* Parse the digits after the decimal mark, up to 0.0000001. */
|
||||||
for (; pv__isdigit(str[0]) && step < 1000000; str++) {
|
for (; pv_isdigit(str[0]) && step < 1000000; str++) {
|
||||||
step = step * 10;
|
step = step * 10;
|
||||||
result += ((double) (str[0] - '0')) / step;
|
result += ((double) (str[0] - '0')) / step;
|
||||||
}
|
}
|
||||||
@@ -226,31 +229,31 @@ bool pv_getnum_check(const char *str, pv_numtype type)
|
|||||||
str++;
|
str++;
|
||||||
|
|
||||||
/* If the next character isn't a digit, this isn't a number. */
|
/* If the next character isn't a digit, this isn't a number. */
|
||||||
if (!pv__isdigit(str[0]))
|
if (!pv_isdigit(str[0]))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Skip over the digits. */
|
/* Skip over the digits. */
|
||||||
for (; pv__isdigit(str[0]); str++);
|
for (; pv_isdigit(str[0]); str++);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If there's a decimal mark (see note in pv_getnum_size() above),
|
* If there's a decimal mark (see note in pv_getnum_size() above),
|
||||||
* check that too.
|
* check that too.
|
||||||
*/
|
*/
|
||||||
if (('.' == str[0]) || (',' == str[0])) {
|
if (('.' == str[0]) || (',' == str[0])) {
|
||||||
/* Integers should have no decimal mark. */
|
/* Bare integers should have no decimal mark. */
|
||||||
if (type == PV_NUMTYPE_INTEGER)
|
if (type == PV_NUMTYPE_BARE_INTEGER)
|
||||||
return false;
|
return false;
|
||||||
/* Skip the decimal mark, then all digits. */
|
/* Skip the decimal mark, then all digits. */
|
||||||
str++;
|
str++;
|
||||||
for (; pv__isdigit(str[0]); str++);
|
for (; pv_isdigit(str[0]); str++);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the string ends here, this is a valid number. */
|
/* If the string ends here, this is a valid number. */
|
||||||
if ('\0' == str[0])
|
if ('\0' == str[0])
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
/* A units suffix is not allowed for doubles, only for integers. */
|
/* A units suffix is only allowed for ANY_WITH_SUFFIX. */
|
||||||
if (type == PV_NUMTYPE_DOUBLE)
|
if (type != PV_NUMTYPE_ANY_WITH_SUFFIX)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Skip trailing spaces or tabs. */
|
/* Skip trailing spaces or tabs. */
|
||||||
@@ -282,16 +285,20 @@ bool pv_getnum_check(const char *str, pv_numtype type)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return an integer representing "amount" as a percentage of "total", i.e.
|
* Return a value representing "amount" as a percentage of "total", i.e.
|
||||||
* 100*amount/total. If "total" is zero or less, return 0.
|
* 100*amount/total. If "total" is zero or less, return 0.
|
||||||
*/
|
*/
|
||||||
int pv_percentage(off_t amount, const off_t total)
|
double pv_percentage(off_t amount, const off_t total)
|
||||||
{
|
{
|
||||||
|
double amount_as_double;
|
||||||
|
|
||||||
if (total < 1)
|
if (total < 1)
|
||||||
return 0;
|
return 0.0;
|
||||||
|
|
||||||
amount *= 100;
|
amount_as_double = (double) amount;
|
||||||
amount /= total;
|
|
||||||
|
|
||||||
return (int) amount;
|
amount_as_double *= 100.0;
|
||||||
|
amount_as_double /= (double) total;
|
||||||
|
|
||||||
|
return amount_as_double;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -226,7 +226,7 @@ static void pv_sig_term( /*@unused@ */ __attribute__((unused))
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef SIGINFO_PROVIDES_PID
|
#ifdef PV_REMOTE_CONTROL
|
||||||
/*
|
/*
|
||||||
* Handle a SIGUSR2 by setting a flag to say we received it, after recording
|
* Handle a SIGUSR2 by setting a flag to say we received it, after recording
|
||||||
* the sending PID.
|
* the sending PID.
|
||||||
@@ -375,7 +375,7 @@ void pv_sig_init(pvstate_t state)
|
|||||||
sa.sa_flags = 0;
|
sa.sa_flags = 0;
|
||||||
(void) sigaction(SIGTERM, &sa, &(pv_sig_state->signal.old_sigterm));
|
(void) sigaction(SIGTERM, &sa, &(pv_sig_state->signal.old_sigterm));
|
||||||
|
|
||||||
#ifdef SIGINFO_PROVIDES_PID
|
#ifdef PV_REMOTE_CONTROL
|
||||||
/*
|
/*
|
||||||
* Handle SIGUSR2 by setting a flag to say the signal has been
|
* Handle SIGUSR2 by setting a flag to say the signal has been
|
||||||
* received, and storing the sending process's PID.
|
* received, and storing the sending process's PID.
|
||||||
@@ -431,7 +431,7 @@ void pv_sig_fini( /*@unused@ */ __attribute__((unused)) pvstate_t state)
|
|||||||
(void) sigaction(SIGINT, &(pv_sig_state->signal.old_sigint), NULL);
|
(void) sigaction(SIGINT, &(pv_sig_state->signal.old_sigint), NULL);
|
||||||
(void) sigaction(SIGHUP, &(pv_sig_state->signal.old_sighup), NULL);
|
(void) sigaction(SIGHUP, &(pv_sig_state->signal.old_sighup), NULL);
|
||||||
(void) sigaction(SIGTERM, &(pv_sig_state->signal.old_sigterm), NULL);
|
(void) sigaction(SIGTERM, &(pv_sig_state->signal.old_sigterm), NULL);
|
||||||
#ifdef SIGINFO_PROVIDES_PID
|
#ifdef PV_REMOTE_CONTROL
|
||||||
(void) sigaction(SIGUSR2, &(pv_sig_state->signal.old_sigusr2), NULL);
|
(void) sigaction(SIGUSR2, &(pv_sig_state->signal.old_sigusr2), NULL);
|
||||||
#endif
|
#endif
|
||||||
(void) sigaction(SIGALRM, &(pv_sig_state->signal.old_sigalrm), NULL);
|
(void) sigaction(SIGALRM, &(pv_sig_state->signal.old_sigalrm), NULL);
|
||||||
|
|||||||
+23
-2
@@ -80,7 +80,7 @@ void pv_state_reset(pvstate_t state)
|
|||||||
state->calc.ratesquared_sum = 0.0;
|
state->calc.ratesquared_sum = 0.0;
|
||||||
state->calc.measurements_taken = 0;
|
state->calc.measurements_taken = 0;
|
||||||
state->calc.prev_transferred = 0;
|
state->calc.prev_transferred = 0;
|
||||||
state->calc.percentage = 0;
|
state->calc.percentage = 0.0;
|
||||||
state->calc.history_first = state->calc.history_last = 0;
|
state->calc.history_first = state->calc.history_last = 0;
|
||||||
if (NULL != state->calc.history) {
|
if (NULL != state->calc.history) {
|
||||||
state->calc.history[0].elapsed_sec = 0.0;
|
state->calc.history[0].elapsed_sec = 0.0;
|
||||||
@@ -202,6 +202,11 @@ void pv_state_free(pvstate_t state)
|
|||||||
state->control.name = NULL;
|
state->control.name = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (NULL != state->control.default_bar_style) {
|
||||||
|
free(state->control.default_bar_style);
|
||||||
|
state->control.default_bar_style = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (NULL != state->control.format_string) {
|
if (NULL != state->control.format_string) {
|
||||||
free(state->control.format_string);
|
free(state->control.format_string);
|
||||||
state->control.format_string = NULL;
|
state->control.format_string = NULL;
|
||||||
@@ -409,7 +414,9 @@ void pv_state_interval_set(pvstate_t state, double val)
|
|||||||
|
|
||||||
void pv_state_width_set(pvstate_t state, unsigned int val, bool was_set_manually)
|
void pv_state_width_set(pvstate_t state, unsigned int val, bool was_set_manually)
|
||||||
{
|
{
|
||||||
state->control.width = val;
|
if (val > PVDISPLAY_WIDTH_MAX)
|
||||||
|
val = PVDISPLAY_WIDTH_MAX;
|
||||||
|
state->control.width = (pvdisplay_width_t) val;
|
||||||
state->control.width_set_manually = was_set_manually;
|
state->control.width_set_manually = was_set_manually;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -429,6 +436,16 @@ void pv_state_name_set(pvstate_t state, /*@null@ */ const char *val)
|
|||||||
state->control.name = pv_strdup(val);
|
state->control.name = pv_strdup(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pv_state_default_bar_style_set(pvstate_t state, /*@null@ */ const char *val)
|
||||||
|
{
|
||||||
|
if (NULL != state->control.default_bar_style) {
|
||||||
|
free(state->control.default_bar_style);
|
||||||
|
state->control.default_bar_style = NULL;
|
||||||
|
}
|
||||||
|
if (NULL != val)
|
||||||
|
state->control.default_bar_style = pv_strdup(val);
|
||||||
|
}
|
||||||
|
|
||||||
void pv_state_format_string_set(pvstate_t state, /*@null@ */ const char *val)
|
void pv_state_format_string_set(pvstate_t state, /*@null@ */ const char *val)
|
||||||
{
|
{
|
||||||
if (NULL != state->control.format_string) {
|
if (NULL != state->control.format_string) {
|
||||||
@@ -543,6 +560,10 @@ void pv_state_average_rate_window_set(pvstate_t state, unsigned int val)
|
|||||||
pv_alloc_history(state);
|
pv_alloc_history(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pv_state_set_can_display_utf8(pvstate_t state, bool val)
|
||||||
|
{
|
||||||
|
state->control.can_display_utf8 = val;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the array of input files.
|
* Set the array of input files.
|
||||||
|
|||||||
+138
-2
@@ -13,6 +13,12 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#if defined(ENABLE_NLS) && defined(HAVE_WCHAR_H)
|
||||||
|
#include <wchar.h>
|
||||||
|
#if defined(HAVE_WCTYPE_H)
|
||||||
|
#include <wctype.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -151,6 +157,7 @@ char *pv_strdup(const char *original)
|
|||||||
return duplicate;
|
return duplicate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return a pointer to the last matching character in the buffer, or NULL if
|
* Return a pointer to the last matching character in the buffer, or NULL if
|
||||||
* not found.
|
* not found.
|
||||||
@@ -160,9 +167,9 @@ char *pv_strdup(const char *original)
|
|||||||
void *pv_memrchr(const void *buffer, int match, size_t length)
|
void *pv_memrchr(const void *buffer, int match, size_t length)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_MEMRCHR
|
#ifdef HAVE_MEMRCHR
|
||||||
/*@-unrecog @ *//* splint doesn't know of memrchr() */
|
/*@-unrecog@ *//* splint doesn't know of memrchr() */
|
||||||
return memrchr(buffer, match, length);
|
return memrchr(buffer, match, length);
|
||||||
/*@+unrecog @ */
|
/*@+unrecog@ */
|
||||||
#else
|
#else
|
||||||
unsigned char *ptr;
|
unsigned char *ptr;
|
||||||
|
|
||||||
@@ -179,3 +186,132 @@ void *pv_memrchr(const void *buffer, int match, size_t length)
|
|||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the number of display columns needed to show the
|
||||||
|
* non-null-terminated string "string" whose length in bytes is "bytes".
|
||||||
|
*
|
||||||
|
* Skips ECMA-48 CSI (ESC [ ...) sequences, but any other control characters
|
||||||
|
* are treated as printable.
|
||||||
|
*
|
||||||
|
* To do this, we convert it to a wide character string, and use the wide
|
||||||
|
* character display width function "wcswidth()" on it.
|
||||||
|
*
|
||||||
|
* If NLS is disabled, or the string cannot be converted, this just returns
|
||||||
|
* the value of "bytes".
|
||||||
|
*
|
||||||
|
* Note that this function uses internal buffers if the string is short
|
||||||
|
* enough, otherwise it has to call malloc() and free(), so it becomes less
|
||||||
|
* efficient with larger strings.
|
||||||
|
*/
|
||||||
|
size_t pv_strwidth(const char *string, size_t bytes)
|
||||||
|
{
|
||||||
|
char *allocated_raw = NULL;
|
||||||
|
static char internal_raw[256]; /* flawfinder: ignore - bounded */
|
||||||
|
char *raw_string = NULL;
|
||||||
|
size_t read_pos, write_pos;
|
||||||
|
size_t raw_bytes, width;
|
||||||
|
#if defined(ENABLE_NLS) && defined(HAVE_WCHAR_H)
|
||||||
|
size_t wide_char_count;
|
||||||
|
size_t wide_string_buffer_size;
|
||||||
|
wchar_t *allocated_wide = NULL;
|
||||||
|
static wchar_t internal_wide[256]; /* flawfinder: ignore - bounded */
|
||||||
|
wchar_t *wide_string = NULL;
|
||||||
|
#endif /* defined(ENABLE_NLS) && defined(HAVE_WCHAR_H) */
|
||||||
|
|
||||||
|
if (NULL == string)
|
||||||
|
return 0;
|
||||||
|
if (0 == bytes)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (bytes < sizeof(internal_raw) - 1) {
|
||||||
|
raw_string = internal_raw;
|
||||||
|
} else {
|
||||||
|
allocated_raw = calloc(1, 1 + bytes);
|
||||||
|
if (NULL == allocated_raw)
|
||||||
|
return bytes;
|
||||||
|
raw_string = allocated_raw;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the original string, skipping ECMA-48 CSI sequences. */
|
||||||
|
for (read_pos = 0, write_pos = 0; read_pos < bytes; read_pos++) {
|
||||||
|
if ((string[read_pos] != '\033') || (read_pos >= bytes - 1) || (string[read_pos + 1] != '[')) {
|
||||||
|
raw_string[write_pos++] = string[read_pos];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
read_pos += 2;
|
||||||
|
while ((read_pos < bytes - 1)
|
||||||
|
&& ((string[read_pos] >= '0' && string[read_pos] <= '9')
|
||||||
|
|| (';' == string[read_pos])
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
read_pos++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
raw_string[write_pos] = '\0';
|
||||||
|
raw_bytes = write_pos;
|
||||||
|
|
||||||
|
width = raw_bytes;
|
||||||
|
|
||||||
|
#if defined(ENABLE_NLS) && defined(HAVE_WCHAR_H)
|
||||||
|
/*@-nullpass@ */
|
||||||
|
/*
|
||||||
|
* splint note: mbstowcs() manual page on Linux explicitly says it
|
||||||
|
* takes NULL.
|
||||||
|
*/
|
||||||
|
wide_char_count = mbstowcs(NULL, raw_string, 0);
|
||||||
|
/*@+nullpass@ */
|
||||||
|
if (wide_char_count == (size_t) -1) {
|
||||||
|
debug("%s: %s: %s", "mbstowcs", raw_string, strerror(errno));
|
||||||
|
if (NULL != allocated_raw)
|
||||||
|
free(allocated_raw);
|
||||||
|
return raw_bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
wide_string_buffer_size = sizeof(*wide_string) * (1 + wide_char_count);
|
||||||
|
|
||||||
|
if (wide_string_buffer_size < sizeof(internal_wide)) {
|
||||||
|
wide_string = internal_wide;
|
||||||
|
} else {
|
||||||
|
allocated_wide = malloc(wide_string_buffer_size);
|
||||||
|
if (NULL == allocated_wide) {
|
||||||
|
perror("malloc");
|
||||||
|
if (NULL != allocated_raw)
|
||||||
|
free(allocated_raw);
|
||||||
|
return raw_bytes;
|
||||||
|
}
|
||||||
|
wide_string = allocated_wide;
|
||||||
|
}
|
||||||
|
memset(wide_string, 0, wide_string_buffer_size);
|
||||||
|
|
||||||
|
if (mbstowcs(wide_string, raw_string, 1 + wide_char_count) == (size_t) -1) {
|
||||||
|
debug("%s: %s: %s", "mbstowcs", raw_string, strerror(errno));
|
||||||
|
} else if (NULL != wide_string) {
|
||||||
|
/*@-unrecog@ *//* splint seems unable to see the prototype. */
|
||||||
|
width = wcswidth(wide_string, wide_char_count);
|
||||||
|
/*@+unrecog@ */
|
||||||
|
} else {
|
||||||
|
width = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL != allocated_wide)
|
||||||
|
free(allocated_wide);
|
||||||
|
#endif /* defined(ENABLE_NLS) && defined(HAVE_WCHAR_H) */
|
||||||
|
|
||||||
|
if (NULL != allocated_raw)
|
||||||
|
free(allocated_raw);
|
||||||
|
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return true if the character is printable. This function is used instead
|
||||||
|
* of the macro from <ctype.h> to avoid causing versioned glibc dependencies
|
||||||
|
* on some systems.
|
||||||
|
*/
|
||||||
|
bool pv_isprint(char c)
|
||||||
|
{
|
||||||
|
return ((c >= (char) 32) && (c <= (char) 126)) ? true : false;
|
||||||
|
}
|
||||||
|
|||||||
+80
-35
@@ -113,7 +113,7 @@ static int is_data_ready(int fd_in, /*@null@ */ bool *fd_in_ready, int fd_out, /
|
|||||||
* We stop retrying if the time elapsed since this function was entered
|
* We stop retrying if the time elapsed since this function was entered
|
||||||
* reaches TRANSFER_READ_TIMEOUT seconds.
|
* reaches TRANSFER_READ_TIMEOUT seconds.
|
||||||
*/
|
*/
|
||||||
static ssize_t pv__transfer_read_repeated(int fd, void *buf, size_t count)
|
static ssize_t pv__transfer_read_repeated(int fd, char *buf, size_t count)
|
||||||
{
|
{
|
||||||
struct timespec start_time;
|
struct timespec start_time;
|
||||||
ssize_t total_read;
|
ssize_t total_read;
|
||||||
@@ -193,7 +193,7 @@ static ssize_t pv__transfer_read_repeated(int fd, void *buf, size_t count)
|
|||||||
* We stop retrying if the time elapsed since this function was entered
|
* We stop retrying if the time elapsed since this function was entered
|
||||||
* reaches TRANSFER_WRITE_TIMEOUT seconds.
|
* reaches TRANSFER_WRITE_TIMEOUT seconds.
|
||||||
*/
|
*/
|
||||||
static ssize_t pv__transfer_write_repeated(int fd, void *buf, size_t count, bool sync_after_write)
|
static ssize_t pv__transfer_write_repeated(int fd, char *buf, size_t count, bool sync_after_write)
|
||||||
{
|
{
|
||||||
struct timespec start_time;
|
struct timespec start_time;
|
||||||
ssize_t total_written;
|
ssize_t total_written;
|
||||||
@@ -460,15 +460,7 @@ static int pv__transfer_read(pvstate_t state, int fd, bool *eof_in, bool *eof_ou
|
|||||||
* reached the end of this file.
|
* reached the end of this file.
|
||||||
*/
|
*/
|
||||||
if (do_not_skip_errors) {
|
if (do_not_skip_errors) {
|
||||||
/*@-compdef@ */
|
|
||||||
pv_error(state, "%s: %s: %s", pv_current_file_name(state), _("read failed"), strerror(errno));
|
pv_error(state, "%s: %s: %s", pv_current_file_name(state), _("read failed"), strerror(errno));
|
||||||
/*@+compdef@ */
|
|
||||||
/*
|
|
||||||
* splint says the storage pointed to by the result of
|
|
||||||
* pv_current_file_name() is not fully defined.
|
|
||||||
*
|
|
||||||
* TODO: investigate and fix the reason for this.
|
|
||||||
*/
|
|
||||||
*eof_in = true;
|
*eof_in = true;
|
||||||
if (state->transfer.write_position >= state->transfer.read_position) {
|
if (state->transfer.write_position >= state->transfer.read_position) {
|
||||||
*eof_out = true;
|
*eof_out = true;
|
||||||
@@ -718,28 +710,42 @@ static int pv__transfer_write(pvstate_t state, bool *eof_in, bool *eof_out, long
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (nwritten > 0) {
|
if (nwritten > 0) {
|
||||||
|
bool tracking_lines = false;
|
||||||
|
|
||||||
|
if ((state->control.linemode) && (lineswritten != NULL))
|
||||||
|
tracking_lines = true;
|
||||||
|
else if (state->display.showing_previous_line)
|
||||||
|
tracking_lines = true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Write returned >0 - data successfully written.
|
* Write returned >0 - data successfully written.
|
||||||
*/
|
*/
|
||||||
if ((state->control.linemode) && (lineswritten != NULL)) {
|
if (tracking_lines) {
|
||||||
char separator;
|
char separator;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
long lines = 0;
|
long lines = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Line mode - look through what we've just written
|
* Tracking lines - either line mode, or we're
|
||||||
* to count how many lines there were.
|
* showing the last line in the display, or both.
|
||||||
|
* So we need to look through what we've just
|
||||||
|
* written to either count how many lines there
|
||||||
|
* were, or get the content of the most recent
|
||||||
|
* complete line, or both.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Allocate buffer to remember line positions. */
|
/* Allocate buffer to remember line positions. */
|
||||||
if (NULL == state->transfer.line_positions) {
|
if (NULL == state->transfer.line_positions && NULL != lineswritten) {
|
||||||
state->transfer.line_positions_capacity = MAX_LINE_POSITIONS;
|
state->transfer.line_positions_capacity = MAX_LINE_POSITIONS;
|
||||||
|
/*@-mustfreeonly@ */
|
||||||
state->transfer.line_positions =
|
state->transfer.line_positions =
|
||||||
calloc((size_t) (state->transfer.line_positions_capacity), sizeof(off_t));
|
calloc((size_t) (state->transfer.line_positions_capacity), sizeof(off_t));
|
||||||
if (NULL == state->transfer.line_positions) {
|
if (NULL == state->transfer.line_positions) {
|
||||||
pv_error(state, "%s: %s", _("line position buffer allocation failed"),
|
pv_error(state, "%s: %s", _("line position buffer allocation failed"),
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
}
|
}
|
||||||
|
/*@+mustfreeonly@ */
|
||||||
|
/* splint doesn't see we only call calloc() when line_positions is NULL. */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state->control.null_terminated_lines) {
|
if (state->control.null_terminated_lines) {
|
||||||
@@ -752,12 +758,50 @@ static int pv__transfer_write(pvstate_t state, bool *eof_in, bool *eof_out, long
|
|||||||
for (ptr++;
|
for (ptr++;
|
||||||
ptr - (char *) state->transfer.transfer_buffer - state->transfer.write_position <
|
ptr - (char *) state->transfer.transfer_buffer - state->transfer.write_position <
|
||||||
(size_t) nwritten; ptr++, state->transfer.last_output_position++) {
|
(size_t) nwritten; ptr++, state->transfer.last_output_position++) {
|
||||||
if (*ptr != separator)
|
if (*ptr != separator) {
|
||||||
|
/*
|
||||||
|
* If we're displaying the previous
|
||||||
|
* line ("%L"), add to our line
|
||||||
|
* buffer.
|
||||||
|
*/
|
||||||
|
if (state->display.showing_previous_line
|
||||||
|
&& state->display.next_line_len < PV_SIZEOF_PREVLINE_BUFFER - 1) {
|
||||||
|
state->display.next_line[state->display.next_line_len] = *ptr;
|
||||||
|
state->display.next_line_len++;
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* Separator found - increment line count. */
|
/* Separator found - increment line count. */
|
||||||
++lines;
|
++lines;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we're displaying the previous line
|
||||||
|
* ("%L"), update the previous-line buffer
|
||||||
|
* with the line we just completed, and
|
||||||
|
* start a new one.
|
||||||
|
*/
|
||||||
|
if (state->display.showing_previous_line) {
|
||||||
|
memset(state->display.previous_line, 0, PV_SIZEOF_PREVLINE_BUFFER);
|
||||||
|
if (state->display.next_line_len > PV_SIZEOF_PREVLINE_BUFFER - 1)
|
||||||
|
state->display.next_line_len = PV_SIZEOF_PREVLINE_BUFFER - 1;
|
||||||
|
if (state->display.next_line_len > 0) {
|
||||||
|
memcpy(state->display.previous_line, state->display.next_line, /* flawfinder: ignore */
|
||||||
|
state->display.next_line_len);
|
||||||
|
debug("%s: [%s]", "updated previous_line",
|
||||||
|
state->display.previous_line);
|
||||||
|
}
|
||||||
|
state->display.next_line_len = 0;
|
||||||
|
/*
|
||||||
|
* flawfinder - next_line_len is
|
||||||
|
* guaranteed to be less than the
|
||||||
|
* size of the previous_line buffer
|
||||||
|
* since we check it just before
|
||||||
|
* memcpy(), and we ensure that the
|
||||||
|
* last byte in the buffer is \0.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
if (NULL == state->transfer.line_positions)
|
if (NULL == state->transfer.line_positions)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -777,7 +821,8 @@ static int pv__transfer_write(pvstate_t state, bool *eof_in, bool *eof_out, long
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*lineswritten += lines;
|
if (NULL != lineswritten)
|
||||||
|
*lineswritten += lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
state->transfer.write_position += nwritten;
|
state->transfer.write_position += nwritten;
|
||||||
@@ -787,39 +832,39 @@ static int pv__transfer_write(pvstate_t state, bool *eof_in, bool *eof_out, long
|
|||||||
* If we're monitoring the output, update our copy of the
|
* If we're monitoring the output, update our copy of the
|
||||||
* last few bytes we've written.
|
* last few bytes we've written.
|
||||||
*/
|
*/
|
||||||
if (state->display.component[PV_COMPONENT_OUTPUTBUF].required && (nwritten > 0)) {
|
if (state->display.showing_last_written && (nwritten > 0)) {
|
||||||
size_t new_portion_length, old_portion_length;
|
size_t new_portion_size, old_portion_size;
|
||||||
|
|
||||||
new_portion_length = (size_t) nwritten;
|
new_portion_size = (size_t) nwritten;
|
||||||
if (new_portion_length > state->display.lastoutput_length)
|
if (new_portion_size > state->display.lastwritten_bytes)
|
||||||
new_portion_length = state->display.lastoutput_length;
|
new_portion_size = state->display.lastwritten_bytes;
|
||||||
|
|
||||||
old_portion_length = state->display.lastoutput_length - new_portion_length;
|
old_portion_size = state->display.lastwritten_bytes - new_portion_size;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make room for the new portion.
|
* Make room for the new portion.
|
||||||
*/
|
*/
|
||||||
if (old_portion_length > 0) {
|
if (old_portion_size > 0) {
|
||||||
memmove(state->display.lastoutput_buffer,
|
memmove(state->display.lastwritten_buffer,
|
||||||
state->display.lastoutput_buffer + new_portion_length, old_portion_length);
|
state->display.lastwritten_buffer + new_portion_size, old_portion_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy the new data in.
|
* Copy the new data in.
|
||||||
*/
|
*/
|
||||||
memcpy(state->display.lastoutput_buffer + /* flawfinder: ignore */
|
memcpy(state->display.lastwritten_buffer + /* flawfinder: ignore */
|
||||||
old_portion_length,
|
old_portion_size,
|
||||||
state->transfer.transfer_buffer + state->transfer.write_position - new_portion_length,
|
state->transfer.transfer_buffer + state->transfer.write_position - new_portion_size,
|
||||||
new_portion_length);
|
new_portion_size);
|
||||||
/*
|
/*
|
||||||
* flawfinder rationale: calculations above ensure
|
* flawfinder rationale: calculations above ensure
|
||||||
* that old_portion_length + new_portion_length is
|
* that old_portion_size + new_portion_size is
|
||||||
* always <= lastoutput_length, and
|
* always <= lastwritten_bytes, and
|
||||||
* lastoutput_length is guaranteed by
|
* lastwritten_bytes is guaranteed by
|
||||||
* pv__format_init() to be no more than
|
* pv__format_init() to be no more than
|
||||||
* PV_SIZEOF_LASTOUTPUT_BUFFER, which is the size of
|
* PV_SIZEOF_LASTWRITTEN_BUFFER, which is the size
|
||||||
* lastoutput_buffer, so the memcpy() will always
|
* of lastwritten_buffer, so the memcpy() will
|
||||||
* fit into the buffer.
|
* always fit into the buffer.
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -308,6 +308,7 @@ static int pidfds(pvstate_t state, unsigned int pid, struct proc_fdinfo **fds, i
|
|||||||
pv_error(state, "%s: alloc failed: %s", _("pid"), strerror(errno));
|
pv_error(state, "%s: alloc failed: %s", _("pid"), strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
memset(*fds, 0, size_needed);
|
||||||
|
|
||||||
proc_pidinfo(pid, PROC_PIDLISTFDS, 0, *fds, size_needed);
|
proc_pidinfo(pid, PROC_PIDLISTFDS, 0, *fds, size_needed);
|
||||||
|
|
||||||
@@ -419,9 +420,12 @@ int pv_watchpid_scanfds(pvstate_t state,
|
|||||||
#else
|
#else
|
||||||
if (sscanf(d->d_name, "%d", &fd) != 1)
|
if (sscanf(d->d_name, "%d", &fd) != 1)
|
||||||
continue;
|
continue;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Skip if the fd is outside the array. */
|
||||||
if ((fd < 0) || (fd >= FD_SETSIZE))
|
if ((fd < 0) || (fd >= FD_SETSIZE))
|
||||||
continue;
|
continue;
|
||||||
#endif
|
|
||||||
/*
|
/*
|
||||||
* Skip if this fd is already known to us.
|
* Skip if this fd is already known to us.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -4,6 +4,9 @@
|
|||||||
# 1MiB, described here:
|
# 1MiB, described here:
|
||||||
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=586763
|
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=586763
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# This is the same as the other display length at magnitude boundary check,
|
# This is the same as the other display length at magnitude boundary check,
|
||||||
# but for rate, not bytes transferred.
|
# but for rate, not bytes transferred.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
# Dummy assignments for "shellcheck".
|
# Dummy assignments for "shellcheck".
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|||||||
@@ -2,9 +2,17 @@
|
|||||||
#
|
#
|
||||||
# Test that "make install" installs the expected minimum set of files.
|
# Test that "make install" installs the expected minimum set of files.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
if test "${XCTEST}" = "1"; then
|
||||||
|
echo "cross-compile flag set - skipping as local make will not run"
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
makeDir="${testSubject%/*}"
|
makeDir="${testSubject%/*}"
|
||||||
if ! test -d "${makeDir}"; then
|
if ! test -d "${makeDir}"; then
|
||||||
echo "could not find the directory to run \`make' in"
|
echo "could not find the directory to run \`make' in"
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Check that the average transfer rate counter changes, but not more than it
|
# Check that the average transfer rate counter changes, but not more than it
|
||||||
# should.
|
# should.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that the byte counter counts in bits when --bits is selected.
|
# Check that the byte counter counts in bits when --bits is selected.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that "--buffer-percent" displays correctly.
|
# Check that "--buffer-percent" displays correctly.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that the byte counter counts.
|
# Check that the byte counter counts.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that the estimated time counter counts.
|
# Check that the estimated time counter counts.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that the estimated time counter can show the end time of day.
|
# Check that the estimated time counter can show the end time of day.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that "--last-written" works.
|
# Check that "--last-written" works.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that numeric output outputs some percentages.
|
# Check that numeric output outputs some percentages.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Check that numeric output gives a byte count instead of a percentage when
|
# Check that numeric output gives a byte count instead of a percentage when
|
||||||
# used with -b.
|
# used with -b.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Check that numeric output shows line counts instead of percentages, when
|
# Check that numeric output shows line counts instead of percentages, when
|
||||||
# used in line mode together with bytes mode.
|
# used in line mode together with bytes mode.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?not set - call this from 'make check'}"
|
true "${workFile2:?not set - call this from 'make check'}"
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that numeric output gives a timer when used with -t.
|
# Check that numeric output gives a timer when used with -t.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that the progress bar moves when data is coming in.
|
# Check that the progress bar moves when data is coming in.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that the progress bar increases in size when data is coming in.
|
# Check that the progress bar increases in size when data is coming in.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that the -q option shuts everything up.
|
# Check that the -q option shuts everything up.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that the transfer rate counter changes.
|
# Check that the transfer rate counter changes.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that the elapsed time counter does count up.
|
# Check that the elapsed time counter does count up.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Check that the process ID can be written to a file as described in the
|
# Check that the process ID can be written to a file as described in the
|
||||||
# manual.
|
# manual.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that size arguments are processed correctly.
|
# Check that size arguments are processed correctly.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?not set - call this from 'make check'}"
|
true "${testSubject:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
# Pass size argument $1 and check that the last reported number is $2.
|
# Pass size argument $1 and check that the last reported number is $2.
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that data can be just passed straight through.
|
# Check that data can be just passed straight through.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?not set - call this from 'make check'}"
|
true "${testSubject:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
inputString="TESTING"
|
inputString="TESTING"
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Transfer a large chunk of data through pv and check data correctness
|
# Transfer a large chunk of data through pv and check data correctness
|
||||||
# afterwards.
|
# afterwards.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?not set - call this from 'make check'}"
|
true "${workFile2:?not set - call this from 'make check'}"
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Transfer a large chunk of data through pv using pipes, sending it in a
|
# Transfer a large chunk of data through pv using pipes, sending it in a
|
||||||
# bursty fashion, and check data correctness afterwards.
|
# bursty fashion, and check data correctness afterwards.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?not set - call this from 'make check'}"
|
true "${workFile2:?not set - call this from 'make check'}"
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Make sure that files larger than 2GB are supported.
|
# Make sure that files larger than 2GB are supported.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?not set - call this from 'make check'}"
|
true "${workFile2:?not set - call this from 'make check'}"
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that there is no SIGPIPE or dropped data on bigger data transfers.
|
# Check that there is no SIGPIPE or dropped data on bigger data transfers.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?not set - call this from 'make check'}"
|
true "${testSubject:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
# We nead GNU head. On some platforms it is named ghead instead of head.
|
# We nead GNU head. On some platforms it is named ghead instead of head.
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Try repeatedly messaging a transfer process, and make sure the data stays
|
# Try repeatedly messaging a transfer process, and make sure the data stays
|
||||||
# intact.
|
# intact.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?not set - call this from 'make check'}"
|
true "${workFile2:?not set - call this from 'make check'}"
|
||||||
@@ -15,14 +18,17 @@ if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then
|
|||||||
exit 77
|
exit 77
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Generate some data.
|
# Generate 10MiB of data.
|
||||||
dd if=/dev/urandom of="${workFile1}" bs=1024 count=10240 2>/dev/null
|
dd if=/dev/urandom of="${workFile1}" bs=1024 count=10240 2>/dev/null
|
||||||
|
|
||||||
# Run a few remote control commands in the background.
|
# Run a few remote control commands in the background.
|
||||||
#
|
#
|
||||||
echo FAIL > "${workFile3}"
|
echo FAIL > "${workFile3}"
|
||||||
|
true > "${workFile4}"
|
||||||
(
|
(
|
||||||
set +e
|
set +e
|
||||||
|
# Don't start doing anything until the main transfer process, started below, has begun.
|
||||||
|
while test -e "${workFile4}" && ! test -s "${workFile4}"; do sleep 0.1; done
|
||||||
sleep 2
|
sleep 2
|
||||||
for loopCount in 1 2 3; do
|
for loopCount in 1 2 3; do
|
||||||
"${testSubject}" -R "$(cat "${workFile4}")" -apterb || exit 1
|
"${testSubject}" -R "$(cat "${workFile4}")" -apterb || exit 1
|
||||||
@@ -33,6 +39,8 @@ for loopCount in 1 2 3; do
|
|||||||
(usleep 200000 || sleep 1) 2>/dev/null
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
"${testSubject}" -R "$(cat "${workFile4}")" -F "%e" || exit 1
|
"${testSubject}" -R "$(cat "${workFile4}")" -F "%e" || exit 1
|
||||||
(usleep 200000 || sleep 1) 2>/dev/null
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
|
"${testSubject}" -R "$(cat "${workFile4}")" -x "window:%b" || exit 1
|
||||||
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
"${testSubject}" -R "$(cat "${workFile4}")" -N "." || exit 1
|
"${testSubject}" -R "$(cat "${workFile4}")" -N "." || exit 1
|
||||||
(usleep 200000 || sleep 1) 2>/dev/null
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
echo "${loopCount}" >/dev/null # dummy for shellcheck
|
echo "${loopCount}" >/dev/null # dummy for shellcheck
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Run valgrind's memory checker against a process using various different
|
# Run valgrind's memory checker against a process using various different
|
||||||
# transfer options.
|
# transfer options.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${sourcePath:?not set - call this from 'make check'}"
|
true "${sourcePath:?not set - call this from 'make check'}"
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Run valgrind's memory checker against a process that sets is process
|
# Run valgrind's memory checker against a process that sets is process
|
||||||
# title.
|
# title.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${sourcePath:?not set - call this from 'make check'}"
|
true "${sourcePath:?not set - call this from 'make check'}"
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Run valgrind's memory checker while receiving remote control commands.
|
# Run valgrind's memory checker while receiving remote control commands.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${sourcePath:?not set - call this from 'make check'}"
|
true "${sourcePath:?not set - call this from 'make check'}"
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
@@ -24,7 +27,7 @@ dd if=/dev/urandom of="${workFile1}" bs=1024 count=10240 2>/dev/null
|
|||||||
true > "${workFile3}"
|
true > "${workFile3}"
|
||||||
(
|
(
|
||||||
set +e
|
set +e
|
||||||
while ! test -s "${workFile3}"; do usleep 200000 2>/dev/null || sleep 1; done
|
while test -e "${workFile3}" && ! test -s "${workFile3}"; do usleep 200000 2>/dev/null || sleep 1; done
|
||||||
for loopCount in 1 2 3; do
|
for loopCount in 1 2 3; do
|
||||||
"${testSubject}" -R "$(cat "${workFile3}")" -apterb || exit 1
|
"${testSubject}" -R "$(cat "${workFile3}")" -apterb || exit 1
|
||||||
(usleep 200000 || sleep 1) 2>/dev/null
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
@@ -34,6 +37,8 @@ for loopCount in 1 2 3; do
|
|||||||
(usleep 200000 || sleep 1) 2>/dev/null
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
"${testSubject}" -R "$(cat "${workFile3}")" -F "%e" || exit 1
|
"${testSubject}" -R "$(cat "${workFile3}")" -F "%e" || exit 1
|
||||||
(usleep 200000 || sleep 1) 2>/dev/null
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
|
"${testSubject}" -R "$(cat "${workFile3}")" -x "window:%b" || exit 1
|
||||||
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
"${testSubject}" -R "$(cat "${workFile3}")" -N "." || exit 1
|
"${testSubject}" -R "$(cat "${workFile3}")" -N "." || exit 1
|
||||||
(usleep 200000 || sleep 1) 2>/dev/null
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
echo "${loopCount}" >/dev/null # dummy for shellcheck
|
echo "${loopCount}" >/dev/null # dummy for shellcheck
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Run valgrind's memory checker while using remote control to control
|
# Run valgrind's memory checker while using remote control to control
|
||||||
# another process.
|
# another process.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${sourcePath:?not set - call this from 'make check'}"
|
true "${sourcePath:?not set - call this from 'make check'}"
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
@@ -24,7 +27,7 @@ dd if=/dev/urandom of="${workFile1}" bs=1024 count=10240 2>/dev/null
|
|||||||
# Check from the POV of the process sending a control command.
|
# Check from the POV of the process sending a control command.
|
||||||
true > "${workFile3}"
|
true > "${workFile3}"
|
||||||
"${testSubject}" -L 100k -i 0.1 -f -P "${workFile3}" "${workFile1}" > "${workFile2}" 2>/dev/null &
|
"${testSubject}" -L 100k -i 0.1 -f -P "${workFile3}" "${workFile1}" > "${workFile2}" 2>/dev/null &
|
||||||
while ! test -s "${workFile3}"; do usleep 200000 2>/dev/null || sleep 1; done
|
while test -e "${workFile3}" && ! test -s "${workFile3}"; do usleep 200000 2>/dev/null || sleep 1; done
|
||||||
runWithValgrind -R "$(cat "${workFile3}")" -apterb 4>&1 || exit 1
|
runWithValgrind -R "$(cat "${workFile3}")" -apterb 4>&1 || exit 1
|
||||||
(usleep 200000 || sleep 1) 2>/dev/null
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
runWithValgrind -R "$(cat "${workFile3}")" -p 4>&1 || exit 1
|
runWithValgrind -R "$(cat "${workFile3}")" -p 4>&1 || exit 1
|
||||||
@@ -33,6 +36,8 @@ runWithValgrind -R "$(cat "${workFile3}")" -N "test" 4>&1 || exit 1
|
|||||||
(usleep 200000 || sleep 1) 2>/dev/null
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
runWithValgrind -R "$(cat "${workFile3}")" -F "%e" 4>&1 || exit 1
|
runWithValgrind -R "$(cat "${workFile3}")" -F "%e" 4>&1 || exit 1
|
||||||
(usleep 200000 || sleep 1) 2>/dev/null
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
|
runWithValgrind -R "$(cat "${workFile3}")" -x "window:%b" 4>&1 || exit 1
|
||||||
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
runWithValgrind -R "$(cat "${workFile3}")" -N "." 4>&1 || exit 1
|
runWithValgrind -R "$(cat "${workFile3}")" -N "." 4>&1 || exit 1
|
||||||
(usleep 200000 || sleep 1) 2>/dev/null
|
(usleep 200000 || sleep 1) 2>/dev/null
|
||||||
runWithValgrind -R "$(cat "${workFile3}")" -L 10M 4>&1 || exit 1
|
runWithValgrind -R "$(cat "${workFile3}")" -L 10M 4>&1 || exit 1
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Run valgrind's memory checker against a process using the --watchfd
|
# Run valgrind's memory checker against a process using the --watchfd
|
||||||
# option.
|
# option.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${sourcePath:?not set - call this from 'make check'}"
|
true "${sourcePath:?not set - call this from 'make check'}"
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
@@ -21,6 +24,7 @@ fi
|
|||||||
|
|
||||||
# Skip the test if "-d" does not work.
|
# Skip the test if "-d" does not work.
|
||||||
sleep 2 &
|
sleep 2 &
|
||||||
|
pid=$!
|
||||||
sleep 0.1
|
sleep 0.1
|
||||||
"${testSubject}" -d "${pid}" -f -i 0.5 >/dev/null 2>"${workFile1}"
|
"${testSubject}" -d "${pid}" -f -i 0.5 >/dev/null 2>"${workFile1}"
|
||||||
if grep -Fq ' -d: not available' "${workFile1}"; then
|
if grep -Fq ' -d: not available' "${workFile1}"; then
|
||||||
@@ -31,17 +35,20 @@ fi
|
|||||||
# Check "--watchfd PID:FD".
|
# Check "--watchfd PID:FD".
|
||||||
# See the "Watchfd" tests for more detail.
|
# See the "Watchfd" tests for more detail.
|
||||||
seq 1 100 > "${workFile1}"
|
seq 1 100 > "${workFile1}"
|
||||||
|
true > "${workFile3}"
|
||||||
# shellcheck disable=SC2030
|
# shellcheck disable=SC2030
|
||||||
(sleep 1; read -r line; sleep 1; read -r line; sleep 1) <"${workFile1}" &
|
(while test -e "${workFile3}" && ! test -s "${workFile3}"; do sleep 0.1; done; sleep 1; read -r line; sleep 1; read -r line; sleep 1) <"${workFile1}" &
|
||||||
pid=$!
|
pid=$!
|
||||||
sleep 0.1
|
sleep 0.1
|
||||||
{ runWithValgrind -d "${pid}:0" -f -i 0.5 >/dev/null 2>&1; } 4>&1 || exit 1
|
{ runWithValgrind -P "${workFile3}" -d "${pid}:0" -f -i 0.5 >/dev/null 2>&1; } 4>&1 || exit 1
|
||||||
|
|
||||||
# Check "--watchfd PID".
|
# Check "--watchfd PID".
|
||||||
seq 1 100 > "${workFile1}"
|
seq 1 100 > "${workFile1}"
|
||||||
seq 1 300 > "${workFile2}"
|
seq 1 300 > "${workFile2}"
|
||||||
|
true > "${workFile3}"
|
||||||
# shellcheck disable=SC2030
|
# shellcheck disable=SC2030
|
||||||
(
|
(
|
||||||
|
while test -e "${workFile3}" && ! test -s "${workFile3}"; do sleep 0.1; done
|
||||||
sleep 1
|
sleep 1
|
||||||
read -r line
|
read -r line
|
||||||
exec 9<"${workFile2}"
|
exec 9<"${workFile2}"
|
||||||
@@ -56,6 +63,6 @@ sleep 1
|
|||||||
) <"${workFile1}" &
|
) <"${workFile1}" &
|
||||||
pid=$!
|
pid=$!
|
||||||
sleep 0.1
|
sleep 0.1
|
||||||
{ runWithValgrind -d "${pid}" -f -i 0.5 >/dev/null 2>&1; } 4>&1 || exit 1
|
{ runWithValgrind -P "${workFile3}" -d "${pid}" -f -i 0.5 >/dev/null 2>&1; } 4>&1 || exit 1
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -5,6 +5,9 @@
|
|||||||
# doesn't check that O_DIRECT is actually being used, it just checks that
|
# doesn't check that O_DIRECT is actually being used, it just checks that
|
||||||
# data is not being corrupted.
|
# data is not being corrupted.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?not set - call this from 'make check'}"
|
true "${workFile2:?not set - call this from 'make check'}"
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Check that the progress bar is produced when "--force" is used, and is not
|
# Check that the progress bar is produced when "--force" is used, and is not
|
||||||
# when it is not, providing stderr is a file.
|
# when it is not, providing stderr is a file.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that the update interval can be set.
|
# Check that the update interval can be set.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that line mode counts lines instead of bytes.
|
# Check that line mode counts lines instead of bytes.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that "--size" affects the percentage shown.
|
# Check that "--size" affects the percentage shown.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Similar to the "--size" check but, instead, using another file's size with
|
# Similar to the "--size" check but, instead, using another file's size with
|
||||||
# "--size @".
|
# "--size @".
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?not set - call this from 'make check'}"
|
true "${workFile2:?not set - call this from 'make check'}"
|
||||||
|
|||||||
@@ -5,6 +5,9 @@
|
|||||||
# check that fdatasync() is actually being called, it just checks that data
|
# check that fdatasync() is actually being called, it just checks that data
|
||||||
# is not being corrupted.
|
# is not being corrupted.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?not set - call this from 'make check'}"
|
true "${workFile2:?not set - call this from 'make check'}"
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Check that the terminal width is detected on startup.
|
# Check that the terminal width is detected on startup.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?not set - call this from 'make check'}"
|
true "${workFile2:?not set - call this from 'make check'}"
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# A simple test of rate limiting.
|
# A simple test of rate limiting.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?not set - call this from 'make check'}"
|
true "${testSubject:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
# Transfer 102 bytes at 100 bytes/sec. It should take at least 1 second.
|
# Transfer 102 bytes at 100 bytes/sec. It should take at least 1 second.
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Try changing the format of a transfer remotely.
|
# Try changing the format of a transfer remotely.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?not set - call this from 'make check'}"
|
true "${workFile2:?not set - call this from 'make check'}"
|
||||||
@@ -14,10 +17,13 @@ if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then
|
|||||||
exit 77
|
exit 77
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Generate an empty test file.
|
# Generate a 10MiB test file of null bytes.
|
||||||
dd if=/dev/zero of="${workFile1}" bs=1024 count=10240 2>/dev/null
|
dd if=/dev/zero of="${workFile1}" bs=1024 count=10240 2>/dev/null
|
||||||
|
|
||||||
|
true > "${workFile4}"
|
||||||
(
|
(
|
||||||
|
# Don't start doing anything until the main transfer process, started below, has begun.
|
||||||
|
while test -e "${workFile4}" && ! test -s "${workFile4}"; do sleep 0.1; done
|
||||||
sleep 1
|
sleep 1
|
||||||
"${testSubject}" -R "$(cat "${workFile4}")" -a
|
"${testSubject}" -R "$(cat "${workFile4}")" -a
|
||||||
sleep 2
|
sleep 2
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#
|
#
|
||||||
# Make sure -S stops at the given size.
|
# Make sure -S stops at the given size.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?not set - call this from 'make check'}"
|
true "${workFile2:?not set - call this from 'make check'}"
|
||||||
|
|||||||
@@ -2,10 +2,14 @@
|
|||||||
#
|
#
|
||||||
# Check that watching a process's file descriptors works as expected.
|
# Check that watching a process's file descriptors works as expected.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?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 "${workFile3:?not set - call this from 'make check'}"
|
||||||
|
true "${workFile4:?not set - call this from 'make check'}"
|
||||||
|
|
||||||
# Skip the test if "-d" is not available.
|
# Skip the test if "-d" is not available.
|
||||||
if ! "${testSubject}" -h | grep -Fq ' -d'; then
|
if ! "${testSubject}" -h | grep -Fq ' -d'; then
|
||||||
@@ -18,8 +22,12 @@ seq 1 300 > "${workFile2}"
|
|||||||
|
|
||||||
# Run a background process to perform a few reads from a file, opening a
|
# Run a background process to perform a few reads from a file, opening a
|
||||||
# second file after a moment.
|
# second file after a moment.
|
||||||
|
# We only start doing anything once the PV process below has started (the
|
||||||
|
# workFile3 check).
|
||||||
# NB we just export line to make shellcheck think it's used.
|
# NB we just export line to make shellcheck think it's used.
|
||||||
|
true > "${workFile3}"
|
||||||
(
|
(
|
||||||
|
while test -e "${workFile3}" && ! test -s "${workFile3}"; do sleep 0.1; done
|
||||||
export line
|
export line
|
||||||
sleep 1
|
sleep 1
|
||||||
read -r line
|
read -r line
|
||||||
@@ -31,17 +39,17 @@ sleep 1
|
|||||||
pid=$!
|
pid=$!
|
||||||
|
|
||||||
sleep 0.1
|
sleep 0.1
|
||||||
"${testSubject}" -d "${pid}" -f -i 0.5 >/dev/null 2>"${workFile3}"
|
"${testSubject}" -P "${workFile3}" -d "${pid}" -f -i 0.5 >/dev/null 2>"${workFile4}"
|
||||||
|
|
||||||
# Skip the test if "-d" does not work.
|
# Skip the test if "-d" does not work.
|
||||||
if grep -Fq ' -d: not available' "${workFile3}"; then
|
if grep -Fq ' -d: not available' "${workFile4}"; then
|
||||||
echo "no \`--watchfd' / \`-d' option on this platform"
|
echo "no \`--watchfd' / \`-d' option on this platform"
|
||||||
exit 77
|
exit 77
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Process the output to make it easier to handle.
|
# Process the output to make it easier to handle.
|
||||||
# NB "ESC [ A" is "cursor up", we turn that into "-" and a newline.
|
# NB "ESC [ A" is "cursor up", we turn that into "-" and a newline.
|
||||||
tr '\r' '\n' < "${workFile3}" | sed 's/.\[A/-!/g' | tr '!' '\n' > "${workFile1}"
|
tr '\r' '\n' < "${workFile4}" | sed 's/.\[A/-!/g' | tr '!' '\n' > "${workFile1}"
|
||||||
|
|
||||||
# We should see at least 2 file positions for fd 0.
|
# We should see at least 2 file positions for fd 0.
|
||||||
positionsReported="$(awk '/^ *0:/ {print $2}' < "${workFile1}" | sort -n | uniq)"
|
positionsReported="$(awk '/^ *0:/ {print $2}' < "${workFile1}" | sort -n | uniq)"
|
||||||
|
|||||||
@@ -2,9 +2,13 @@
|
|||||||
#
|
#
|
||||||
# Check that watching a single file descriptor works as expected.
|
# Check that watching a single file descriptor works as expected.
|
||||||
|
|
||||||
|
# Allow all tests to be skipped, e.g. during a release build
|
||||||
|
test "${SKIP_ALL_TESTS}" = "1" && exit 77
|
||||||
|
|
||||||
true "${testSubject:?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 "${workFile1:?not set - call this from 'make check'}"
|
||||||
true "${workFile2:?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.
|
# Skip the test if "-d" is not available.
|
||||||
if ! "${testSubject}" -h | grep -Fq ' -d'; then
|
if ! "${testSubject}" -h | grep -Fq ' -d'; then
|
||||||
@@ -15,12 +19,18 @@ fi
|
|||||||
seq 1 100 > "${workFile1}"
|
seq 1 100 > "${workFile1}"
|
||||||
|
|
||||||
# Run a background process to perform a few reads from a file.
|
# Run a background process to perform a few reads from a file.
|
||||||
|
# We only start doing anything once the PV process below has started (the
|
||||||
|
# workFile3 check).
|
||||||
# NB we just export line to make shellcheck think it's used.
|
# 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}" &
|
true > "${workFile3}"
|
||||||
|
(
|
||||||
|
while test -e "${workFile3}" && ! test -s "${workFile3}"; do sleep 0.1; done
|
||||||
|
export line; sleep 1; read -r line; sleep 1; read -r line; sleep 1
|
||||||
|
) <"${workFile1}" &
|
||||||
pid=$!
|
pid=$!
|
||||||
|
|
||||||
sleep 0.1
|
sleep 0.1
|
||||||
"${testSubject}" -d "${pid}:0" -f -i 0.5 >/dev/null 2>"${workFile2}"
|
"${testSubject}" -P "${workFile3}" -d "${pid}:0" -f -i 0.5 >/dev/null 2>"${workFile2}"
|
||||||
|
|
||||||
# Skip the test if "-d" does not work.
|
# Skip the test if "-d" does not work.
|
||||||
if grep -Fq ' -d: not available' "${workFile2}"; then
|
if grep -Fq ' -d: not available' "${workFile2}"; then
|
||||||
|
|||||||
@@ -30,6 +30,11 @@ if ! command -v valgrind >/dev/null 2>&1; then
|
|||||||
exit 77
|
exit 77
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "${SKIP_VALGRIND_TESTS}" = "1"; then
|
||||||
|
echo "SKIP_VALGRIND_TESTS is set"
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
valgrindHelp="$(valgrind --help 2>&1)"
|
valgrindHelp="$(valgrind --help 2>&1)"
|
||||||
for valgrindOption in "verbose" "show-error-list" "error-exitcode" "track-fds" "leak-check"; do
|
for valgrindOption in "verbose" "show-error-list" "error-exitcode" "track-fds" "leak-check"; do
|
||||||
echo "${valgrindHelp}" | grep -Fq "${valgrindOption}" || { echo "test requires \`valgrind --${valgrindOption}'"; exit 77; }
|
echo "${valgrindHelp}" | grep -Fq "${valgrindOption}" || { echo "test requires \`valgrind --${valgrindOption}'"; exit 77; }
|
||||||
|
|||||||
Reference in New Issue
Block a user