diff --git a/README b/README index 1ca2be9..0960565 100644 --- a/README +++ b/README @@ -37,7 +37,7 @@ all files used, all functions defined, and all TODOs marked in the code. Author and acknowledgements *************************** -This package is copyright 2015 Andrew Wood, and is being distributed under +This package is copyright 2020 Andrew Wood, and is being distributed under the terms of the Artistic License 2.0. For more details of this license, see the file `doc/COPYING'. @@ -214,6 +214,7 @@ Credit is also due to: Peter Korsgaard - provided similar patch for lstat64, specifically for uClibc support + - provided AIX cross-compilation patch to fix bug in -lc128 check Ralf Ramsauer - reported bug which dropped transfer rate on terminal resize @@ -227,4 +228,38 @@ Credit is also due to: Eric A. Borisch - provided details of compatibility fix for "%Lu" in watchpid code + Jan Venekamp + - reported MacOS buffer size interactions with pipes + + Matt + - provided "rate-window" patches for rate calculation + + Filippo Valsorda + - provided patch for stat64 issue on Apple Silicon + + Matt Koscica, William Dillon + - also reported stat64 issue on Apple Silicon + + Norman Rasmussen + - suggested -c with -d PID:FD, reject -N with -d PID + + Andriy Gapon, Jonathan Elchison + - reported bug where "pv /dev/zero >/dev/null &" stops immediately + + Marcelo Chiesa + - reported unused-result warnings when compiling PV 1.6.6 + + Jered Floyd + - provided patches to improve --rate-limit + + Christoph Biedl + - provided ETA and dynamic interval patches + + Richard Fonfara + - provided German translations for "pv --help" + + Johannes Gerer + - suggested that "-B" should enable "-C" + + ----------------------------------------------------------------------------- diff --git a/autoconf/configure.in b/autoconf/configure.in index bd45004..f6515e7 100644 --- a/autoconf/configure.in +++ b/autoconf/configure.in @@ -86,7 +86,7 @@ AC_PROG_MAKE_SET dnl AIX needs -lc128 dnl -AC_EGREP_CPP([yes], [#ifdef _AIX +AC_EGREP_CPP([^yes$], [#ifdef _AIX yes #endif ], [LIBS="$LIBS -lc128"]) @@ -155,6 +155,7 @@ dnl Check for various header files and set various other macros. dnl AC_DEFINE(HAVE_CONFIG_H) AC_HEADER_STDC +AC_HEADER_STDBOOL AC_CHECK_FUNCS(memcpy basename snprintf stat64) AC_CHECK_HEADERS(limits.h) diff --git a/autoconf/header.in b/autoconf/header.in index 70ddedb..a827ab8 100644 --- a/autoconf/header.in +++ b/autoconf/header.in @@ -90,6 +90,24 @@ #define CURSOR_ANSWERBACK_BYTE_BY_BYTE 1 #endif +/* Boolean type support. */ +#undef HAVE_STDBOOL_H +#ifdef HAVE_STDBOOL_H +# include +#else +# ifndef HAVE__BOOL +# ifdef __cplusplus +typedef bool _Bool; +# else +# define _Bool signed char +# endif +# endif +# define bool _Bool +# define false 0 +# define true 1 +# define __bool_true_false_are_defined 1 +#endif + /* Support for debugging output. */ #undef ENABLE_DEBUGGING diff --git a/autoconf/make/depend.mk~ b/autoconf/make/depend.mk~ index 6093936..69c1272 100644 --- a/autoconf/make/depend.mk~ +++ b/autoconf/make/depend.mk~ @@ -4,18 +4,18 @@ src/library/getopt.d src/library/getopt.o: src/library/getopt.c src/include/config.h src/include/library/gettext.h src/library/gettext.d src/library/gettext.o: src/library/gettext.c src/include/config.h src/include/library/gettext.h -src/pv/signal.d src/pv/signal.o: src/pv/signal.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h -src/pv/watchpid.d src/pv/watchpid.o: src/pv/watchpid.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h -src/pv/cursor.d src/pv/cursor.o: src/pv/cursor.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h -src/pv/file.d src/pv/file.o: src/pv/file.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h -src/pv/display.d src/pv/display.o: src/pv/display.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h -src/pv/loop.d src/pv/loop.o: src/pv/loop.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h -src/pv/number.d src/pv/number.o: src/pv/number.c src/include/config.h src/include/library/gettext.h src/include/pv.h -src/pv/transfer.d src/pv/transfer.o: src/pv/transfer.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h -src/pv/state.d src/pv/state.o: src/pv/state.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h -src/main/version.d src/main/version.o: src/main/version.c src/include/config.h src/include/library/gettext.h src/main/debug.d src/main/debug.o: src/main/debug.c src/include/config.h src/include/library/gettext.h src/include/pv.h +src/main/help.d src/main/help.o: src/main/help.c src/include/config.h src/include/library/gettext.h src/main/main.d src/main/main.o: src/main/main.c src/include/config.h src/include/library/gettext.h src/include/options.h src/include/pv.h src/main/options.d src/main/options.o: src/main/options.c src/include/config.h src/include/library/gettext.h src/include/options.h src/include/library/getopt.h src/include/pv.h src/main/remote.d src/main/remote.o: src/main/remote.c src/include/config.h src/include/library/gettext.h src/include/options.h src/include/pv.h -src/main/help.d src/main/help.o: src/main/help.c src/include/config.h src/include/library/gettext.h +src/main/version.d src/main/version.o: src/main/version.c src/include/config.h src/include/library/gettext.h +src/pv/cursor.d src/pv/cursor.o: src/pv/cursor.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h +src/pv/display.d src/pv/display.o: src/pv/display.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h +src/pv/file.d src/pv/file.o: src/pv/file.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h +src/pv/loop.d src/pv/loop.o: src/pv/loop.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h +src/pv/number.d src/pv/number.o: src/pv/number.c src/include/config.h src/include/library/gettext.h src/include/pv.h +src/pv/signal.d src/pv/signal.o: src/pv/signal.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h +src/pv/state.d src/pv/state.o: src/pv/state.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h +src/pv/transfer.d src/pv/transfer.o: src/pv/transfer.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h +src/pv/watchpid.d src/pv/watchpid.o: src/pv/watchpid.c src/include/pv-internal.h src/include/config.h src/include/library/gettext.h src/include/pv.h diff --git a/autoconf/make/filelist.mk~ b/autoconf/make/filelist.mk~ index bb44965..7a214da 100644 --- a/autoconf/make/filelist.mk~ +++ b/autoconf/make/filelist.mk~ @@ -1,62 +1,62 @@ # Automatically generated file listings # -# Creation time: Fri Jun 30 22:23:37 BST 2017 +# Creation time: Tue Mar 30 07:17:40 BST 2021 allsrc = src/library/getopt.c \ src/library/gettext.c \ -src/pv/signal.c \ -src/pv/watchpid.c \ -src/pv/cursor.c \ -src/pv/file.c \ -src/pv/display.c \ -src/pv/loop.c \ -src/pv/number.c \ -src/pv/transfer.c \ -src/pv/state.c \ -src/main/version.c \ src/main/debug.c \ +src/main/help.c \ src/main/main.c \ src/main/options.c \ src/main/remote.c \ -src/main/help.c +src/main/version.c \ +src/pv/cursor.c \ +src/pv/display.c \ +src/pv/file.c \ +src/pv/loop.c \ +src/pv/number.c \ +src/pv/signal.c \ +src/pv/state.c \ +src/pv/transfer.c \ +src/pv/watchpid.c allobj = src/library/getopt.o \ src/library/gettext.o \ -src/pv/signal.o \ -src/pv/watchpid.o \ -src/pv/cursor.o \ -src/pv/file.o \ -src/pv/display.o \ -src/pv/loop.o \ -src/pv/number.o \ -src/pv/transfer.o \ -src/pv/state.o \ -src/main/version.o \ src/main/debug.o \ +src/main/help.o \ src/main/main.o \ src/main/options.o \ src/main/remote.o \ -src/main/help.o \ +src/main/version.o \ +src/pv/cursor.o \ +src/pv/display.o \ +src/pv/file.o \ +src/pv/loop.o \ +src/pv/number.o \ +src/pv/signal.o \ +src/pv/state.o \ +src/pv/transfer.o \ +src/pv/watchpid.o \ src/library.o \ -src/pv.o \ +src/main.o \ src/nls.o \ -src/main.o +src/pv.o alldep = src/library/getopt.d \ src/library/gettext.d \ -src/pv/signal.d \ -src/pv/watchpid.d \ -src/pv/cursor.d \ -src/pv/file.d \ -src/pv/display.d \ -src/pv/loop.d \ -src/pv/number.d \ -src/pv/transfer.d \ -src/pv/state.d \ -src/main/version.d \ src/main/debug.d \ +src/main/help.d \ src/main/main.d \ src/main/options.d \ src/main/remote.d \ -src/main/help.d +src/main/version.d \ +src/pv/cursor.d \ +src/pv/display.d \ +src/pv/file.d \ +src/pv/loop.d \ +src/pv/number.d \ +src/pv/signal.d \ +src/pv/state.d \ +src/pv/transfer.d \ +src/pv/watchpid.d diff --git a/autoconf/make/modules.mk~ b/autoconf/make/modules.mk~ index 20f830f..d810fa8 100644 --- a/autoconf/make/modules.mk~ +++ b/autoconf/make/modules.mk~ @@ -1,14 +1,14 @@ # Automatically generated module linking rules # -# Creation time: Fri Jun 30 22:23:37 BST 2017 +# Creation time: Tue Mar 30 07:17:40 BST 2021 src/library.o: src/library/getopt.o src/library/gettext.o $(LD) $(LDFLAGS) -o $@ src/library/getopt.o src/library/gettext.o -src/pv.o: src/pv/cursor.o src/pv/display.o src/pv/file.o src/pv/loop.o src/pv/number.o src/pv/signal.o src/pv/state.o src/pv/transfer.o src/pv/watchpid.o - $(LD) $(LDFLAGS) -o $@ src/pv/cursor.o src/pv/display.o src/pv/file.o src/pv/loop.o src/pv/number.o src/pv/signal.o src/pv/state.o src/pv/transfer.o src/pv/watchpid.o - src/main.o: src/main/debug.o src/main/help.o src/main/main.o src/main/options.o src/main/remote.o src/main/version.o $(LD) $(LDFLAGS) -o $@ src/main/debug.o src/main/help.o src/main/main.o src/main/options.o src/main/remote.o src/main/version.o +src/pv.o: src/pv/cursor.o src/pv/display.o src/pv/file.o src/pv/loop.o src/pv/number.o src/pv/signal.o src/pv/state.o src/pv/transfer.o src/pv/watchpid.o + $(LD) $(LDFLAGS) -o $@ src/pv/cursor.o src/pv/display.o src/pv/file.o src/pv/loop.o src/pv/number.o src/pv/signal.o src/pv/state.o src/pv/transfer.o src/pv/watchpid.o + diff --git a/autoconf/scripts/index.sh b/autoconf/scripts/index.sh index e0a0c07..b402546 100755 --- a/autoconf/scripts/index.sh +++ b/autoconf/scripts/index.sh @@ -1,4 +1,4 @@ -#!/bin/ash +#!/bin/sh # # Script to generate an HTML index of all C code from the current directory # downwards (skipping directories ending in ~). The header comment in each diff --git a/doc/NEWS b/doc/NEWS index 172e2e1..312deb5 100644 --- a/doc/NEWS +++ b/doc/NEWS @@ -1,3 +1,35 @@ +x.x.x - NOT YET RELEASED + - fix: starting pv in the background no longer immediately stops unless + the transfer is to/from the terminal (Andriy Gapon, Jonathan Elchison) + - fix: using -B, -A, or -T now switches on -C implicitly + (Johannes Gerer, André Stapf) + - fix: AIX build fixes (Peter Korsgaard) + - i18n: updated German "--help" translations (Richard Fonfara) + - i18n: switched to UTF-8 encoding, added missing translations (de,fr,pt) + - docs: new "common switches" manual section (Jacek Wielemborek) + - docs: use placeholder instead of /dev/sda in the manual (Pranav Peshwe) + - docs: mention MacOS pipes and "-B 1024" in the manual (Jan Venekamp) + - docs: correct shell in autoconf/scripts/index.sh (Juan Picca) + - cleanup: various compiler warnings cleaned up + + Full changelog is below: + - (r181) added common switches section to manual (Jacek Wielemborek) + - (r184) use placeholder instead of /dev/sda in the manual (Pranav Peshwe) + - (r185) replace ash with sh in autoconf/scripts/index.sh (Juan Picca) + - (r185) added note to manual about "-B 1024" in MacOS pipes (Jan Venekamp) + - (r185) fix AIX config check when the CWD contains "yes" (Peter Korsgaard) + - (r189) (#1556) updated German "--help" translations (Richard Fonfara) + - (r189) updated missing German translations and changed to UTF-8 encoding + - (r191) updated missing French translations and changed to UTF-8 encoding + - (r193) updated missing Portuguese translations, changed to UTF-8 encoding + - (r196) (#1563) using -B, -A, or -T now switches on -C implicitly + (Johannes Gerer, André Stapf) + - (r199) fixed numerous compiler warnings in newer GCC versions + - (r200,205) fixed bug where "pv /dev/zero >/dev/null &" stopped + immediately (Jonathan Elchison, Andriy Gapon) + - (r203,205) marked unused arguments with GCC unused attribute, started + using boolean data type for flags, corrected more compiler warnings + 1.6.6 - 30 June 2017 - (r161) use %llu instead of %Lu for better compatibility (Eric A. Borisch) - (r162) (#1532) fix target buffer size (-B) being ignored (AndCycle, Ilya diff --git a/doc/TODO b/doc/TODO index ceca7c4..7894b15 100644 --- a/doc/TODO +++ b/doc/TODO @@ -1,21 +1,30 @@ Things still to do: + - store terminal state in shm seg (Lars Ellenberg - Feb 2018) + - (as above) fix race condition with multiple "pv -c" (Viktor Ashirov - Jan 2020, Lars Ellenberg) + - (#1287) if the first pv exits, should the second become IPC leader? + - option to show bits/sec instead of bytes (John W. O'Brien - Jan 2019) + - option for alternate units like kB (x1000) (David Henderson [cliquesoft.org] - Dec 2018) + - (same as above) option to make input suffixes decimal not binary (ie kb rather than KiB) + - allow decimal values for -s, -L, -B (suggestion - Thomas Watson) - allow -E to take a block size argument so errors cause a skip to the next block (Anthony DeRobertis) - (#1559) momentary ETA option (Luc Gommans) - - (#1556) correct German translations (Richard Fonfara) - (#1557) use clock_gettime() in ETA calculation (Mateju Miroslav) - (#1561) show days in same format in ETA as in elapsed time - (#1562) allow -r with -l and -n to output lines/sec (Roland Kletzing) - - (#1563) make -B imply -C (Johannes Gerer) - document zsh <() incompatibility (frederik@ofb.net - Frederik Eaton) + - apply patch for MacOS 11 (Apple Silicon) stat64 issue (Filippo Valsorda) - do not check terminal in -q/-n mode (zsh <(pv -n) fails) - if -w/-H was specified, ignore SIGWINCH + - reset ETA on SIGUSR1 (Jacek Wielemborek - Jan 2019) - option to enable O_DIRECT (Romain Kang, Jacek Wielemborek) - use posix_fadvise() like cat(1) does (Jacek Wielemborek) + - before exit, flush output (e.g. writing to USB disk), update counters during flush (Kalin KOZHUHAROV - Jun 2018) + - permit -c with -d PID:FD, reject -N with -d PID (Norman Rasmussen) - (#1508) add watchfd tests - - (#1534) allow multiple -d options - - (#1533) one-shot option (Jacek Wielemborek) + - (#1554) allow multiple -d options (Linus Heckemann for multiple PID:FD) + - (#1553) one-shot option (Jacek Wielemborek) - (#1505) option to switch rate to per minute if really slow - (#1510) option "--progress-from FILE", read last number and use it as bytes read: pv --progress-from <( while sleep 1; do du -sb somedir; done ) -s 123g @@ -24,8 +33,23 @@ Things still to do: - (#1286) option for process title (Martin Sarsale) as "pv - name:FooProcess -xyz - transferred: 1.3GB - 500KB/s - running: 10:15:30s" - (#1290) look at effect of O_SYNC or fsync on performance - (#1281) option (-x?) to use xterm title line for status (Joachim Haga) - - (#1287) if the first pv exits, should the second become IPC leader? - (#1560) use Unicode for more granular progress bar (Alexander Petrossian) + - show fd backwards reads more neatly than negative huge numbers + - "swallow" option to discard output (André Stapf - Apr 2017) + - differentiate "eta" from "fineta" in display (André Stapf - Apr 2017) + - continue timer even if input or output is blocking (Martin Probst - Jun 2017) + - incorporate ETA patch from Christoph Biedl - Jul 2017 + - incorporate dynamic interval patch from Christoph Biedl - Dec 2019 + - option "--size-file" or similar to use size of a file for "-s" + - fix rate limit downgrade as per patch (Stephen Kitt - Jan 2018) + - normalise progress to 100% if overrun (Andrej Gantvorg - Mar 2018) + - incorporate average rate interval patch "rate-window"/"eta-window" (lemonsqueeze/Matt - May/Sep 2018 - https://github.com/lemonsqueeze/pv) + - incorporate rate limit patch (Jered Floyd - Dec 2018) + - option --sparse (with block size option) to write sparse output (Andriy Galetski - Apr 2019) + - correct "-n" behaviour when going past 100% of "-s" size (Marcel - Nov 2018) + - option to show speed gauge (% max speed) if progress not known (Ryan Cooley - Jun 2019) + - look at + https://www.reddit.com/r/unix/comments/6gxduc/how_is_gnu_yes_so_fast/diua761/ - add development support for http://clang-analyzer.llvm.org/ - stats for avg/min/max/stddev throughput (Venky.N.Iyer) diff --git a/doc/quickref.1.in b/doc/quickref.1.in index 5245e3f..bc9a23b 100644 --- a/doc/quickref.1.in +++ b/doc/quickref.1.in @@ -1,4 +1,4 @@ -.TH @UCPACKAGE@ 1 "June 2017" Linux "User Manuals" +.TH @UCPACKAGE@ 1 "June 2020" Linux "User Manuals" .SH NAME @PACKAGE@ \- monitor the progress of data through a pipe .SH SYNOPSIS @@ -63,19 +63,19 @@ program for a full-screen progress display: Taking an image of a disk, skipping errors: .RS -.B @PACKAGE@ -EE /dev/sda > disk-image.img +.B @PACKAGE@ -EE /dev/your/disk/device > disk-image.img .RE Writing an image back to a disk: .RS -.B @PACKAGE@ disk-image.img > /dev/sda +.B @PACKAGE@ disk-image.img > /dev/your/disk/device .RE Zeroing a disk: .RS -.B @PACKAGE@ < /dev/zero > /dev/sda +.B @PACKAGE@ < /dev/zero > /dev/your/disk/device .RE Note that if the input size cannot be calculated, and the output is a block @@ -155,7 +155,8 @@ percentage of the transfer buffer in use - but see the caveat under .B %T in the .B FORMATTING -section below. +section below. Implies +.BR \-C . .TP .B \-A, \-\-last\-written NUM Show the last @@ -164,7 +165,8 @@ bytes written - but see the caveat under .B %nA in the .B FORMATTING -section below. +section below. Implies +.BR \-C . .TP .B \-F, \-\-format FORMAT Ignore the options @@ -312,7 +314,10 @@ Use a transfer buffer size of bytes. A suffix of "K", "M", "G", or "T" can be added to denote kibibytes (*1024), mebibytes, and so on. 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 determined. +400KiB if the block size cannot be determined. This can be useful on +platforms like MacOS which perform better in pipelines with specific buffer +sizes such as 1024. Implies +.BR \-C . .TP .B \-C, \-\-no-splice Never use @@ -328,13 +333,18 @@ but means that the transfer buffer may not be used. This prevents .B \-A and .B \-T -from working, so if you want to use -.B \-A +from working, and makes +.B \-B +redundant, so using +.BR \-A , +.BR \-T , or -.B \-T -then you will need to use -.BR \-C , -at the cost of a small loss in transfer efficiency. +.B \-B +automatically switches on +.BR \-C . +Switching on +.B \-C +results in a small loss of transfer efficiency. (This option has no effect on systems where .BR splice (2) is unavailable). @@ -513,6 +523,11 @@ Show only the elapsed time - useful as a simple timer, e.g. The default behaviour: progress bar, elapsed time, estimated completion time, current rate, and byte counter. +.P +On MacOS, it may be useful to specify +.B -B 1024 +in a pipeline, as this may improve performance. + .SH EXIT STATUS An exit status of 1 indicates a problem with the @@ -544,6 +559,7 @@ A signal was caught that caused an early exit. .B 64 Memory allocation failed. +.P A zero exit status indicates no problems. diff --git a/doc/release-checklist b/doc/release-checklist index 6215e2e..dbaa429 100644 --- a/doc/release-checklist +++ b/doc/release-checklist @@ -9,12 +9,12 @@ Before releasing a new version, go through this checklist: - make indent indentclean - make update-po - make test - - commit + - commit to SVN - wipe build directory, re-run generate.sh and configure - make release - make manhtml | tidy -asxhtml | sed -e '1,//d' -e '/<\/body>/,$d' - update HTML for todo and news - - copy and sign tar.gz to HTML directory - - submit new release + - copy and sign tar.gz to HTML directory (sig as both .asc and .txt) + - submit new release to Sourceforge - upload HTML - check validator results for project page and manual diff --git a/src/include/options.h b/src/include/options.h index 0f8029e..90d8f85 100644 --- a/src/include/options.h +++ b/src/include/options.h @@ -14,30 +14,30 @@ typedef struct opts_s *opts_t; struct opts_s { /* structure describing run-time options */ char *program_name; /* name the program is running as */ - unsigned char do_nothing; /* exit-without-doing-anything flag */ - unsigned char progress; /* progress bar flag */ - unsigned char timer; /* timer flag */ - unsigned char eta; /* ETA flag */ - unsigned char fineta; /* absolute ETA flag */ - unsigned char rate; /* rate counter flag */ - unsigned char average_rate; /* average rate counter flag */ - unsigned char bytes; /* bytes transferred flag */ - unsigned char bufpercent; /* transfer buffer percentage flag */ + bool do_nothing; /* exit-without-doing-anything flag */ + bool progress; /* progress bar flag */ + bool timer; /* timer flag */ + bool eta; /* ETA flag */ + bool fineta; /* absolute ETA flag */ + bool rate; /* rate counter flag */ + bool average_rate; /* average rate counter flag */ + bool bytes; /* bytes transferred flag */ + bool bufpercent; /* transfer buffer percentage flag */ unsigned int lastwritten; /* show N bytes last written */ - unsigned char force; /* force-if-not-terminal flag */ - unsigned char cursor; /* whether to use cursor positioning */ - unsigned char numeric; /* numeric output only */ - unsigned char wait; /* wait for transfer before display */ - unsigned char linemode; /* count lines instead of bytes */ - unsigned char null; /* lines are null-terminated */ - unsigned char no_op; /* do nothing other than pipe data */ + bool force; /* force-if-not-terminal flag */ + bool cursor; /* whether to use cursor positioning */ + bool numeric; /* numeric output only */ + bool wait; /* wait for transfer before display */ + bool linemode; /* count lines instead of bytes */ + bool null; /* lines are null-terminated */ + bool no_op; /* do nothing other than pipe data */ unsigned long long rate_limit; /* rate limit, in bytes per second */ unsigned long long buffer_size;/* buffer size, in bytes (0=default) */ unsigned int remote; /* PID of pv to update settings of */ unsigned long long size; /* total size of data */ - unsigned char no_splice; /* flag set if never to use splice */ - unsigned char skip_errors; /* skip read errors flag */ - unsigned char stop_at_size; /* set if we stop at "size" bytes */ + bool no_splice; /* flag set if never to use splice */ + unsigned int skip_errors; /* skip read errors counter */ + bool stop_at_size; /* set if we stop at "size" bytes */ double interval; /* interval between updates */ double delay_start; /* delay before first display */ unsigned int watch_pid; /* process to watch fds of */ diff --git a/src/include/pv-internal.h b/src/include/pv-internal.h index 46d7496..db65eaa 100644 --- a/src/include/pv-internal.h +++ b/src/include/pv-internal.h @@ -58,16 +58,16 @@ struct pvstate_s { /******************* * Program control * *******************/ - unsigned char force; /* display even if not on terminal */ - unsigned char cursor; /* use cursor positioning */ - unsigned char numeric; /* numeric output only */ - unsigned char wait; /* wait for data before display */ - unsigned char linemode; /* count lines instead of bytes */ - unsigned char null; /* lines are null-terminated */ - unsigned char no_op; /* do nothing other than pipe data */ - unsigned char skip_errors; /* skip read errors flag */ - unsigned char stop_at_size; /* set if we stop at "size" bytes */ - unsigned char no_splice; /* never use splice() */ + bool force; /* display even if not on terminal */ + bool cursor; /* use cursor positioning */ + bool numeric; /* numeric output only */ + bool wait; /* wait for data before display */ + bool linemode; /* count lines instead of bytes */ + bool null; /* lines are null-terminated */ + bool no_op; /* do nothing other than pipe data */ + unsigned int skip_errors; /* skip read errors counter */ + bool stop_at_size; /* set if we stop at "size" bytes */ + bool no_splice; /* never use splice() */ unsigned long long rate_limit; /* rate limit, in bytes per second */ unsigned long long target_buffer_size; /* buffer size (0=default) */ unsigned long long size; /* total size of data */ @@ -135,7 +135,7 @@ struct pvstate_s { const char *string; int length; } format[100]; - unsigned char display_visible; /* set once anything written to terminal */ + bool display_visible; /* set once anything written to terminal */ /******************** * Cursor/IPC state * @@ -147,8 +147,8 @@ struct pvstate_s { int *crs_y_top; /* pointer to Y coord of topmost `pv' */ int crs_y_lastread; /* last value of _y_top seen */ int crs_y_offset; /* our Y offset from this top position */ - int crs_needreinit; /* set if we need to reinit cursor pos */ - int crs_noipc; /* set if we can't use IPC */ + int crs_needreinit; /* counter if we need to reinit cursor pos */ + bool crs_noipc; /* set if we can't use IPC */ #endif /* HAVE_IPC */ int crs_lock_fd; /* fd of lockfile, -1 if none open */ char crs_lock_file[1024]; diff --git a/src/include/pv.h b/src/include/pv.h index 7a3970c..cde7d08 100644 --- a/src/include/pv.h +++ b/src/include/pv.h @@ -34,14 +34,14 @@ typedef enum { extern double pv_getnum_d(const char *); /* - * Return the given string converted to an integer. + * Return the given string converted to an unsigned integer. */ -extern int pv_getnum_i(const char *); +extern unsigned int pv_getnum_ui(const char *); /* - * Return the given string converted to a long long. + * Return the given string converted to an unsigned long long. */ -extern long long pv_getnum_ll(const char *); +extern unsigned long long pv_getnum_ull(const char *); /* * Return zero if the given string is a number of the given type. NB an @@ -61,30 +61,30 @@ extern pvstate_t pv_state_alloc(const char *); /* * Set the formatting string, given a set of old-style formatting options. */ -extern void pv_state_set_format(pvstate_t state, unsigned char progress, - unsigned char timer, unsigned char eta, - unsigned char fineta, unsigned char rate, - unsigned char average_rate, unsigned char bytes, - unsigned char bufpercent, +extern void pv_state_set_format(pvstate_t state, bool progress, + bool timer, bool eta, + bool fineta, bool rate, + bool average_rate, bool bytes, + bool bufpercent, unsigned int lastwritten, const char *name); /* * Set the various options. */ -extern void pv_state_force_set(pvstate_t, unsigned char); -extern void pv_state_cursor_set(pvstate_t, unsigned char); -extern void pv_state_numeric_set(pvstate_t, unsigned char); -extern void pv_state_wait_set(pvstate_t, unsigned char); +extern void pv_state_force_set(pvstate_t, bool); +extern void pv_state_cursor_set(pvstate_t, bool); +extern void pv_state_numeric_set(pvstate_t, bool); +extern void pv_state_wait_set(pvstate_t, bool); extern void pv_state_delay_start_set(pvstate_t, double); -extern void pv_state_linemode_set(pvstate_t, unsigned char); -extern void pv_state_null_set(pvstate_t, unsigned char); -extern void pv_state_no_op_set(pvstate_t, unsigned char); -extern void pv_state_skip_errors_set(pvstate_t, unsigned char); -extern void pv_state_stop_at_size_set(pvstate_t, unsigned char); +extern void pv_state_linemode_set(pvstate_t, bool); +extern void pv_state_null_set(pvstate_t, bool); +extern void pv_state_no_op_set(pvstate_t, bool); +extern void pv_state_skip_errors_set(pvstate_t, unsigned int); +extern void pv_state_stop_at_size_set(pvstate_t, bool); extern void pv_state_rate_limit_set(pvstate_t, unsigned long long); extern void pv_state_target_buffer_size_set(pvstate_t, unsigned long long); -extern void pv_state_no_splice_set(pvstate_t, unsigned char); +extern void pv_state_no_splice_set(pvstate_t, bool); extern void pv_state_size_set(pvstate_t, unsigned long long); extern void pv_state_interval_set(pvstate_t, double); extern void pv_state_width_set(pvstate_t, unsigned int); @@ -96,6 +96,11 @@ extern void pv_state_watch_fd_set(pvstate_t, int); extern void pv_state_inputfiles(pvstate_t, int, const char **); +/* + * Work out whether we are in the foreground. + */ +extern bool pv_in_foreground(void); + /* * Work out the terminal size. */ diff --git a/src/main/debug.c b/src/main/debug.c index 3ac005a..3c1a21e 100644 --- a/src/main/debug.c +++ b/src/main/debug.c @@ -23,7 +23,7 @@ void debugging_output(const char *function, const char *file, int line, const char *format, ...) { - static int tried_open = 0; + static bool tried_open = false; static FILE *debugfptr = NULL; char *debugfile; va_list ap; @@ -31,30 +31,31 @@ void debugging_output(const char *function, const char *file, int line, struct tm *tm; char tbuf[128]; - if (0 == tried_open) { + if (false == tried_open) { debugfile = getenv("DEBUG"); if (NULL != debugfile) debugfptr = fopen(debugfile, "a"); - tried_open = 1; + tried_open = true; } if (NULL == debugfptr) return; - time(&t); + (void) time(&t); tm = localtime(&t); - tbuf[0] = 0; - strftime(tbuf, sizeof(tbuf), "%Y-%m-%d %H:%M:%S", tm); + tbuf[0] = '\0'; + if (0 == strftime(tbuf, sizeof(tbuf), "%Y-%m-%d %H:%M:%S", tm)) + tbuf[0] = '\0'; - fprintf(debugfptr, "[%s] (%d) %s (%s:%d): ", tbuf, getpid(), - function, file, line); + (void) fprintf(debugfptr, "[%s] (%d) %s (%s:%d): ", tbuf, getpid(), + function, file, line); va_start(ap, format); - vfprintf(debugfptr, format, ap); + (void) vfprintf(debugfptr, format, ap); va_end(ap); - fprintf(debugfptr, "\n"); - fflush(debugfptr); + (void) fprintf(debugfptr, "\n"); + (void) fflush(debugfptr); } #else /* ! ENABLE_DEBUGGING */ @@ -62,7 +63,10 @@ void debugging_output(const char *function, const char *file, int line, /* * Stub debugging output function. */ -void debugging_output(const char *function, const char *file, int line, +void debugging_output( __attribute__ ((unused)) + const char *function, __attribute__ ((unused)) + const char *file, __attribute__ ((unused)) + int line, __attribute__ ((unused)) const char *format, ...) { } diff --git a/src/main/help.c b/src/main/help.c index d33bdec..2ebab41 100644 --- a/src/main/help.c +++ b/src/main/help.c @@ -103,7 +103,7 @@ void display_help(void) N_("show version information and exit")}, {0, 0, 0, 0} }; - int i, col1max = 0, tw = 77; + unsigned int i, col1max = 0, tw = 77; char *optbuf; printf(_("Usage: %s [OPTION] [FILE]..."), PROGRAM_NAME); @@ -113,13 +113,14 @@ void display_help(void) "with monitoring.")); for (i = 0; optlist[i].optshort; i++) { - int width = 0; + unsigned int width = 0; char *param; - width = 2 + strlen(optlist[i].optshort); + width = 2 + (unsigned int) strlen(optlist[i].optshort); #ifdef HAVE_GETOPT_LONG if (optlist[i].optlong) - width += 2 + strlen(optlist[i].optlong); + width += + 2 + (unsigned int) strlen(optlist[i].optlong); #endif param = optlist[i].param; if (param) @@ -133,10 +134,10 @@ void display_help(void) col1max++; - optbuf = malloc(col1max + 16); + optbuf = malloc((size_t) (col1max + 16)); if (NULL == optbuf) { fprintf(stderr, "%s: %s\n", PROGRAM_NAME, strerror(errno)); - exit(1); + exit(EXIT_FAILURE); } for (i = 0; optlist[i].optshort; i++) { @@ -145,7 +146,7 @@ void display_help(void) char *start; char *end; - if (0 == optlist[i].optshort[0]) { + if ('\0' == optlist[i].optshort[0]) { printf("\n"); continue; } @@ -157,7 +158,12 @@ void display_help(void) if (description) description = _(description); +#ifdef HAVE_SNPRINTF + (void) snprintf(optbuf, (size_t) (col1max + 15), + "%s%s%s%s%s", optlist[i].optshort, +#else sprintf(optbuf, "%s%s%s%s%s", optlist[i].optshort, +#endif #ifdef HAVE_GETOPT_LONG optlist[i].optlong ? ", " : "", optlist[i].optlong ? optlist[i].optlong : "", @@ -166,7 +172,7 @@ void display_help(void) #endif param ? " " : "", param ? param : ""); - printf(" %-*s ", col1max - 2, optbuf); + printf(" %-*s ", (int) (col1max - 2), optbuf); if (NULL == description) { printf("\n"); @@ -175,7 +181,7 @@ void display_help(void) start = description; - while (strlen(start) > tw - col1max) { + while ((unsigned int) strlen(start) > tw - col1max) { end = start + tw - col1max; while ((end > start) && (end[0] != ' ')) end--; @@ -185,7 +191,7 @@ void display_help(void) end++; } printf("%.*s\n%*s ", (int) (end - start), start, - col1max, ""); + (int) col1max, ""); if (end == start) end++; start = end; diff --git a/src/main/main.c b/src/main/main.c index 24366ee..75fbae2 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -35,12 +35,13 @@ int main(int argc, char **argv) struct termios t, t_save; opts_t opts; pvstate_t state; + bool t_saved, t_needs_reset; int retcode = 0; #ifdef ENABLE_NLS - setlocale(LC_ALL, ""); - bindtextdomain(PACKAGE, LOCALEDIR); - textdomain(PACKAGE); + (void) setlocale(LC_ALL, ""); + (void) bindtextdomain(PACKAGE, LOCALEDIR); + (void) textdomain(PACKAGE); #endif opts = opts_parse(argc, argv); @@ -90,7 +91,10 @@ int main(int argc, char **argv) return 1; } fprintf(pidfptr, "%d\n", getpid()); - fclose(pidfptr); + if (0 != fclose(pidfptr)) { + fprintf(stderr, "%s: %s: %s\n", opts->program_name, + opts->pidfile, strerror(errno)); + } } /* @@ -112,7 +116,7 @@ int main(int argc, char **argv) * If no size was given, and we're not in line mode, try to * calculate the total size. */ - if ((0 == opts->size) && (0 == opts->linemode)) { + if ((0 == opts->size) && (false == opts->linemode)) { opts->size = pv_calc_total_size(state); debug("%s: %llu", "no size given - calculated", opts->size); @@ -122,7 +126,7 @@ int main(int argc, char **argv) * If the size is unknown, we cannot have an ETA. */ if (opts->size < 1) { - opts->eta = 0; + opts->eta = false; debug("%s", "size unknown - ETA disabled"); } } @@ -132,9 +136,9 @@ int main(int argc, char **argv) * outputting numerically, we will have nothing to display at all. */ if ((0 == isatty(STDERR_FILENO)) - && (0 == opts->force) - && (0 == opts->numeric)) { - opts->no_op = 1; + && (false == opts->force) + && (false == opts->numeric)) { + opts->no_op = true; debug("%s", "nothing to display - setting no_op"); } @@ -219,6 +223,13 @@ int main(int argc, char **argv) O_NONBLOCK | fcntl(STDOUT_FILENO, F_GETFL)); #endif /* MAKE_STDOUT_NONBLOCKING */ + /* + * Keep track of whether we've saved the terminal attributes and + * whether we need to reset them at the end. + */ + t_saved = false; + t_needs_reset = false; + /* * Set terminal option TOSTOP so we get signal SIGTTOU if we try to * write to the terminal while backgrounded. @@ -226,25 +237,56 @@ int main(int argc, char **argv) * Also, save the current terminal attributes for later restoration. */ memset(&t, 0, sizeof(t)); - tcgetattr(STDERR_FILENO, &t); + if (0 != isatty(STDERR_FILENO)) { + if (0 == tcgetattr(STDERR_FILENO, &t)) { + debug("%s", "saved terminal attributes"); + t_saved = true; + } else { + fprintf(stderr, "%s: %s: %s\n", opts->program_name, + _("failed to read terminal attributes"), + strerror(errno)); + } + } t_save = t; - t.c_lflag |= TOSTOP; - tcsetattr(STDERR_FILENO, TCSANOW, &t); + if (t_saved && pv_in_foreground()) { + t.c_lflag |= TOSTOP; + (void) tcsetattr(STDERR_FILENO, TCSANOW, &t); + t_needs_reset = true; + debug("%s", "set terminal TOSTOP attribute"); + } if (0 != opts->watch_pid) { if (0 <= opts->watch_fd) { pv_sig_init(state); retcode = pv_watchfd_loop(state); - tcsetattr(STDERR_FILENO, TCSANOW, &t_save); - if (opts->pidfile != NULL) - remove(opts->pidfile); + if (t_needs_reset && pv_in_foreground()) { + (void) tcsetattr(STDERR_FILENO, TCSANOW, + &t_save); + } + if (opts->pidfile != NULL) { + if (0 != remove(opts->pidfile)) { + fprintf(stderr, "%s: %s: %s\n", + opts->program_name, + opts->pidfile, + strerror(errno)); + } + } pv_sig_fini(state); } else { pv_sig_init(state); retcode = pv_watchpid_loop(state); - tcsetattr(STDERR_FILENO, TCSANOW, &t_save); - if (opts->pidfile != NULL) - remove(opts->pidfile); + if (t_needs_reset && pv_in_foreground()) { + (void) tcsetattr(STDERR_FILENO, TCSANOW, + &t_save); + } + if (opts->pidfile != NULL) { + if (0 != remove(opts->pidfile)) { + fprintf(stderr, "%s: %s: %s\n", + opts->program_name, + opts->pidfile, + strerror(errno)); + } + } pv_sig_fini(state); } } else { @@ -252,9 +294,16 @@ int main(int argc, char **argv) pv_remote_init(); retcode = pv_main_loop(state); pv_remote_fini(); - tcsetattr(STDERR_FILENO, TCSANOW, &t_save); - if (opts->pidfile != NULL) - remove(opts->pidfile); + if (t_needs_reset && pv_in_foreground()) { + (void) tcsetattr(STDERR_FILENO, TCSANOW, &t_save); + } + if (opts->pidfile != NULL) { + if (0 != remove(opts->pidfile)) { + fprintf(stderr, "%s: %s: %s\n", + opts->program_name, opts->pidfile, + strerror(errno)); + } + } pv_sig_fini(state); } diff --git a/src/main/options.c b/src/main/options.c index 847d63c..0d370ed 100644 --- a/src/main/options.c +++ b/src/main/options.c @@ -27,7 +27,7 @@ void opts_free(opts_t opts) { if (!opts) return; - if (opts->argv) + if (NULL != opts->argv) free(opts->argv); free(opts); } @@ -47,40 +47,40 @@ opts_t opts_parse(int argc, char **argv) { #ifdef HAVE_GETOPT_LONG struct option long_options[] = { - {"help", 0, 0, 'h'}, - {"version", 0, 0, 'V'}, - {"progress", 0, 0, 'p'}, - {"timer", 0, 0, 't'}, - {"eta", 0, 0, 'e'}, - {"fineta", 0, 0, 'I'}, - {"rate", 0, 0, 'r'}, - {"average-rate", 0, 0, 'a'}, - {"bytes", 0, 0, 'b'}, - {"buffer-percent", 0, 0, 'T'}, - {"last-written", 1, 0, 'A'}, - {"force", 0, 0, 'f'}, - {"numeric", 0, 0, 'n'}, - {"quiet", 0, 0, 'q'}, - {"cursor", 0, 0, 'c'}, - {"wait", 0, 0, 'W'}, - {"delay-start", 1, 0, 'D'}, - {"size", 1, 0, 's'}, - {"line-mode", 0, 0, 'l'}, - {"null", 0, 0, '0'}, - {"interval", 1, 0, 'i'}, - {"width", 1, 0, 'w'}, - {"height", 1, 0, 'H'}, - {"name", 1, 0, 'N'}, - {"format", 1, 0, 'F'}, - {"rate-limit", 1, 0, 'L'}, - {"buffer-size", 1, 0, 'B'}, - {"no-splice", 0, 0, 'C'}, - {"skip-errors", 0, 0, 'E'}, - {"stop-at-size", 0, 0, 'S'}, - {"remote", 1, 0, 'R'}, - {"pidfile", 1, 0, 'P'}, - {"watchfd", 1, 0, 'd'}, - {0, 0, 0, 0} + {"help", 0, NULL, (int) 'h'}, + {"version", 0, NULL, (int) 'V'}, + {"progress", 0, NULL, (int) 'p'}, + {"timer", 0, NULL, (int) 't'}, + {"eta", 0, NULL, (int) 'e'}, + {"fineta", 0, NULL, (int) 'I'}, + {"rate", 0, NULL, (int) 'r'}, + {"average-rate", 0, NULL, (int) 'a'}, + {"bytes", 0, NULL, (int) 'b'}, + {"buffer-percent", 0, NULL, (int) 'T'}, + {"last-written", 1, NULL, (int) 'A'}, + {"force", 0, NULL, (int) 'f'}, + {"numeric", 0, NULL, (int) 'n'}, + {"quiet", 0, NULL, (int) 'q'}, + {"cursor", 0, NULL, (int) 'c'}, + {"wait", 0, NULL, (int) 'W'}, + {"delay-start", 1, NULL, (int) 'D'}, + {"size", 1, NULL, (int) 's'}, + {"line-mode", 0, NULL, (int) 'l'}, + {"null", 0, NULL, (int) '0'}, + {"interval", 1, NULL, (int) 'i'}, + {"width", 1, NULL, (int) 'w'}, + {"height", 1, NULL, (int) 'H'}, + {"name", 1, NULL, (int) 'N'}, + {"format", 1, NULL, (int) 'F'}, + {"rate-limit", 1, NULL, (int) 'L'}, + {"buffer-size", 1, NULL, (int) 'B'}, + {"no-splice", 0, NULL, (int) 'C'}, + {"skip-errors", 0, NULL, (int) 'E'}, + {"stop-at-size", 0, NULL, (int) 'S'}, + {"remote", 1, NULL, (int) 'R'}, + {"pidfile", 1, NULL, (int) 'P'}, + {"watchfd", 1, NULL, (int) 'd'}, + {NULL, 0, NULL, 0} }; int option_index = 0; #endif @@ -94,28 +94,25 @@ opts_t opts_parse(int argc, char **argv) opts = calloc(1, sizeof(*opts)); if (!opts) { - fprintf(stderr, - _("%s: option structure allocation failed (%s)"), - argv[0], strerror(errno)); - fprintf(stderr, "\n"); - return 0; + fprintf(stderr, "%s: %s: %s\n", argv[0], + _("option structure allocation failed"), + strerror(errno)); + return NULL; } opts->program_name = argv[0]; ptr = strrchr(opts->program_name, '/'); if (NULL != ptr) - opts->program_name = &(ptr[1]); + opts->program_name = 1 + ptr; opts->argc = 0; - opts->argv = calloc(argc + 1, sizeof(char *)); - if (!opts->argv) { - fprintf(stderr, - _ - ("%s: option structure argv allocation failed (%s)"), - opts->program_name, strerror(errno)); - fprintf(stderr, "\n"); + opts->argv = calloc((size_t) (argc + 1), sizeof(char *)); + if (NULL == opts->argv) { + fprintf(stderr, "%s: %s: %s\n", opts->program_name, + _("option structure argv allocation failed"), + strerror(errno)); opts_free(opts); - return 0; + return NULL; } numopts = 0; @@ -153,7 +150,7 @@ opts_t opts_parse(int argc, char **argv) opts->program_name, c, _("integer argument expected")); opts_free(opts); - return 0; + return NULL; } break; case 'i': @@ -164,7 +161,7 @@ opts_t opts_parse(int argc, char **argv) opts->program_name, c, _("numeric argument expected")); opts_free(opts); - return 0; + return NULL; } break; case 'd': @@ -175,14 +172,14 @@ opts_t opts_parse(int argc, char **argv) _ ("process ID or pid:fd pair expected")); opts_free(opts); - return 0; + return NULL; } if (check_pid < 1) { fprintf(stderr, "%s: -%c: %s\n", opts->program_name, c, _("invalid process ID")); opts_free(opts); - return 0; + return NULL; } break; default: @@ -195,109 +192,110 @@ opts_t opts_parse(int argc, char **argv) switch (c) { case 'h': display_help(); - opts->do_nothing = 1; - return opts; - break; + opts->do_nothing = true; + return opts; /* early return */ case 'V': display_version(); - opts->do_nothing = 1; - return opts; - break; + opts->do_nothing = true; + return opts; /* early return */ case 'p': - opts->progress = 1; + opts->progress = true; numopts++; break; case 't': - opts->timer = 1; + opts->timer = true; numopts++; break; case 'I': - opts->fineta = 1; + opts->fineta = true; numopts++; break; case 'e': - opts->eta = 1; + opts->eta = true; numopts++; break; case 'r': - opts->rate = 1; + opts->rate = true; numopts++; break; case 'a': - opts->average_rate = 1; + opts->average_rate = true; numopts++; break; case 'b': - opts->bytes = 1; + opts->bytes = true; numopts++; break; case 'T': - opts->bufpercent = 1; + opts->bufpercent = true; numopts++; + opts->no_splice = true; break; case 'A': - opts->lastwritten = pv_getnum_i(optarg); + opts->lastwritten = pv_getnum_ui(optarg); numopts++; + opts->no_splice = true; break; case 'f': - opts->force = 1; + opts->force = true; break; case 'n': - opts->numeric = 1; + opts->numeric = true; numopts++; break; case 'q': - opts->no_op = 1; + opts->no_op = true; numopts++; break; case 'c': - opts->cursor = 1; + opts->cursor = true; break; case 'W': - opts->wait = 1; + opts->wait = true; break; case 'D': opts->delay_start = pv_getnum_d(optarg); break; case 's': - opts->size = pv_getnum_ll(optarg); + opts->size = pv_getnum_ull(optarg); break; case 'l': - opts->linemode = 1; + opts->linemode = true; break; case '0': - opts->null = 1; - opts->linemode = 1; + opts->null = true; + opts->linemode = true; break; case 'i': opts->interval = pv_getnum_d(optarg); break; case 'w': - opts->width = pv_getnum_i(optarg); + opts->width = pv_getnum_ui(optarg); break; case 'H': - opts->height = pv_getnum_i(optarg); + opts->height = pv_getnum_ui(optarg); break; case 'N': opts->name = optarg; break; case 'L': - opts->rate_limit = pv_getnum_ll(optarg); + opts->rate_limit = pv_getnum_ull(optarg); break; case 'B': - opts->buffer_size = pv_getnum_ll(optarg); + opts->buffer_size = pv_getnum_ull(optarg); + opts->no_splice = true; break; case 'C': - opts->no_splice = 1; + opts->no_splice = true; break; case 'E': opts->skip_errors++; break; case 'S': - opts->stop_at_size = 1; + opts->stop_at_size = true; break; case 'R': - opts->remote = pv_getnum_i(optarg); + opts->remote = pv_getnum_ui(optarg); break; case 'P': opts->pidfile = optarg; @@ -308,8 +306,9 @@ opts_t opts_parse(int argc, char **argv) case 'd': opts->watch_pid = 0; opts->watch_fd = -1; - sscanf(optarg, "%u:%d", &(opts->watch_pid), - &(opts->watch_fd)); + /* No syntax check here, already done earlier */ + (void) sscanf(optarg, "%u:%d", &(opts->watch_pid), + &(opts->watch_fd)); break; default: #ifdef HAVE_GETOPT_LONG @@ -323,8 +322,7 @@ opts_t opts_parse(int argc, char **argv) #endif fprintf(stderr, "\n"); opts_free(opts); - return 0; - break; + return NULL; /* early return */ } } while (c != -1); @@ -333,53 +331,43 @@ opts_t opts_parse(int argc, char **argv) if (opts->linemode || opts->null || opts->stop_at_size || (opts->skip_errors > 0) || (opts->buffer_size > 0) || (opts->rate_limit > 0)) { - fprintf(stderr, + fprintf(stderr, "%s: %s\n", opts->program_name, _ - ("%s: cannot use line mode or transfer modifier options when watching file descriptors"), - opts->program_name); - fprintf(stderr, "\n"); + ("cannot use line mode or transfer modifier options when watching file descriptors")); opts_free(opts); - return 0; + return NULL; } if (opts->cursor) { - fprintf(stderr, + fprintf(stderr, "%s: %s\n", opts->program_name, _ - ("%s: cannot use cursor positioning when watching file descriptors"), - opts->program_name); - fprintf(stderr, "\n"); + ("cannot use cursor positioning when watching file descriptors")); opts_free(opts); - return 0; + return NULL; } if (0 != opts->remote) { - fprintf(stderr, + fprintf(stderr, "%s: %s\n", opts->program_name, _ - ("%s: cannot use remote control when watching file descriptors"), - opts->program_name); - fprintf(stderr, "\n"); + ("cannot use remote control when watching file descriptors")); opts_free(opts); - return 0; + return NULL; } if (optind < argc) { - fprintf(stderr, + fprintf(stderr, "%s: %s\n", opts->program_name, _ - ("%s: cannot transfer files when watching file descriptors"), - opts->program_name); - fprintf(stderr, "\n"); + ("cannot transfer files when watching file descriptors")); opts_free(opts); - return 0; + return NULL; } if (0 != access("/proc/self/fdinfo", X_OK)) { - fprintf(stderr, + fprintf(stderr, "%s: -d: %s\n", opts->program_name, _ - ("%s: -d: not available on systems without /proc/self/fdinfo"), - opts->program_name); - fprintf(stderr, "\n"); + ("not available on systems without /proc/self/fdinfo")); opts_free(opts); - return 0; + return NULL; } } @@ -387,11 +375,11 @@ opts_t opts_parse(int argc, char **argv) * Default options: -pterb */ if (0 == numopts) { - opts->progress = 1; - opts->timer = 1; - opts->eta = 1; - opts->rate = 1; - opts->bytes = 1; + opts->progress = true; + opts->timer = true; + opts->eta = true; + opts->rate = true; + opts->bytes = true; } /* diff --git a/src/main/remote.c b/src/main/remote.c index 4d90b1c..4d8d7a7 100644 --- a/src/main/remote.c +++ b/src/main/remote.c @@ -25,14 +25,14 @@ #ifdef HAVE_IPC struct remote_msg { long mtype; - unsigned char progress; /* progress bar flag */ - unsigned char timer; /* timer flag */ - unsigned char eta; /* ETA flag */ - unsigned char fineta; /* absolute ETA flag */ - unsigned char rate; /* rate counter flag */ - unsigned char average_rate; /* average rate counter flag */ - unsigned char bytes; /* bytes transferred flag */ - unsigned char bufpercent; /* transfer buffer percentage flag */ + bool progress; /* progress bar flag */ + bool timer; /* timer flag */ + bool eta; /* ETA flag */ + bool fineta; /* absolute ETA flag */ + bool rate; /* rate counter flag */ + bool average_rate; /* average rate counter flag */ + bool bytes; /* bytes transferred flag */ + bool bufpercent; /* transfer buffer percentage flag */ unsigned int lastwritten; /* last-written bytes count */ unsigned long long rate_limit; /* rate limit, in bytes per second */ unsigned long long buffer_size; /* buffer size, in bytes (0=default) */ @@ -59,14 +59,12 @@ static int remote__msgid = -1; */ static key_t remote__genkey(void) { - int uid; + uid_t uid; key_t key; uid = geteuid(); - if (uid < 0) - uid = 0; - key = ftok("/tmp", 'P') | uid; + key = ftok("/tmp", (int) 'P') | uid; return key; } @@ -79,7 +77,7 @@ static key_t remote__genkey(void) static int remote__msgget(void) { /* Catch SIGSYS in case msgget() raises it, so we get ENOSYS */ - signal(SIGSYS, SIG_IGN); + (void) signal(SIGSYS, SIG_IGN); return msgget(remote__genkey(), IPC_CREAT | 0600); } @@ -97,13 +95,13 @@ int pv_remote_set(opts_t opts) struct msqid_ds qbuf; long timeout; int msgid; - long initial_qnum; + unsigned long initial_qnum; /* * Check that the remote process exists. */ - if (kill(opts->remote, 0) != 0) { - fprintf(stderr, "%s: %d: %s\n", opts->program_name, + if (kill((pid_t) (opts->remote), 0) != 0) { + fprintf(stderr, "%s: %u: %s\n", opts->program_name, opts->remote, strerror(errno)); return 1; } @@ -111,15 +109,15 @@ int pv_remote_set(opts_t opts) /* * Make sure parameters are within sensible bounds. */ - if (opts->width < 0) + if (opts->width < 1) opts->width = 80; - if (opts->height < 0) + if (opts->height < 1) opts->height = 25; if (opts->width > 999999) opts->width = 999999; if (opts->height > 999999) opts->height = 999999; - if ((opts->interval != 0) && (opts->interval < 0.1)) + if ((opts->interval > 0) && (opts->interval < 0.1)) opts->interval = 0.1; if (opts->interval > 600) opts->interval = 600; @@ -128,7 +126,7 @@ int pv_remote_set(opts_t opts) * Copy parameters into message buffer. */ memset(&msgbuf, 0, sizeof(msgbuf)); - msgbuf.mtype = opts->remote; + msgbuf.mtype = (long) (opts->remote); msgbuf.progress = opts->progress; msgbuf.timer = opts->timer; msgbuf.eta = opts->eta; @@ -159,6 +157,7 @@ int pv_remote_set(opts_t opts) return 1; } + memset(&qbuf, 0, sizeof(qbuf)); if (msgctl(msgid, IPC_STAT, &qbuf) < 0) { fprintf(stderr, "%s: %s\n", opts->program_name, strerror(errno)); @@ -178,14 +177,16 @@ int pv_remote_set(opts_t opts) while (timeout > 10000) { struct timeval tv; + memset(&tv, 0, sizeof(tv)); tv.tv_sec = 0; tv.tv_usec = 10000; - select(0, NULL, NULL, NULL, &tv); + (void) select(0, NULL, NULL, NULL, &tv); timeout -= 10000; /* * If we can't stat the queue, it must have been deleted. */ + memset(&qbuf, 0, sizeof(qbuf)); if (msgctl(msgid, IPC_STAT, &qbuf) < 0) break; @@ -201,20 +202,22 @@ int pv_remote_set(opts_t opts) /* * Message not received - delete it. */ + memset(&qbuf, 0, sizeof(qbuf)); if (msgctl(msgid, IPC_STAT, &qbuf) >= 0) { - msgrcv(msgid, &msgbuf, sizeof(msgbuf) - sizeof(long), - opts->remote, IPC_NOWAIT); + (void) msgrcv(msgid, &msgbuf, + sizeof(msgbuf) - sizeof(long), + (long) (opts->remote), IPC_NOWAIT); /* * If this leaves nothing on the queue, remove the * queue, in case we created one for no reason. */ if (msgctl(msgid, IPC_STAT, &qbuf) >= 0) { if (qbuf.msg_qnum < 1) - msgctl(msgid, IPC_RMID, &qbuf); + (void) msgctl(msgid, IPC_RMID, &qbuf); } } - fprintf(stderr, "%s: %d: %s\n", opts->program_name, opts->remote, + fprintf(stderr, "%s: %u: %s\n", opts->program_name, opts->remote, _("message not received")); return 1; } @@ -230,7 +233,7 @@ int pv_remote_set(opts_t opts) void pv_remote_check(pvstate_t state) { struct remote_msg msgbuf; - int got; + ssize_t got; if (remote__msgid < 0) return; @@ -261,7 +264,7 @@ void pv_remote_check(pvstate_t state) msgbuf.average_rate, msgbuf.bytes, msgbuf.bufpercent, msgbuf.lastwritten, - 0 == + '\0' == msgbuf.name[0] ? NULL : strdup(msgbuf.name)); if (msgbuf.rate_limit > 0) @@ -277,7 +280,7 @@ void pv_remote_check(pvstate_t state) pv_state_width_set(state, msgbuf.width); if (msgbuf.height > 0) pv_state_height_set(state, msgbuf.height); - if (msgbuf.format[0] != 0) + if (msgbuf.format[0] != '\0') pv_state_format_string_set(state, strdup(msgbuf.format)); } @@ -298,7 +301,8 @@ void pv_remote_fini(void) { if (remote__msgid >= 0) { struct msqid_ds qbuf; - msgctl(remote__msgid, IPC_RMID, &qbuf); + memset(&qbuf, 0, sizeof(qbuf)); + (void) msgctl(remote__msgid, IPC_RMID, &qbuf); } } diff --git a/src/nls/de.po b/src/nls/de.po index 2b8a2e8..06f6b87 100644 --- a/src/nls/de.po +++ b/src/nls/de.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-30 22:21+0100\n" -"Content-Type: text/plain; charset=iso-8859-15\n" +"POT-Creation-Date: 2021-03-30 23:28+0100\n" +"Content-Type: text/plain; charset=UTF-8\n" "Date: 1999-06-01 15:18:29+0100\n" "From: Andrew Wood \n" "Xgettext-Options: --default-domain=pkgbuild --directory=./.pkgdir --add-" @@ -19,227 +19,6 @@ msgstr "" "nls/intl/textdomain.c src/nls/intl-cat/cat-compat.c src/nls/intl-gett/intl-" "compat.c\n" -#: src/pv/watchpid.c:51 src/pv/watchpid.c:66 src/pv/watchpid.c:76 -#: src/pv/watchpid.c:107 src/pv/loop.c:519 src/pv/loop.c:580 src/pv/loop.c:632 -msgid "pid" -msgstr "" - -#: src/pv/watchpid.c:68 src/pv/watchpid.c:78 src/pv/watchpid.c:109 -msgid "fd" -msgstr "" - -#: src/pv/watchpid.c:112 -msgid "not a regular file or block device" -msgstr "" - -#: src/pv/cursor.c:53 -#, fuzzy -msgid "failed to get terminal name" -msgstr "Terminal konnte nicht geöffnet werden" - -#: src/pv/cursor.c:96 -#, fuzzy -msgid "failed to open lock file" -msgstr "Datei konnte nicht geschlossen werden" - -#: src/pv/cursor.c:129 -msgid "lock attempt failed" -msgstr "" - -#: src/pv/cursor.c:369 -msgid "failed to open terminal" -msgstr "Terminal konnte nicht geöffnet werden" - -#: src/pv/file.c:118 -#, fuzzy -msgid "failed to seek to start of output" -msgstr "Dateiinformationen für Ausgabe-Datei konnten nicht gelesen werden" - -#: src/pv/file.c:214 -msgid "failed to close file" -msgstr "Datei konnte nicht geschlossen werden" - -#: src/pv/file.c:237 -msgid "failed to read file" -msgstr "Datei konnte nicht gelesen werden" - -#: src/pv/file.c:247 -msgid "failed to stat file" -msgstr "Dateiinformationen konnten nicht gelesen werden" - -#: src/pv/file.c:256 -msgid "failed to stat output file" -msgstr "Dateiinformationen für Ausgabe-Datei konnten nicht gelesen werden" - -#: src/pv/file.c:279 -msgid "input file is output file" -msgstr "Eingabe-Datei ist Ausgabe-Datei" - -#: src/pv/display.c:117 -msgid "yzafpnum kMGTPEZY" -msgstr "" - -#: src/pv/display.c:122 -msgid "yzafpnum KMGTPEZY" -msgstr "" - -#: src/pv/display.c:532 src/pv/transfer.c:679 -msgid "buffer allocation failed" -msgstr "Puffer konnte nicht allokiert werden" - -#: src/pv/display.c:592 src/pv/transfer.c:458 -msgid "B" -msgstr "B" - -#: src/pv/display.c:628 src/pv/display.c:636 -msgid "/s" -msgstr "" - -#: src/pv/display.c:628 src/pv/display.c:636 -msgid "B/s" -msgstr "" - -#: src/pv/display.c:671 src/pv/display.c:676 src/pv/display.c:738 -msgid "ETA" -msgstr "ETA" - -#: src/pv/transfer.c:341 -msgid "read failed" -msgstr "read-Aufruf fehlgeschlagen" - -#: src/pv/transfer.c:359 -msgid "warning: read errors detected" -msgstr "" - -#: src/pv/transfer.c:374 -msgid "file is not seekable" -msgstr "" - -#: src/pv/transfer.c:437 -#, fuzzy -msgid "failed to seek past error" -msgstr "Dateiinformationen konnten nicht gelesen werden" - -#: src/pv/transfer.c:456 -msgid "skipped past read error" -msgstr "" - -#: src/pv/transfer.c:631 -msgid "write failed" -msgstr "write-Aufruf fehlgeschlagen" - -#: src/pv/transfer.c:770 -msgid "select call failed" -msgstr "select-Aufruf fehlgeschlagen" - -#: src/pv/state.c:33 -msgid "none" -msgstr "" - -#: src/main/version.c:17 -#, fuzzy, c-format -msgid "%s %s - Copyright %s %s" -msgstr "%s %s - Copyright(C) %s %s" - -#: src/main/version.c:20 -#, c-format -msgid "Web site: %s" -msgstr "Web-Site: %s" - -#: src/main/version.c:23 -msgid "" -"This program is free software, and is being distributed under the\n" -"terms of the Artistic License 2.0." -msgstr "" -"Dieses Programm ist freie Software und wird unter den Bedingungen\n" -"der Artistic License verbreitet." - -#: src/main/version.c:28 -msgid "" -"This program is distributed in the hope that it will be useful,\n" -"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -msgstr "" -"Dieses Programm wird verbreitet unter der Annahme dass es nützlich ist,\n" -"aber OHNE JEGLICHE GARANTIE; insbesondere ohne der impliziten Garantie\n" -"einer MARKTGÄNGIGKEIT oder EIGNUNG ZU EINEM BESTIMMTEN ZWECK." - -#: src/main/main.c:73 -#, fuzzy -msgid "state allocation failed" -msgstr "Puffer konnte nicht allokiert werden" - -#: src/main/options.c:98 -#, c-format -msgid "%s: option structure allocation failed (%s)" -msgstr "%s: `option' konnte nicht allokiert werden (%s)" - -#: src/main/options.c:114 -#, c-format -msgid "%s: option structure argv allocation failed (%s)" -msgstr "%s: `option' (argv) konnte nicht allokiert werden (%s)" - -#: src/main/options.c:154 -msgid "integer argument expected" -msgstr "" - -#: src/main/options.c:165 -msgid "numeric argument expected" -msgstr "" - -#: src/main/options.c:176 -msgid "process ID or pid:fd pair expected" -msgstr "" - -#: src/main/options.c:183 -msgid "invalid process ID" -msgstr "" - -#: src/main/options.c:317 -#, c-format -msgid "Try `%s --help' for more information." -msgstr "`%s --help' zeigt weitere Informationen an." - -#: src/main/options.c:321 -#, fuzzy, c-format -msgid "Try `%s -h' for more information." -msgstr "`%s -h' zeigt weitere Informationen an." - -#: src/main/options.c:338 -#, c-format -msgid "" -"%s: cannot use line mode or transfer modifier options when watching file " -"descriptors" -msgstr "" - -#: src/main/options.c:348 -#, c-format -msgid "%s: cannot use cursor positioning when watching file descriptors" -msgstr "" - -#: src/main/options.c:358 -#, c-format -msgid "%s: cannot use remote control when watching file descriptors" -msgstr "" - -#: src/main/options.c:368 -#, c-format -msgid "%s: cannot transfer files when watching file descriptors" -msgstr "" - -#: src/main/options.c:378 -#, c-format -msgid "%s: -d: not available on systems without /proc/self/fdinfo" -msgstr "" - -#: src/main/remote.c:218 -msgid "message not received" -msgstr "" - -#: src/main/remote.c:324 -msgid "IPC not supported on this system" -msgstr "" - #: src/main/help.c:31 msgid "show progress bar" msgstr "Fortschritts-Anzeige" @@ -253,9 +32,8 @@ msgid "show estimated time of arrival (completion)" msgstr "zeige die erwartete Zeit bis zum Ende an" #: src/main/help.c:38 -#, fuzzy msgid "show absolute estimated time of arrival (completion)" -msgstr "zeige die erwartete Zeit bis zum Ende an" +msgstr "zeige die absolute geschätzte Zeit bis zur Fertigstellung" #: src/main/help.c:40 msgid "show data transfer rate counter" @@ -271,7 +49,7 @@ msgstr "zeige die Anzahl von Bytes, die transferiert worden sind" #: src/main/help.c:46 msgid "show percentage of transfer buffer in use" -msgstr "" +msgstr "zeige, wie viel Prozent des Übertragungsbuffers in Benutzung sind" #: src/main/help.c:47 msgid "NUM" @@ -279,7 +57,7 @@ msgstr "" #: src/main/help.c:48 msgid "show NUM bytes last written" -msgstr "" +msgstr "NUM zeige die zuletzt geschriebenen NUM Bytes" #: src/main/help.c:49 msgid "FORMAT" @@ -287,7 +65,7 @@ msgstr "" #: src/main/help.c:50 msgid "set output format to FORMAT" -msgstr "" +msgstr "setze das Ausgabeformat auf FORMAT" #: src/main/help.c:52 msgid "output percentages, not visual information" @@ -295,20 +73,19 @@ msgstr "Ausgabe von Prozent-Angaben statt visueller Darstellung" #: src/main/help.c:54 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:57 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:58 src/main/help.c:66 msgid "SEC" msgstr "" #: src/main/help.c:59 -#, fuzzy msgid "display nothing until SEC seconds have passed" -msgstr "keine Ausgabe bevor das erste Byte übertragen wurde" +msgstr "SEC nichts anzeigen, bis SEC Sekunden vergangen sind" #: src/main/help.c:60 msgid "SIZE" @@ -316,15 +93,15 @@ msgstr "" #: src/main/help.c:61 msgid "set estimated data size to SIZE bytes" -msgstr "setze erwartete Daten-Länge auf SIZE Byte" +msgstr "setze erwartete Datenlänge auf SIZE Byte" #: src/main/help.c:63 msgid "count lines instead of bytes" -msgstr "" +msgstr "zähle Zeilen anstelle von Bytes" #: src/main/help.c:65 msgid "lines are null-terminated" -msgstr "" +msgstr "Zeilen sind nullterminiert" #: src/main/help.c:67 msgid "update every SEC seconds" @@ -344,7 +121,7 @@ msgstr "" #: src/main/help.c:71 msgid "assume terminal is HEIGHT rows high" -msgstr "setze Terminal-Breite auf WIDTH Zeichen" +msgstr "setze Terminal-Höhe auf HEIGHT Zeichen" #: src/main/help.c:72 msgid "NAME" @@ -352,7 +129,7 @@ msgstr "" #: src/main/help.c:73 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:75 msgid "output even if standard error is not a terminal" @@ -369,7 +146,7 @@ msgstr "" #: src/main/help.c:80 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:81 msgid "BYTES" @@ -377,20 +154,19 @@ msgstr "" #: src/main/help.c:82 msgid "use a buffer size of BYTES" -msgstr "" +msgstr "BYTES benutze einen Puffer in der Größe von BYTES" #: src/main/help.c:84 msgid "never use splice(), always use read/write" -msgstr "" +msgstr "anstelle von splice() immer read/write benutzen" #: src/main/help.c:86 msgid "skip read errors in input" -msgstr "" +msgstr "Lesefehler in der Eingabe nicht beachten" #: src/main/help.c:88 -#, fuzzy msgid "stop after --size bytes have been transferred" -msgstr "zeige die Anzahl von Bytes, die transferiert worden sind" +msgstr "anhalten, nachdem --size Bytes übertragen wurden" #: src/main/help.c:90 msgid "PID" @@ -398,7 +174,7 @@ msgstr "" #: src/main/help.c:91 msgid "update settings of process PID" -msgstr "" +msgstr "Einstellungen der Prozess-PID updaten" #: src/main/help.c:94 msgid "FILE" @@ -406,7 +182,7 @@ msgstr "" #: src/main/help.c:95 msgid "save process ID in FILE" -msgstr "" +msgstr "Prozess-ID in FILE speichern" #: src/main/help.c:97 msgid "PID[:FD]" @@ -414,7 +190,7 @@ msgstr "" #: src/main/help.c:98 msgid "watch file FD opened by process PID" -msgstr "" +msgstr "die vom Prozess PID geöffnete Datei FD beobachten" #: src/main/help.c:101 msgid "show this help and exit" @@ -437,16 +213,236 @@ msgstr "" "Verbindet DATEI(en) oder den Standard-Eingabe-Kanal mit dem\n" "Standard-Ausgabe-Kanal und misst den Datenstrom." -#: src/main/help.c:201 +#: src/main/help.c:207 msgid "" "Debugging is enabled; export the DEBUG environment variable to define the\n" "output filename.\n" msgstr "" +"Das Debuggen ist aktiviert. Exportieren Sie die Umgebungsvariable DEBUG,\n" +"um den Ausgabedateinamen zu definieren.\n" -#: src/main/help.c:205 +#: src/main/help.c:211 #, c-format msgid "Please report any bugs to %s." msgstr "Bitte senden Sie Fehlerberichte an %s." -#~ msgid "failed to lock terminal" -#~ msgstr "Terminal konnte nicht geöffnet werden" +#: src/main/main.c:74 +msgid "state allocation failed" +msgstr "Zustandszuweisung fehlgeschlagen" + +#: src/main/main.c:246 +#, fuzzy +msgid "failed to read terminal attributes" +msgstr "Terminalname konnte nicht gelesen werden" + +#: src/main/options.c:98 +msgid "option structure allocation failed" +msgstr "`option' konnte nicht allokiert werden" + +#: src/main/options.c:112 +msgid "option structure argv allocation failed" +msgstr "`option' (argv) konnte nicht allokiert werden" + +#: src/main/options.c:151 +msgid "integer argument expected" +msgstr "Ganzzahliges Argument erwartet" + +#: src/main/options.c:162 +msgid "numeric argument expected" +msgstr "numerisches Argument erwartet" + +#: src/main/options.c:173 +msgid "process ID or pid:fd pair expected" +msgstr "Prozess-ID oder PID:FD-Paar erwartet" + +#: src/main/options.c:180 +msgid "invalid process ID" +msgstr "ungültige Prozess-ID" + +#: src/main/options.c:316 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "`%s --help' zeigt weitere Informationen an." + +#: src/main/options.c:320 +#, c-format +msgid "Try `%s -h' for more information." +msgstr "`%s -h' zeigt weitere Informationen an." + +#: src/main/options.c:336 +msgid "" +"cannot use line mode or transfer modifier options when watching file " +"descriptors" +msgstr "" +"Beim Anzeigen von Dateideskriptoren können keine Optionen für den " +"Zeilenmodus oder den Übertragungsmodifikator verwendet werden" + +#: src/main/options.c:344 +msgid "cannot use cursor positioning when watching file descriptors" +msgstr "" +"Beim Anzeigen von Dateideskriptoren können keine Zeilenmodus- oder " +"Übertragungsmodifikatoroptionen verwendet werden." + +#: src/main/options.c:352 +msgid "cannot use remote control when watching file descriptors" +msgstr "" +"kann keine Fernbedienung verwenden, wenn Dateideskriptoren angezeigt werden" + +#: src/main/options.c:360 +msgid "cannot transfer files when watching file descriptors" +msgstr "" +"Dateien können beim Betrachten von Dateideskriptoren nicht übertragen werden" + +#: src/main/options.c:368 +msgid "not available on systems without /proc/self/fdinfo" +msgstr "Nicht verfügbar auf Systemen ohne /proc/self/fdinfo" + +#: src/main/remote.c:221 +msgid "message not received" +msgstr "Nachricht nicht empfangen" + +#: src/main/remote.c:328 +msgid "IPC not supported on this system" +msgstr "IPC wird auf diesem System nicht unterstützt" + +#: src/main/version.c:17 +#, c-format +msgid "%s %s - Copyright %s %s" +msgstr "%s %s - Copyright(C) %s %s" + +#: src/main/version.c:20 +#, c-format +msgid "Web site: %s" +msgstr "Web-Site: %s" + +#: src/main/version.c:23 +msgid "" +"This program is free software, and is being distributed under the\n" +"terms of the Artistic License 2.0." +msgstr "" +"Dieses Programm ist freie Software und wird unter den Bedingungen\n" +"der Artistic License verbreitet." + +#: src/main/version.c:28 +msgid "" +"This program is distributed in the hope that it will be useful,\n" +"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +msgstr "" +"Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich sein " +"wird,\n" +"aber OHNE JEGLICHE GARANTIE; ohne die implizite Garantie von\n" +"MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK." + +#: src/pv/cursor.c:80 +msgid "failed to get terminal name" +msgstr "Terminalname konnte nicht gelesen werden" + +#: src/pv/cursor.c:125 +msgid "failed to open lock file" +msgstr "Sperrdatei konnte nicht geöffnet werden" + +#: src/pv/cursor.c:159 +msgid "lock attempt failed" +msgstr "Sperrversuch fehlgeschlagen" + +#: src/pv/cursor.c:409 +msgid "failed to open terminal" +msgstr "Terminal konnte nicht geöffnet werden" + +#: src/pv/display.c:138 +msgid "yzafpnum kMGTPEZY" +msgstr "" + +#: src/pv/display.c:143 +msgid "yzafpnum KMGTPEZY" +msgstr "" + +#: src/pv/display.c:558 src/pv/transfer.c:679 +msgid "buffer allocation failed" +msgstr "Puffer konnte nicht allokiert werden" + +#: src/pv/display.c:618 src/pv/transfer.c:458 +msgid "B" +msgstr "B" + +#: src/pv/display.c:654 src/pv/display.c:662 +msgid "/s" +msgstr "" + +#: src/pv/display.c:654 src/pv/display.c:662 +msgid "B/s" +msgstr "" + +#: src/pv/display.c:697 src/pv/display.c:702 src/pv/display.c:764 +msgid "ETA" +msgstr "ETA" + +#: src/pv/file.c:119 +msgid "failed to seek to start of output" +msgstr "Konnte nicht versuchen, die Ausgabe zu starten" + +#: src/pv/file.c:215 +msgid "failed to close file" +msgstr "Datei konnte nicht geschlossen werden" + +#: src/pv/file.c:238 +msgid "failed to read file" +msgstr "Datei konnte nicht gelesen werden" + +#: src/pv/file.c:248 +msgid "failed to stat file" +msgstr "Dateiinformationen konnten nicht gelesen werden" + +#: src/pv/file.c:257 +msgid "failed to stat output file" +msgstr "Dateiinformationen für Ausgabe-Datei konnten nicht gelesen werden" + +#: src/pv/file.c:280 +msgid "input file is output file" +msgstr "Eingabe-Datei ist Ausgabe-Datei" + +#: src/pv/loop.c:520 src/pv/loop.c:590 src/pv/loop.c:642 src/pv/watchpid.c:51 +#: src/pv/watchpid.c:74 src/pv/watchpid.c:84 src/pv/watchpid.c:115 +msgid "pid" +msgstr "" + +#: src/pv/state.c:33 +msgid "none" +msgstr "" + +#: src/pv/transfer.c:341 +msgid "read failed" +msgstr "read-Aufruf fehlgeschlagen" + +#: src/pv/transfer.c:359 +msgid "warning: read errors detected" +msgstr "warnung: lesefehler erkannt" + +#: src/pv/transfer.c:374 +msgid "file is not seekable" +msgstr "datei ist nicht durchsuchbar" + +#: src/pv/transfer.c:437 +msgid "failed to seek past error" +msgstr "konnte den Fehler nicht überwinden" + +#: src/pv/transfer.c:456 +msgid "skipped past read error" +msgstr "über den Lesefehler hinaus verschoben" + +#: src/pv/transfer.c:631 +msgid "write failed" +msgstr "write-Aufruf fehlgeschlagen" + +#: src/pv/transfer.c:770 +msgid "select call failed" +msgstr "select-Aufruf fehlgeschlagen" + +#: src/pv/watchpid.c:76 src/pv/watchpid.c:86 src/pv/watchpid.c:117 +msgid "fd" +msgstr "" + +#: src/pv/watchpid.c:120 +msgid "not a regular file or block device" +msgstr "keine normale Datei oder Blockgerät" diff --git a/src/nls/fr.po b/src/nls/fr.po index 06ec5f9..30f2926 100644 --- a/src/nls/fr.po +++ b/src/nls/fr.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-30 22:21+0100\n" -"Content-Type: text/plain; charset=ISO-8859-15\n" +"POT-Creation-Date: 2021-03-30 23:28+0100\n" +"Content-Type: text/plain; charset=UTF-8\n" "Date: 1999-06-01 15:18:29+0100\n" "From: Andrew Wood \n" "Xgettext-Options: --default-domain=pkgbuild --directory=./.pkgdir --add-" @@ -19,261 +19,37 @@ msgstr "" "nls/intl/textdomain.c src/nls/intl-cat/cat-compat.c src/nls/intl-gett/intl-" "compat.c\n" -#: src/pv/watchpid.c:51 src/pv/watchpid.c:66 src/pv/watchpid.c:76 -#: src/pv/watchpid.c:107 src/pv/loop.c:519 src/pv/loop.c:580 src/pv/loop.c:632 -msgid "pid" -msgstr "" - -#: src/pv/watchpid.c:68 src/pv/watchpid.c:78 src/pv/watchpid.c:109 -msgid "fd" -msgstr "" - -#: src/pv/watchpid.c:112 -msgid "not a regular file or block device" -msgstr "" - -#: src/pv/cursor.c:53 -#, fuzzy -msgid "failed to get terminal name" -msgstr "l'ouverture du terminal a échoué" - -#: src/pv/cursor.c:96 -#, fuzzy -msgid "failed to open lock file" -msgstr "la fermeture du fichier a échoué" - -#: src/pv/cursor.c:129 -msgid "lock attempt failed" -msgstr "" - -#: src/pv/cursor.c:369 -msgid "failed to open terminal" -msgstr "l'ouverture du terminal a échoué" - -#: src/pv/file.c:118 -#, fuzzy -msgid "failed to seek to start of output" -msgstr "échec à statuer sur le fichier de sortie" - -#: src/pv/file.c:214 -msgid "failed to close file" -msgstr "la fermeture du fichier a échoué" - -#: src/pv/file.c:237 -msgid "failed to read file" -msgstr "la lecture du fichier a échoué" - -#: src/pv/file.c:247 -msgid "failed to stat file" -msgstr "échec à statuer sur le fichier" - -#: src/pv/file.c:256 -msgid "failed to stat output file" -msgstr "échec à statuer sur le fichier de sortie" - -#: src/pv/file.c:279 -msgid "input file is output file" -msgstr "fichiers d'entré et de sortie sont les mêmes" - -#: src/pv/display.c:117 -msgid "yzafpnum kMGTPEZY" -msgstr "" - -#: src/pv/display.c:122 -msgid "yzafpnum KMGTPEZY" -msgstr "" - -#: src/pv/display.c:532 src/pv/transfer.c:679 -msgid "buffer allocation failed" -msgstr "l'allocation de mémoire tampon a échoué" - -#: src/pv/display.c:592 src/pv/transfer.c:458 -msgid "B" -msgstr "O" - -#: src/pv/display.c:628 src/pv/display.c:636 -msgid "/s" -msgstr "/s" - -#: src/pv/display.c:628 src/pv/display.c:636 -#, fuzzy -msgid "B/s" -msgstr "O/s" - -#: src/pv/display.c:671 src/pv/display.c:676 src/pv/display.c:738 -msgid "ETA" -msgstr "ETA" - -#: src/pv/transfer.c:341 -msgid "read failed" -msgstr "la lecture a échoué" - -#: src/pv/transfer.c:359 -msgid "warning: read errors detected" -msgstr "" - -#: src/pv/transfer.c:374 -msgid "file is not seekable" -msgstr "" - -#: src/pv/transfer.c:437 -#, fuzzy -msgid "failed to seek past error" -msgstr "échec à statuer sur le fichier" - -#: src/pv/transfer.c:456 -msgid "skipped past read error" -msgstr "" - -#: src/pv/transfer.c:631 -msgid "write failed" -msgstr "l'écriture a échoué" - -#: src/pv/transfer.c:770 -msgid "select call failed" -msgstr "appel de sélection a échoué" - -#: src/pv/state.c:33 -msgid "none" -msgstr "" - -#: src/main/version.c:17 -#, fuzzy, c-format -msgid "%s %s - Copyright %s %s" -msgstr "%s %s - Copyright(C) %s %s" - -#: src/main/version.c:20 -#, c-format -msgid "Web site: %s" -msgstr "Site Web: %s" - -#: src/main/version.c:23 -msgid "" -"This program is free software, and is being distributed under the\n" -"terms of the Artistic License 2.0." -msgstr "" -"Ce programme est un logiciel libre et est distribué sous les termes\n" -"anglophone de la Licence Artistique 2.0 (Artistic License 2.0)." - -#: src/main/version.c:28 -msgid "" -"This program is distributed in the hope that it will be useful,\n" -"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -msgstr "" -"Ce programme est distribué dans l'espoir qu'il sera utile, mais\n" -"SANS GARANTIE AUCUNE; ni même de garantie sous-entendu que le\n" -"programme soit COMMERCIALISABLE ou APPLICABLE À UNE TÂCHE\n" -"PARTICULIÈRE." - -#: src/main/main.c:73 -#, fuzzy -msgid "state allocation failed" -msgstr "l'allocation de mémoire tampon a échoué" - -#: src/main/options.c:98 -#, c-format -msgid "%s: option structure allocation failed (%s)" -msgstr "%s: l'allocation pour la structure d'une option a echoué (%s)" - -#: src/main/options.c:114 -#, c-format -msgid "%s: option structure argv allocation failed (%s)" -msgstr "%s: l'allocation pour la structure de l'option argv a echoué (%s)" - -#: src/main/options.c:154 -msgid "integer argument expected" -msgstr "Valeur entière attendue" - -#: src/main/options.c:165 -msgid "numeric argument expected" -msgstr "Valeur numérique attendue" - -#: src/main/options.c:176 -msgid "process ID or pid:fd pair expected" -msgstr "" - -#: src/main/options.c:183 -msgid "invalid process ID" -msgstr "" - -#: src/main/options.c:317 -#, c-format -msgid "Try `%s --help' for more information." -msgstr "Essayez `%s --help' pour plus d'information." - -#: src/main/options.c:321 -#, fuzzy, c-format -msgid "Try `%s -h' for more information." -msgstr "Essayez `%s -h' pour plus d'information." - -#: src/main/options.c:338 -#, c-format -msgid "" -"%s: cannot use line mode or transfer modifier options when watching file " -"descriptors" -msgstr "" - -#: src/main/options.c:348 -#, c-format -msgid "%s: cannot use cursor positioning when watching file descriptors" -msgstr "" - -#: src/main/options.c:358 -#, c-format -msgid "%s: cannot use remote control when watching file descriptors" -msgstr "" - -#: src/main/options.c:368 -#, c-format -msgid "%s: cannot transfer files when watching file descriptors" -msgstr "" - -#: src/main/options.c:378 -#, c-format -msgid "%s: -d: not available on systems without /proc/self/fdinfo" -msgstr "" - -#: src/main/remote.c:218 -msgid "message not received" -msgstr "" - -#: src/main/remote.c:324 -msgid "IPC not supported on this system" -msgstr "" - #: src/main/help.c:31 msgid "show progress bar" msgstr "affiche la barre de progression" #: src/main/help.c:33 msgid "show elapsed time" -msgstr "affiche le temps écoulé" +msgstr "affiche le temps écoulé" #: src/main/help.c:35 msgid "show estimated time of arrival (completion)" -msgstr "affiche l'heure approximative de l'achèvement de la tâche" +msgstr "affiche l'heure approximative de l'achèvement de la tâche" #: src/main/help.c:38 -#, fuzzy msgid "show absolute estimated time of arrival (completion)" -msgstr "affiche l'heure approximative de l'achèvement de la tâche" +msgstr "affiche l'heure absolute de l'achèvement de la tâche" #: src/main/help.c:40 msgid "show data transfer rate counter" -msgstr "affiche le taux de tranfert des données" +msgstr "affiche le taux de tranfert des données" #: src/main/help.c:42 msgid "show data transfer average rate counter" -msgstr "" +msgstr "afficher le compteur de taux moyen de transfert de données" #: src/main/help.c:44 msgid "show number of bytes transferred" -msgstr "affiche le nombre d'octets transférés" +msgstr "affiche le nombre d'octets transférés" #: src/main/help.c:46 msgid "show percentage of transfer buffer in use" -msgstr "" +msgstr "afficher le pourcentage de tampon de transfert utilisé" #: src/main/help.c:47 msgid "NUM" @@ -281,16 +57,15 @@ msgstr "" #: src/main/help.c:48 msgid "show NUM bytes last written" -msgstr "" +msgstr "affiche NUM octets pour la dernière fois écrits" #: src/main/help.c:49 -#, fuzzy msgid "FORMAT" -msgstr "TAUX" +msgstr "" #: src/main/help.c:50 msgid "set output format to FORMAT" -msgstr "" +msgstr "définir le format de sortie sur FORMAT" #: src/main/help.c:52 msgid "output percentages, not visual information" @@ -302,16 +77,15 @@ msgstr "n'afficher aucune information de transfert" #: src/main/help.c:57 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:58 src/main/help.c:66 msgid "SEC" msgstr "SEC" #: src/main/help.c:59 -#, fuzzy msgid "display nothing until SEC seconds have passed" -msgstr "ne rien afficher avant qu'au moins un octet soit tranféré" +msgstr "n'afficher rien jusqu'à ce que SEC secondes se soient écoulées" #: src/main/help.c:60 msgid "SIZE" @@ -319,7 +93,7 @@ msgstr "TAILLE" #: src/main/help.c:61 msgid "set estimated data size to SIZE bytes" -msgstr "ajuste la taille estimée des données à TAILLE octets" +msgstr "ajuste la taille estimée des données à TAILLE octets" #: src/main/help.c:63 msgid "count lines instead of bytes" @@ -327,11 +101,11 @@ msgstr "compte les lignes au lieu des octets" #: src/main/help.c:65 msgid "lines are null-terminated" -msgstr "" +msgstr "les lignes sont terminées par un nul" #: src/main/help.c:67 msgid "update every SEC seconds" -msgstr "mise-à-jour toute les SEC secondes" +msgstr "mise-à-jour toute les SEC secondes" #: src/main/help.c:68 msgid "WIDTH" @@ -339,7 +113,7 @@ msgstr "LARGEUR" #: src/main/help.c:69 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:70 msgid "HEIGHT" @@ -347,7 +121,7 @@ msgstr "HAUTEUR" #: src/main/help.c:71 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:72 msgid "NAME" @@ -355,15 +129,15 @@ msgstr "NOM" #: src/main/help.c:73 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:75 msgid "output even if standard error is not a terminal" -msgstr "imprime vers la sortie d'erreur même si ce n'est pas un terminal" +msgstr "imprime vers la sortie d'erreur même si ce n'est pas un terminal" #: src/main/help.c:77 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:79 msgid "RATE" @@ -371,7 +145,7 @@ msgstr "TAUX" #: src/main/help.c:80 msgid "limit transfer to RATE bytes per second" -msgstr "limite le taux de transfer à TAUX octets par seconde" +msgstr "limite le taux de transfer à TAUX octets par seconde" #: src/main/help.c:81 msgid "BYTES" @@ -379,20 +153,19 @@ msgstr "OCTETS" #: src/main/help.c:82 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:84 msgid "never use splice(), always use read/write" -msgstr "" +msgstr "n'utilisez jamais splice(), utilisez toujours read/write" #: src/main/help.c:86 msgid "skip read errors in input" -msgstr "" +msgstr "ignorer les erreurs de lecture dans l'entrée" #: src/main/help.c:88 -#, fuzzy msgid "stop after --size bytes have been transferred" -msgstr "affiche le nombre d'octets transférés" +msgstr "arrêter après le transfert de --size octets" #: src/main/help.c:90 msgid "PID" @@ -400,7 +173,7 @@ msgstr "PID" #: src/main/help.c:91 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:94 msgid "FILE" @@ -408,7 +181,7 @@ msgstr "" #: src/main/help.c:95 msgid "save process ID in FILE" -msgstr "" +msgstr "enregistrer l'ID de processus dans FILE" #: src/main/help.c:97 msgid "PID[:FD]" @@ -416,7 +189,7 @@ msgstr "" #: src/main/help.c:98 msgid "watch file FD opened by process PID" -msgstr "" +msgstr "regarder le fichier FD ouvert par le processus PID" #: src/main/help.c:101 msgid "show this help and exit" @@ -436,19 +209,241 @@ msgid "" "Concatenate FILE(s), or standard input, to standard output,\n" "with monitoring." msgstr "" -"Concatène FICHIER(s), ou l'entrée standard, sur la sortie standard\n" +"Concatène FICHIER(s), ou l'entrée standard, sur la sortie standard\n" "avec monitorage." -#: src/main/help.c:201 +#: src/main/help.c:207 msgid "" "Debugging is enabled; export the DEBUG environment variable to define the\n" "output filename.\n" msgstr "" +"Le débogage est activé; exportez la variable d'environnement DEBUG pour\n" +"définir le nom du fichier de sortie.\n" -#: src/main/help.c:205 +#: src/main/help.c:211 #, c-format msgid "Please report any bugs to %s." -msgstr "SVP rapporter touts bogues à %s." +msgstr "SVP rapporter touts bogues à %s." -#~ msgid "failed to lock terminal" -#~ msgstr "l'ouverture du terminal a échoué" +#: src/main/main.c:74 +msgid "state allocation failed" +msgstr "échec de l'allocation de mémoire de condition" + +#: src/main/main.c:246 +#, fuzzy +msgid "failed to read terminal attributes" +msgstr "échec de lecture du nom du terminal" + +#: src/main/options.c:98 +msgid "option structure allocation failed" +msgstr "l'allocation pour la structure d'une option a echoué" + +#: src/main/options.c:112 +msgid "option structure argv allocation failed" +msgstr "l'allocation pour la structure de l'option argv a echoué" + +#: src/main/options.c:151 +msgid "integer argument expected" +msgstr "Valeur entière attendue" + +#: src/main/options.c:162 +msgid "numeric argument expected" +msgstr "Valeur numérique attendue" + +#: src/main/options.c:173 +msgid "process ID or pid:fd pair expected" +msgstr "ID de processus ou paire pid:fd attendue" + +#: src/main/options.c:180 +msgid "invalid process ID" +msgstr "ID de processus non valide" + +#: src/main/options.c:316 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Essayez `%s --help' pour plus d'information." + +#: src/main/options.c:320 +#, c-format +msgid "Try `%s -h' for more information." +msgstr "Essayez `%s -h' pour plus d'information." + +#: src/main/options.c:336 +msgid "" +"cannot use line mode or transfer modifier options when watching file " +"descriptors" +msgstr "" +"impossible d'utiliser le mode ligne ou les options de modificateur de " +"transfert lors de la visualisation des descripteurs de fichiers" + +#: src/main/options.c:344 +msgid "cannot use cursor positioning when watching file descriptors" +msgstr "" +"impossible d'utiliser le positionnement du curseur lors de la visualisation " +"des descripteurs de fichier" + +#: src/main/options.c:352 +msgid "cannot use remote control when watching file descriptors" +msgstr "" +"impossible d'utiliser la télécommande lors de la visualisation des " +"descripteurs de fichiers" + +#: src/main/options.c:360 +msgid "cannot transfer files when watching file descriptors" +msgstr "" +"impossible de transférer des fichiers lorsque vous regardez des descripteurs " +"de fichiers" + +#: src/main/options.c:368 +msgid "not available on systems without /proc/self/fdinfo" +msgstr "non disponible sur les systèmes sans /proc/self/fdinfo" + +#: src/main/remote.c:221 +msgid "message not received" +msgstr "message non reçu" + +#: src/main/remote.c:328 +msgid "IPC not supported on this system" +msgstr "IPC non pris en charge sur ce système" + +#: src/main/version.c:17 +#, c-format +msgid "%s %s - Copyright %s %s" +msgstr "%s %s - Copyright(C) %s %s" + +#: src/main/version.c:20 +#, c-format +msgid "Web site: %s" +msgstr "Site Web: %s" + +#: src/main/version.c:23 +msgid "" +"This program is free software, and is being distributed under the\n" +"terms of the Artistic License 2.0." +msgstr "" +"Ce programme est un logiciel libre et est distribué sous les termes\n" +"anglophone de la Licence Artistique 2.0 (Artistic License 2.0)." + +#: src/main/version.c:28 +msgid "" +"This program is distributed in the hope that it will be useful,\n" +"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +msgstr "" +"Ce programme est distribué dans l'espoir qu'il sera utile, mais\n" +"SANS GARANTIE AUCUNE; ni même de garantie sous-entendu que le\n" +"programme soit COMMERCIALISABLE ou APPLICABLE À UNE TÂCHE\n" +"PARTICULIÈRE." + +#: src/pv/cursor.c:80 +msgid "failed to get terminal name" +msgstr "échec de lecture du nom du terminal" + +#: src/pv/cursor.c:125 +msgid "failed to open lock file" +msgstr "échec de l'ouverture du fichier de verrouillage" + +#: src/pv/cursor.c:159 +msgid "lock attempt failed" +msgstr "tentative de verrouillage échoué" + +#: src/pv/cursor.c:409 +msgid "failed to open terminal" +msgstr "l'ouverture du terminal a échoué" + +#: src/pv/display.c:138 +msgid "yzafpnum kMGTPEZY" +msgstr "" + +#: src/pv/display.c:143 +msgid "yzafpnum KMGTPEZY" +msgstr "" + +#: src/pv/display.c:558 src/pv/transfer.c:679 +msgid "buffer allocation failed" +msgstr "l'allocation de mémoire tampon a échoué" + +#: src/pv/display.c:618 src/pv/transfer.c:458 +msgid "B" +msgstr "O" + +#: src/pv/display.c:654 src/pv/display.c:662 +msgid "/s" +msgstr "/s" + +#: src/pv/display.c:654 src/pv/display.c:662 +msgid "B/s" +msgstr "O/s" + +#: src/pv/display.c:697 src/pv/display.c:702 src/pv/display.c:764 +msgid "ETA" +msgstr "ETA" + +#: src/pv/file.c:119 +msgid "failed to seek to start of output" +msgstr "ne peut pas passer au début de la sortie" + +#: src/pv/file.c:215 +msgid "failed to close file" +msgstr "la fermeture du fichier a échoué" + +#: src/pv/file.c:238 +msgid "failed to read file" +msgstr "la lecture du fichier a échoué" + +#: src/pv/file.c:248 +msgid "failed to stat file" +msgstr "échec à statuer sur le fichier" + +#: src/pv/file.c:257 +msgid "failed to stat output file" +msgstr "échec à statuer sur le fichier de sortie" + +#: src/pv/file.c:280 +msgid "input file is output file" +msgstr "fichiers d'entré et de sortie sont les mêmes" + +#: src/pv/loop.c:520 src/pv/loop.c:590 src/pv/loop.c:642 src/pv/watchpid.c:51 +#: src/pv/watchpid.c:74 src/pv/watchpid.c:84 src/pv/watchpid.c:115 +msgid "pid" +msgstr "" + +#: src/pv/state.c:33 +msgid "none" +msgstr "" + +#: src/pv/transfer.c:341 +msgid "read failed" +msgstr "la lecture a échoué" + +#: src/pv/transfer.c:359 +msgid "warning: read errors detected" +msgstr "avertissement: erreurs de lecture détectées" + +#: src/pv/transfer.c:374 +msgid "file is not seekable" +msgstr "ne peut pas se déplacer dans le fichier" + +#: src/pv/transfer.c:437 +msgid "failed to seek past error" +msgstr "n'a pas réussi à dépasser l'erreur" + +#: src/pv/transfer.c:456 +msgid "skipped past read error" +msgstr "erreur de lecture dépassée" + +#: src/pv/transfer.c:631 +msgid "write failed" +msgstr "l'écriture a échoué" + +#: src/pv/transfer.c:770 +msgid "select call failed" +msgstr "appel de sélection a échoué" + +#: src/pv/watchpid.c:76 src/pv/watchpid.c:86 src/pv/watchpid.c:117 +msgid "fd" +msgstr "" + +#: src/pv/watchpid.c:120 +msgid "not a regular file or block device" +msgstr "pas un fichier ordinaire ou un périphérique de bloc" diff --git a/src/nls/pl.po b/src/nls/pl.po index 51867a8..05683c3 100644 --- a/src/nls/pl.po +++ b/src/nls/pl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-30 22:21+0100\n" +"POT-Creation-Date: 2021-03-30 23:28+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -14,224 +14,6 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -#: src/pv/watchpid.c:51 src/pv/watchpid.c:66 src/pv/watchpid.c:76 -#: src/pv/watchpid.c:107 src/pv/loop.c:519 src/pv/loop.c:580 src/pv/loop.c:632 -msgid "pid" -msgstr "" - -#: src/pv/watchpid.c:68 src/pv/watchpid.c:78 src/pv/watchpid.c:109 -msgid "fd" -msgstr "" - -#: src/pv/watchpid.c:112 -msgid "not a regular file or block device" -msgstr "" - -#: src/pv/cursor.c:53 -#, fuzzy -msgid "failed to get terminal name" -msgstr "nie uda³o siê otworzyæ terminala" - -# "Przewidywany czas ukoñczenia" for ETA is too long -#: src/pv/cursor.c:96 -#, fuzzy -msgid "failed to open lock file" -msgstr "nie uda³o siê zamkn±æ pliku" - -#: src/pv/cursor.c:129 -msgid "lock attempt failed" -msgstr "" - -#: src/pv/cursor.c:369 -msgid "failed to open terminal" -msgstr "nie uda³o siê otworzyæ terminala" - -#: src/pv/file.c:118 -#, fuzzy -msgid "failed to seek to start of output" -msgstr "nie uda³o siê wykonaæ operacji stat na pliku wyj¶ciowym" - -# "Przewidywany czas ukoñczenia" for ETA is too long -#: src/pv/file.c:214 -msgid "failed to close file" -msgstr "nie uda³o siê zamkn±æ pliku" - -#: src/pv/file.c:237 -msgid "failed to read file" -msgstr "nie uda³o siê odczytaæ pliku" - -#: src/pv/file.c:247 -msgid "failed to stat file" -msgstr "nie uda³o siê wykonaæ operacji stat na pliku" - -#: src/pv/file.c:256 -msgid "failed to stat output file" -msgstr "nie uda³o siê wykonaæ operacji stat na pliku wyj¶ciowym" - -#: src/pv/file.c:279 -msgid "input file is output file" -msgstr "plik wej¶ciowy jest zarazem plikiem wyj¶ciowym" - -#: src/pv/display.c:117 -msgid "yzafpnum kMGTPEZY" -msgstr "" - -#: src/pv/display.c:122 -msgid "yzafpnum KMGTPEZY" -msgstr "" - -#: src/pv/display.c:532 src/pv/transfer.c:679 -msgid "buffer allocation failed" -msgstr "nie uda³o siê zaalokowaæ bufora" - -#: src/pv/display.c:592 src/pv/transfer.c:458 -msgid "B" -msgstr "B" - -#: src/pv/display.c:628 src/pv/display.c:636 -msgid "/s" -msgstr "/s" - -#: src/pv/display.c:628 src/pv/display.c:636 -msgid "B/s" -msgstr "B/s" - -#: src/pv/display.c:671 src/pv/display.c:676 src/pv/display.c:738 -msgid "ETA" -msgstr "ETA" - -#: src/pv/transfer.c:341 -msgid "read failed" -msgstr "b³±d odczytu" - -#: src/pv/transfer.c:359 -msgid "warning: read errors detected" -msgstr "" - -#: src/pv/transfer.c:374 -msgid "file is not seekable" -msgstr "" - -#: src/pv/transfer.c:437 -#, fuzzy -msgid "failed to seek past error" -msgstr "nie uda³o siê wykonaæ operacji stat na pliku" - -#: src/pv/transfer.c:456 -msgid "skipped past read error" -msgstr "" - -#: src/pv/transfer.c:631 -msgid "write failed" -msgstr "b³±d zapisu" - -#: src/pv/transfer.c:770 -msgid "select call failed" -msgstr "nie uda³o siê wywo³aæ funkcji select" - -#: src/pv/state.c:33 -msgid "none" -msgstr "" - -#: src/main/version.c:17 -#, fuzzy, c-format -msgid "%s %s - Copyright %s %s" -msgstr "%s %s - Prawa autorskie (C) %s %s" - -#: src/main/version.c:20 -#, c-format -msgid "Web site: %s" -msgstr "Strona WWW: %s" - -#: src/main/version.c:23 -msgid "" -"This program is free software, and is being distributed under the\n" -"terms of the Artistic License 2.0." -msgstr "" - -#: src/main/version.c:28 -msgid "" -"This program is distributed in the hope that it will be useful,\n" -"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -msgstr "" - -#: src/main/main.c:73 -#, fuzzy -msgid "state allocation failed" -msgstr "nie uda³o siê zaalokowaæ bufora" - -#: src/main/options.c:98 -#, c-format -msgid "%s: option structure allocation failed (%s)" -msgstr "%s: nie uda³o siê zaalokowaæ struktur opcji (%s)" - -#: src/main/options.c:114 -#, c-format -msgid "%s: option structure argv allocation failed (%s)" -msgstr "%s: nie uda³o siê zaalokowaæ struktur opcji argv (%s)" - -#: src/main/options.c:154 -msgid "integer argument expected" -msgstr "" - -#: src/main/options.c:165 -msgid "numeric argument expected" -msgstr "" - -#: src/main/options.c:176 -msgid "process ID or pid:fd pair expected" -msgstr "" - -#: src/main/options.c:183 -msgid "invalid process ID" -msgstr "" - -#: src/main/options.c:317 -#, c-format -msgid "Try `%s --help' for more information." -msgstr "Spróbuj `%s --help' by uzyskaæ wiêcej informacji" - -#: src/main/options.c:321 -#, fuzzy, c-format -msgid "Try `%s -h' for more information." -msgstr "Spróbuj `%s -h' by uzyskaæ wiêcej informacji" - -#: src/main/options.c:338 -#, c-format -msgid "" -"%s: cannot use line mode or transfer modifier options when watching file " -"descriptors" -msgstr "" - -#: src/main/options.c:348 -#, c-format -msgid "%s: cannot use cursor positioning when watching file descriptors" -msgstr "" - -#: src/main/options.c:358 -#, c-format -msgid "%s: cannot use remote control when watching file descriptors" -msgstr "" - -#: src/main/options.c:368 -#, c-format -msgid "%s: cannot transfer files when watching file descriptors" -msgstr "" - -#: src/main/options.c:378 -#, c-format -msgid "%s: -d: not available on systems without /proc/self/fdinfo" -msgstr "" - -#: src/main/remote.c:218 -msgid "message not received" -msgstr "" - -#: src/main/remote.c:324 -msgid "IPC not supported on this system" -msgstr "" - #: src/main/help.c:31 msgid "show progress bar" msgstr "poka¿ pasek postêpu" @@ -428,64 +210,229 @@ msgstr "" "£±czenie PLIK(ów) lub wej¶cia standardowego, do wyj¶cia standardowego\n" "z monitoringiem." -#: src/main/help.c:201 +#: src/main/help.c:207 msgid "" "Debugging is enabled; export the DEBUG environment variable to define the\n" "output filename.\n" msgstr "" -#: src/main/help.c:205 +#: src/main/help.c:211 #, c-format msgid "Please report any bugs to %s." msgstr "Proszê przesy³aæ zg³oszenia b³êdów do %s." -#~ msgid "failed to lock terminal" -#~ msgstr "nie uda³o siê otworzyæ terminala" +#: src/main/main.c:74 +#, fuzzy +msgid "state allocation failed" +msgstr "nie uda³o siê zaalokowaæ bufora" -#~ msgid "G" -#~ msgstr "GB" +#: src/main/main.c:246 +#, fuzzy +msgid "failed to read terminal attributes" +msgstr "nie uda³o siê otworzyæ terminala" -#~ msgid "M" -#~ msgstr "MB" +#: src/main/options.c:98 +msgid "option structure allocation failed" +msgstr "nie uda³o siê zaalokowaæ struktur opcji" -#~ msgid "k" -#~ msgstr "kB" +#: src/main/options.c:112 +msgid "option structure argv allocation failed" +msgstr "nie uda³o siê zaalokowaæ struktur opcji argv" -#~ msgid "GB" -#~ msgstr "GB" +#: src/main/options.c:151 +msgid "integer argument expected" +msgstr "" -#~ msgid "MB" -#~ msgstr "MB" +#: src/main/options.c:162 +msgid "numeric argument expected" +msgstr "" -#~ msgid "kB" -#~ msgstr "kB" +#: src/main/options.c:173 +msgid "process ID or pid:fd pair expected" +msgstr "" -#~ msgid "M/s" -#~ msgstr "MB/s" +#: src/main/options.c:180 +msgid "invalid process ID" +msgstr "" -#~ msgid "k/s" -#~ msgstr "kB/s" +#: src/main/options.c:316 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Spróbuj `%s --help' by uzyskaæ wiêcej informacji" -#~ msgid "/s " -#~ msgstr "B/s" +#: src/main/options.c:320 +#, fuzzy, c-format +msgid "Try `%s -h' for more information." +msgstr "Spróbuj `%s -h' by uzyskaæ wiêcej informacji" -#~ msgid "GB/s" -#~ msgstr "GB/s" +#: src/main/options.c:336 +msgid "" +"cannot use line mode or transfer modifier options when watching file " +"descriptors" +msgstr "" -#~ msgid "MB/s" -#~ msgstr "MB/s" +#: src/main/options.c:344 +msgid "cannot use cursor positioning when watching file descriptors" +msgstr "" -#~ msgid "kB/s" -#~ msgstr "kB/s" +#: src/main/options.c:352 +msgid "cannot use remote control when watching file descriptors" +msgstr "" -#~ msgid "For more information, please run `%s --license'." -#~ msgstr "By uzyskaæ wiêcej informacji wprowad¼ `%s --license'." +#: src/main/options.c:360 +msgid "cannot transfer files when watching file descriptors" +msgstr "" -#~ msgid "For more information, please run `%s -l'." -#~ msgstr "By uzyskaæ wiêcej informacji wprowad¼ `%s -l'." +#: src/main/options.c:368 +msgid "not available on systems without /proc/self/fdinfo" +msgstr "" -#~ msgid "show the license this program is distributed under" -#~ msgstr "wy¶wietl informacje o licencji pod któr± program jest rozprowadzany" +#: src/main/remote.c:221 +msgid "message not received" +msgstr "" -#~ msgid "%s %s - Copyright (C) %s %s" -#~ msgstr "%s %s - Prawa autorskie (C) %s %s" +#: src/main/remote.c:328 +msgid "IPC not supported on this system" +msgstr "" + +#: src/main/version.c:17 +#, fuzzy, c-format +msgid "%s %s - Copyright %s %s" +msgstr "%s %s - Prawa autorskie (C) %s %s" + +#: src/main/version.c:20 +#, c-format +msgid "Web site: %s" +msgstr "Strona WWW: %s" + +#: src/main/version.c:23 +msgid "" +"This program is free software, and is being distributed under the\n" +"terms of the Artistic License 2.0." +msgstr "" + +#: src/main/version.c:28 +msgid "" +"This program is distributed in the hope that it will be useful,\n" +"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +msgstr "" + +#: src/pv/cursor.c:80 +#, fuzzy +msgid "failed to get terminal name" +msgstr "nie uda³o siê otworzyæ terminala" + +# "Przewidywany czas ukoñczenia" for ETA is too long +#: src/pv/cursor.c:125 +#, fuzzy +msgid "failed to open lock file" +msgstr "nie uda³o siê zamkn±æ pliku" + +#: src/pv/cursor.c:159 +msgid "lock attempt failed" +msgstr "" + +#: src/pv/cursor.c:409 +msgid "failed to open terminal" +msgstr "nie uda³o siê otworzyæ terminala" + +#: src/pv/display.c:138 +msgid "yzafpnum kMGTPEZY" +msgstr "" + +#: src/pv/display.c:143 +msgid "yzafpnum KMGTPEZY" +msgstr "" + +#: src/pv/display.c:558 src/pv/transfer.c:679 +msgid "buffer allocation failed" +msgstr "nie uda³o siê zaalokowaæ bufora" + +#: src/pv/display.c:618 src/pv/transfer.c:458 +msgid "B" +msgstr "B" + +#: src/pv/display.c:654 src/pv/display.c:662 +msgid "/s" +msgstr "/s" + +#: src/pv/display.c:654 src/pv/display.c:662 +msgid "B/s" +msgstr "B/s" + +#: src/pv/display.c:697 src/pv/display.c:702 src/pv/display.c:764 +msgid "ETA" +msgstr "ETA" + +#: src/pv/file.c:119 +#, fuzzy +msgid "failed to seek to start of output" +msgstr "nie uda³o siê wykonaæ operacji stat na pliku wyj¶ciowym" + +# "Przewidywany czas ukoñczenia" for ETA is too long +#: src/pv/file.c:215 +msgid "failed to close file" +msgstr "nie uda³o siê zamkn±æ pliku" + +#: src/pv/file.c:238 +msgid "failed to read file" +msgstr "nie uda³o siê odczytaæ pliku" + +#: src/pv/file.c:248 +msgid "failed to stat file" +msgstr "nie uda³o siê wykonaæ operacji stat na pliku" + +#: src/pv/file.c:257 +msgid "failed to stat output file" +msgstr "nie uda³o siê wykonaæ operacji stat na pliku wyj¶ciowym" + +#: src/pv/file.c:280 +msgid "input file is output file" +msgstr "plik wej¶ciowy jest zarazem plikiem wyj¶ciowym" + +#: src/pv/loop.c:520 src/pv/loop.c:590 src/pv/loop.c:642 src/pv/watchpid.c:51 +#: src/pv/watchpid.c:74 src/pv/watchpid.c:84 src/pv/watchpid.c:115 +msgid "pid" +msgstr "" + +#: src/pv/state.c:33 +msgid "none" +msgstr "" + +#: src/pv/transfer.c:341 +msgid "read failed" +msgstr "b³±d odczytu" + +#: src/pv/transfer.c:359 +msgid "warning: read errors detected" +msgstr "" + +#: src/pv/transfer.c:374 +msgid "file is not seekable" +msgstr "" + +#: src/pv/transfer.c:437 +#, fuzzy +msgid "failed to seek past error" +msgstr "nie uda³o siê wykonaæ operacji stat na pliku" + +#: src/pv/transfer.c:456 +msgid "skipped past read error" +msgstr "" + +#: src/pv/transfer.c:631 +msgid "write failed" +msgstr "b³±d zapisu" + +#: src/pv/transfer.c:770 +msgid "select call failed" +msgstr "nie uda³o siê wywo³aæ funkcji select" + +#: src/pv/watchpid.c:76 src/pv/watchpid.c:86 src/pv/watchpid.c:117 +msgid "fd" +msgstr "" + +#: src/pv/watchpid.c:120 +msgid "not a regular file or block device" +msgstr "" diff --git a/src/nls/pt.po b/src/nls/pt.po index 35535c9..8b1e1bd 100644 --- a/src/nls/pt.po +++ b/src/nls/pt.po @@ -6,133 +6,299 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-30 22:21+0100\n" +"POT-Creation-Date: 2021-03-30 23:28+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-15\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/pv/watchpid.c:51 src/pv/watchpid.c:66 src/pv/watchpid.c:76 -#: src/pv/watchpid.c:107 src/pv/loop.c:519 src/pv/loop.c:580 src/pv/loop.c:632 -msgid "pid" +#: src/main/help.c:31 +msgid "show progress bar" +msgstr "exibe barra de progressão" + +#: src/main/help.c:33 +msgid "show elapsed time" +msgstr "exibe tempo passado" + +#: src/main/help.c:35 +msgid "show estimated time of arrival (completion)" +msgstr "exibe o tempo estimado de término" + +#: src/main/help.c:38 +msgid "show absolute estimated time of arrival (completion)" +msgstr "exibe o tempo absoluto estimado de término" + +#: src/main/help.c:40 +msgid "show data transfer rate counter" +msgstr "exibe a taxa de transferência" + +#: src/main/help.c:42 +msgid "show data transfer average rate counter" +msgstr "exibe o contador da taxa média de transferência de dados" + +#: src/main/help.c:44 +msgid "show number of bytes transferred" +msgstr "exibe a quantidade de bytes transferidos" + +#: src/main/help.c:46 +msgid "show percentage of transfer buffer in use" +msgstr "exibe a porcentagem de buffer de transferência em uso" + +#: src/main/help.c:47 +msgid "NUM" msgstr "" -#: src/pv/watchpid.c:68 src/pv/watchpid.c:78 src/pv/watchpid.c:109 -msgid "fd" +#: src/main/help.c:48 +msgid "show NUM bytes last written" +msgstr "exibe NUM bytes gravados pela última vez" + +#: src/main/help.c:49 +msgid "FORMAT" msgstr "" -#: src/pv/watchpid.c:112 -msgid "not a regular file or block device" +#: src/main/help.c:50 +msgid "set output format to FORMAT" +msgstr "definir o formato de saída para FORMAT" + +#: src/main/help.c:52 +msgid "output percentages, not visual information" +msgstr "exibe apenas as porcentagens, sem informações visuais" + +#: src/main/help.c:54 +msgid "do not output any transfer information at all" +msgstr "executa programa sem exibir quaisquer informações" + +#: src/main/help.c:57 +msgid "display nothing until first byte transferred" +msgstr "não exibe nada até iniciar o processamento" + +#: src/main/help.c:58 src/main/help.c:66 +msgid "SEC" msgstr "" -#: src/pv/cursor.c:53 +#: src/main/help.c:59 +msgid "display nothing until SEC seconds have passed" +msgstr "não exibir nada até que os segundos SEC tenham passado" + +#: src/main/help.c:60 +msgid "SIZE" +msgstr "" + +#: src/main/help.c:61 +msgid "set estimated data size to SIZE bytes" +msgstr "seta a quantidade estimada de dados em SIZE bytes" + +#: src/main/help.c:63 +msgid "count lines instead of bytes" +msgstr "contar linhas em vez de bytes" + +#: src/main/help.c:65 +msgid "lines are null-terminated" +msgstr "linhas são terminadas em nulo" + +#: src/main/help.c:67 +msgid "update every SEC seconds" +msgstr "atualiza informações a cada SEC segundos" + +#: src/main/help.c:68 +msgid "WIDTH" +msgstr "" + +#: src/main/help.c:69 +msgid "assume terminal is WIDTH characters wide" +msgstr "presuma que o terminal tem WIDTH caracteres de largura" + +#: src/main/help.c:70 +msgid "HEIGHT" +msgstr "" + +#: src/main/help.c:71 +msgid "assume terminal is HEIGHT rows high" +msgstr "presuma que o terminal tem HEIGHT caracteres de altura" + +#: src/main/help.c:72 +msgid "NAME" +msgstr "" + +#: src/main/help.c:73 +msgid "prefix visual information with NAME" +msgstr "exibe NAME antes das demais informações" + +#: src/main/help.c:75 +msgid "output even if standard error is not a terminal" +msgstr "gera dados mesmo que a saída de erro seja redirecionada" + +#: src/main/help.c:77 +msgid "use cursor positioning escape sequences" +msgstr "utiliza caracteres de escape para posicionar o cursor" + +#: src/main/help.c:79 +msgid "RATE" +msgstr "" + +#: src/main/help.c:80 +msgid "limit transfer to RATE bytes per second" +msgstr "limita a transferência a RATE bytes por segundo" + +#: src/main/help.c:81 +msgid "BYTES" +msgstr "" + +#: src/main/help.c:82 +msgid "use a buffer size of BYTES" +msgstr "use um tamanho de buffer de BYTES" + +#: src/main/help.c:84 +msgid "never use splice(), always use read/write" +msgstr "nunca use splice(), sempre use read/write" + +#: src/main/help.c:86 +msgid "skip read errors in input" +msgstr "ignorar erros de leitura em entrada" + +#: src/main/help.c:88 +msgid "stop after --size bytes have been transferred" +msgstr "parar após --size bytes terem sido transferidos" + +#: src/main/help.c:90 +msgid "PID" +msgstr "" + +#: src/main/help.c:91 +msgid "update settings of process PID" +msgstr "atualizar as configurações do processo PID" + +#: src/main/help.c:94 +msgid "FILE" +msgstr "" + +#: src/main/help.c:95 +msgid "save process ID in FILE" +msgstr "salvar ID do processo em FILE" + +#: src/main/help.c:97 +msgid "PID[:FD]" +msgstr "" + +#: src/main/help.c:98 +msgid "watch file FD opened by process PID" +msgstr "assistir arquivo FD aberto pelo processo PID" + +#: src/main/help.c:101 +msgid "show this help and exit" +msgstr "exibe esta tela de ajuda e termina" + +#: src/main/help.c:103 +msgid "show version information and exit" +msgstr "exibe a versão e termina" + +#: src/main/help.c:109 +#, c-format +msgid "Usage: %s [OPTION] [FILE]..." +msgstr "Uso: %s [OPÇÕES] [ARQUIVOS]..." + +#: src/main/help.c:112 +msgid "" +"Concatenate FILE(s), or standard input, to standard output,\n" +"with monitoring." +msgstr "" +"Concatena ARQUIVO(s) ou a entrada padrão e grava na saída padrão,\n" +"com monitoramento." + +#: src/main/help.c:207 +msgid "" +"Debugging is enabled; export the DEBUG environment variable to define the\n" +"output filename.\n" +msgstr "" +"A depuração está habilitada; exporte a variável de ambiente DEBUG para\n" +"definir o nome do arquivo de saída.\n" + +#: src/main/help.c:211 +#, c-format +msgid "Please report any bugs to %s." +msgstr "Por favor, reporte quaisquer defeitos para %s." + +#: src/main/main.c:74 +msgid "state allocation failed" +msgstr "alocação de memória de status falhou" + +#: src/main/main.c:246 #, fuzzy -msgid "failed to get terminal name" -msgstr "erro abrindo o terminal" +msgid "failed to read terminal attributes" +msgstr "erro ao ler o nome do terminal" -#: src/pv/cursor.c:96 -#, fuzzy -msgid "failed to open lock file" -msgstr "erro fechando o arquivo" +#: src/main/options.c:98 +msgid "option structure allocation failed" +msgstr "erro na alocação da estrutura de opções" -#: src/pv/cursor.c:129 -msgid "lock attempt failed" +#: src/main/options.c:112 +msgid "option structure argv allocation failed" +msgstr "erro na alocação da estrutura de opções argv" + +#: src/main/options.c:151 +msgid "integer argument expected" +msgstr "argumento inteiro esperado" + +#: src/main/options.c:162 +msgid "numeric argument expected" +msgstr "argumento numérico esperado" + +#: src/main/options.c:173 +msgid "process ID or pid:fd pair expected" +msgstr "ID do processo ou par pid:fd esperado" + +#: src/main/options.c:180 +msgid "invalid process ID" +msgstr "ID de processo inválido" + +#: src/main/options.c:316 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "Tente `%s --help' para maiores informações." + +#: src/main/options.c:320 +#, c-format +msgid "Try `%s -h' for more information." +msgstr "Tente `%s -h' para maiores informações." + +#: src/main/options.c:336 +msgid "" +"cannot use line mode or transfer modifier options when watching file " +"descriptors" msgstr "" +"não pode usar o modo de linha ou opções de modificador de transferência ao " +"assistir os descritores de arquivo" -#: src/pv/cursor.c:369 -msgid "failed to open terminal" -msgstr "erro abrindo o terminal" - -#: src/pv/file.c:118 -#, fuzzy -msgid "failed to seek to start of output" -msgstr "erro obtendo informações do arquivo de saída" - -#: src/pv/file.c:214 -msgid "failed to close file" -msgstr "erro fechando o arquivo" - -#: src/pv/file.c:237 -msgid "failed to read file" -msgstr "erro lendo o arquivo" - -#: src/pv/file.c:247 -msgid "failed to stat file" -msgstr "erro obtendo informações do arquivo" - -#: src/pv/file.c:256 -msgid "failed to stat output file" -msgstr "erro obtendo informações do arquivo de saída" - -#: src/pv/file.c:279 -msgid "input file is output file" -msgstr "os arquivos de entrada e saída são o mesmo" - -#: src/pv/display.c:117 -msgid "yzafpnum kMGTPEZY" +#: src/main/options.c:344 +msgid "cannot use cursor positioning when watching file descriptors" msgstr "" +"não pode usar o posicionamento do cursor ao observar os descritores de " +"arquivo" -#: src/pv/display.c:122 -msgid "yzafpnum KMGTPEZY" -msgstr "" +#: src/main/options.c:352 +msgid "cannot use remote control when watching file descriptors" +msgstr "não pode usar o controle remoto ao assistir os descritores de arquivo" -#: src/pv/display.c:532 src/pv/transfer.c:679 -msgid "buffer allocation failed" -msgstr "erro alocando o buffer" +#: src/main/options.c:360 +msgid "cannot transfer files when watching file descriptors" +msgstr "não pode transferir arquivos ao assistir descritores de arquivo" -#: src/pv/display.c:592 src/pv/transfer.c:458 -msgid "B" -msgstr "" +#: src/main/options.c:368 +msgid "not available on systems without /proc/self/fdinfo" +msgstr "não disponível em sistemas sem /proc/self/fdinfo" -#: src/pv/display.c:628 src/pv/display.c:636 -msgid "/s" -msgstr "" +#: src/main/remote.c:221 +msgid "message not received" +msgstr "mensagem não recebida" -#: src/pv/display.c:628 src/pv/display.c:636 -msgid "B/s" -msgstr "B/s" - -#: src/pv/display.c:671 src/pv/display.c:676 src/pv/display.c:738 -msgid "ETA" -msgstr "ETA" - -#: src/pv/transfer.c:341 -msgid "read failed" -msgstr "erro de leitura" - -#: src/pv/transfer.c:359 -msgid "warning: read errors detected" -msgstr "" - -#: src/pv/transfer.c:374 -msgid "file is not seekable" -msgstr "" - -#: src/pv/transfer.c:437 -#, fuzzy -msgid "failed to seek past error" -msgstr "erro obtendo informações do arquivo" - -#: src/pv/transfer.c:456 -msgid "skipped past read error" -msgstr "" - -#: src/pv/transfer.c:631 -msgid "write failed" -msgstr "erro de gravação" - -#: src/pv/transfer.c:770 -msgid "select call failed" -msgstr "erro na chamada da função select" - -#: src/pv/state.c:33 -msgid "none" -msgstr "" +#: src/main/remote.c:328 +msgid "IPC not supported on this system" +msgstr "IPC não suportado neste sistema" #: src/main/version.c:17 -#, fuzzy, c-format +#, c-format msgid "%s %s - Copyright %s %s" msgstr "%s %s - Copyright(C) %s %s" @@ -146,8 +312,8 @@ msgid "" "This program is free software, and is being distributed under the\n" "terms of the Artistic License 2.0." msgstr "" -"Este programa é um software livre, distribuído sob os termos da\n" -"Licença Artística." +"Este programa é um software livre, distribuído sob os termos da\n" +"Licença Artística." #: src/main/version.c:28 msgid "" @@ -155,292 +321,119 @@ msgid "" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." msgstr "" -"Este programa é distribuído com o intuito de que seja útil,\n" -"porém SEM QUAISQUER GARANTIAS; sem inclusive as garantias implícitas de\n" -"COMERCIALIZAÇÃO e ADEQUAÇÃO A OBJETIVOS PARTICULARES." +"Este programa é distribuído com o intuito de que seja útil,\n" +"porém SEM QUAISQUER GARANTIAS; sem inclusive as garantias implícitas de\n" +"COMERCIALIZAÇÃO e ADEQUAÇÃO A OBJETIVOS PARTICULARES." -#: src/main/main.c:73 -#, fuzzy -msgid "state allocation failed" +#: src/pv/cursor.c:80 +msgid "failed to get terminal name" +msgstr "erro ao ler o nome do terminal" + +#: src/pv/cursor.c:125 +msgid "failed to open lock file" +msgstr "erro ao abrir arquivo de bloqueio" + +#: src/pv/cursor.c:159 +msgid "lock attempt failed" +msgstr "tentativa de bloqueio falhou" + +#: src/pv/cursor.c:409 +msgid "failed to open terminal" +msgstr "erro abrindo o terminal" + +#: src/pv/display.c:138 +msgid "yzafpnum kMGTPEZY" +msgstr "" + +#: src/pv/display.c:143 +msgid "yzafpnum KMGTPEZY" +msgstr "" + +#: src/pv/display.c:558 src/pv/transfer.c:679 +msgid "buffer allocation failed" msgstr "erro alocando o buffer" -#: src/main/options.c:98 -#, c-format -msgid "%s: option structure allocation failed (%s)" -msgstr "%s: erro na alocação da estrutura de opções (%s)" - -#: src/main/options.c:114 -#, c-format -msgid "%s: option structure argv allocation failed (%s)" -msgstr "%s: erro na alocação da estrutura de opções argv (%s)" - -#: src/main/options.c:154 -msgid "integer argument expected" +#: src/pv/display.c:618 src/pv/transfer.c:458 +msgid "B" msgstr "" -#: src/main/options.c:165 -msgid "numeric argument expected" +#: src/pv/display.c:654 src/pv/display.c:662 +msgid "/s" msgstr "" -#: src/main/options.c:176 -msgid "process ID or pid:fd pair expected" +#: src/pv/display.c:654 src/pv/display.c:662 +msgid "B/s" +msgstr "B/s" + +#: src/pv/display.c:697 src/pv/display.c:702 src/pv/display.c:764 +msgid "ETA" +msgstr "ETA" + +#: src/pv/file.c:119 +msgid "failed to seek to start of output" +msgstr "não pode mover para o início da produção" + +#: src/pv/file.c:215 +msgid "failed to close file" +msgstr "erro fechando o arquivo" + +#: src/pv/file.c:238 +msgid "failed to read file" +msgstr "erro lendo o arquivo" + +#: src/pv/file.c:248 +msgid "failed to stat file" +msgstr "erro obtendo informações do arquivo" + +#: src/pv/file.c:257 +msgid "failed to stat output file" +msgstr "erro obtendo informações do arquivo de saída" + +#: src/pv/file.c:280 +msgid "input file is output file" +msgstr "os arquivos de entrada e saída são o mesmo" + +#: src/pv/loop.c:520 src/pv/loop.c:590 src/pv/loop.c:642 src/pv/watchpid.c:51 +#: src/pv/watchpid.c:74 src/pv/watchpid.c:84 src/pv/watchpid.c:115 +msgid "pid" msgstr "" -#: src/main/options.c:183 -msgid "invalid process ID" +#: src/pv/state.c:33 +msgid "none" msgstr "" -#: src/main/options.c:317 -#, c-format -msgid "Try `%s --help' for more information." -msgstr "Tente `%s --help' para maiores informações." +#: src/pv/transfer.c:341 +msgid "read failed" +msgstr "erro de leitura" -#: src/main/options.c:321 -#, fuzzy, c-format -msgid "Try `%s -h' for more information." -msgstr "Tente `%s -h' para maiores informações." +#: src/pv/transfer.c:359 +msgid "warning: read errors detected" +msgstr "aviso: erros de leitura detectados" -#: src/main/options.c:338 -#, c-format -msgid "" -"%s: cannot use line mode or transfer modifier options when watching file " -"descriptors" +#: src/pv/transfer.c:374 +msgid "file is not seekable" +msgstr "não pode mover dentro do arquivo" + +#: src/pv/transfer.c:437 +msgid "failed to seek past error" +msgstr "não pode ir além do erro" + +#: src/pv/transfer.c:456 +msgid "skipped past read error" +msgstr "ignorado erro de leitura" + +#: src/pv/transfer.c:631 +msgid "write failed" +msgstr "erro de gravação" + +#: src/pv/transfer.c:770 +msgid "select call failed" +msgstr "erro na chamada da função select" + +#: src/pv/watchpid.c:76 src/pv/watchpid.c:86 src/pv/watchpid.c:117 +msgid "fd" msgstr "" -#: src/main/options.c:348 -#, c-format -msgid "%s: cannot use cursor positioning when watching file descriptors" -msgstr "" - -#: src/main/options.c:358 -#, c-format -msgid "%s: cannot use remote control when watching file descriptors" -msgstr "" - -#: src/main/options.c:368 -#, c-format -msgid "%s: cannot transfer files when watching file descriptors" -msgstr "" - -#: src/main/options.c:378 -#, c-format -msgid "%s: -d: not available on systems without /proc/self/fdinfo" -msgstr "" - -#: src/main/remote.c:218 -msgid "message not received" -msgstr "" - -#: src/main/remote.c:324 -msgid "IPC not supported on this system" -msgstr "" - -#: src/main/help.c:31 -msgid "show progress bar" -msgstr "exibe barra de progressão" - -#: src/main/help.c:33 -msgid "show elapsed time" -msgstr "exibe tempo passado" - -#: src/main/help.c:35 -msgid "show estimated time of arrival (completion)" -msgstr "exibe o tempo estimado de término" - -#: src/main/help.c:38 -#, fuzzy -msgid "show absolute estimated time of arrival (completion)" -msgstr "exibe o tempo estimado de término" - -#: src/main/help.c:40 -msgid "show data transfer rate counter" -msgstr "exibe a taxa de transferência" - -#: src/main/help.c:42 -msgid "show data transfer average rate counter" -msgstr "" - -#: src/main/help.c:44 -msgid "show number of bytes transferred" -msgstr "exibe a quantidade de bytes transferidos" - -#: src/main/help.c:46 -msgid "show percentage of transfer buffer in use" -msgstr "" - -#: src/main/help.c:47 -msgid "NUM" -msgstr "" - -#: src/main/help.c:48 -msgid "show NUM bytes last written" -msgstr "" - -#: src/main/help.c:49 -msgid "FORMAT" -msgstr "" - -#: src/main/help.c:50 -msgid "set output format to FORMAT" -msgstr "" - -#: src/main/help.c:52 -msgid "output percentages, not visual information" -msgstr "exibe apenas as porcentagens, sem informações visuais" - -#: src/main/help.c:54 -msgid "do not output any transfer information at all" -msgstr "executa programa sem exibir quaisquer informações" - -#: src/main/help.c:57 -msgid "display nothing until first byte transferred" -msgstr "não exibe nada até iniciar o processamento" - -#: src/main/help.c:58 src/main/help.c:66 -msgid "SEC" -msgstr "" - -#: src/main/help.c:59 -#, fuzzy -msgid "display nothing until SEC seconds have passed" -msgstr "não exibe nada até iniciar o processamento" - -#: src/main/help.c:60 -msgid "SIZE" -msgstr "" - -#: src/main/help.c:61 -msgid "set estimated data size to SIZE bytes" -msgstr "seta a quantidade estimada de dados em SIZE bytes" - -#: src/main/help.c:63 -msgid "count lines instead of bytes" -msgstr "" - -#: src/main/help.c:65 -msgid "lines are null-terminated" -msgstr "" - -#: src/main/help.c:67 -msgid "update every SEC seconds" -msgstr "atualiza informações a cada SEC segundos" - -#: src/main/help.c:68 -msgid "WIDTH" -msgstr "" - -#: src/main/help.c:69 -msgid "assume terminal is WIDTH characters wide" -msgstr "assume que terminal possui WIDTH caracteres de largura" - -#: src/main/help.c:70 -msgid "HEIGHT" -msgstr "" - -#: src/main/help.c:71 -msgid "assume terminal is HEIGHT rows high" -msgstr "assume que terminal possui WIDTH caracteres de largura" - -#: src/main/help.c:72 -msgid "NAME" -msgstr "" - -#: src/main/help.c:73 -msgid "prefix visual information with NAME" -msgstr "exibe NAME antes das demais informações" - -#: src/main/help.c:75 -msgid "output even if standard error is not a terminal" -msgstr "gera dados mesmo que a saída de erro seja redirecionada" - -#: src/main/help.c:77 -msgid "use cursor positioning escape sequences" -msgstr "utiliza caracteres de escape para posicionar o cursor" - -#: src/main/help.c:79 -msgid "RATE" -msgstr "" - -#: src/main/help.c:80 -msgid "limit transfer to RATE bytes per second" -msgstr "limita a transferência a RATE bytes por segundo" - -#: src/main/help.c:81 -msgid "BYTES" -msgstr "" - -#: src/main/help.c:82 -msgid "use a buffer size of BYTES" -msgstr "" - -#: src/main/help.c:84 -msgid "never use splice(), always use read/write" -msgstr "" - -#: src/main/help.c:86 -msgid "skip read errors in input" -msgstr "" - -#: src/main/help.c:88 -#, fuzzy -msgid "stop after --size bytes have been transferred" -msgstr "exibe a quantidade de bytes transferidos" - -#: src/main/help.c:90 -msgid "PID" -msgstr "" - -#: src/main/help.c:91 -msgid "update settings of process PID" -msgstr "" - -#: src/main/help.c:94 -msgid "FILE" -msgstr "" - -#: src/main/help.c:95 -msgid "save process ID in FILE" -msgstr "" - -#: src/main/help.c:97 -msgid "PID[:FD]" -msgstr "" - -#: src/main/help.c:98 -msgid "watch file FD opened by process PID" -msgstr "" - -#: src/main/help.c:101 -msgid "show this help and exit" -msgstr "exibe esta tela de ajuda e termina" - -#: src/main/help.c:103 -msgid "show version information and exit" -msgstr "exibe a versão e termina" - -#: src/main/help.c:109 -#, c-format -msgid "Usage: %s [OPTION] [FILE]..." -msgstr "Uso: %s [OPÇÕES] [ARQUIVOS]..." - -#: src/main/help.c:112 -msgid "" -"Concatenate FILE(s), or standard input, to standard output,\n" -"with monitoring." -msgstr "" -"Concatena ARQUIVO(s) ou a entrada padrão e grava na saída padrão,\n" -"com monitoramento." - -#: src/main/help.c:201 -msgid "" -"Debugging is enabled; export the DEBUG environment variable to define the\n" -"output filename.\n" -msgstr "" - -#: src/main/help.c:205 -#, c-format -msgid "Please report any bugs to %s." -msgstr "Por favor, reporte quaisquer defeitos para %s." - -#~ msgid "failed to lock terminal" -#~ msgstr "erro abrindo o terminal" +#: src/pv/watchpid.c:120 +msgid "not a regular file or block device" +msgstr "não é um arquivo regular ou dispositivo de bloqueio" diff --git a/src/nls/pv.pot b/src/nls/pv.pot index 671c0fb..81cd3e3 100644 --- a/src/nls/pv.pot +++ b/src/nls/pv.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-30 22:21+0100\n" +"POT-Creation-Date: 2021-03-30 23:28+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,217 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/pv/watchpid.c:51 src/pv/watchpid.c:66 src/pv/watchpid.c:76 -#: src/pv/watchpid.c:107 src/pv/loop.c:519 src/pv/loop.c:580 src/pv/loop.c:632 -msgid "pid" -msgstr "" - -#: src/pv/watchpid.c:68 src/pv/watchpid.c:78 src/pv/watchpid.c:109 -msgid "fd" -msgstr "" - -#: src/pv/watchpid.c:112 -msgid "not a regular file or block device" -msgstr "" - -#: src/pv/cursor.c:53 -msgid "failed to get terminal name" -msgstr "" - -#: src/pv/cursor.c:96 -msgid "failed to open lock file" -msgstr "" - -#: src/pv/cursor.c:129 -msgid "lock attempt failed" -msgstr "" - -#: src/pv/cursor.c:369 -msgid "failed to open terminal" -msgstr "" - -#: src/pv/file.c:118 -msgid "failed to seek to start of output" -msgstr "" - -#: src/pv/file.c:214 -msgid "failed to close file" -msgstr "" - -#: src/pv/file.c:237 -msgid "failed to read file" -msgstr "" - -#: src/pv/file.c:247 -msgid "failed to stat file" -msgstr "" - -#: src/pv/file.c:256 -msgid "failed to stat output file" -msgstr "" - -#: src/pv/file.c:279 -msgid "input file is output file" -msgstr "" - -#: src/pv/display.c:117 -msgid "yzafpnum kMGTPEZY" -msgstr "" - -#: src/pv/display.c:122 -msgid "yzafpnum KMGTPEZY" -msgstr "" - -#: src/pv/display.c:532 src/pv/transfer.c:679 -msgid "buffer allocation failed" -msgstr "" - -#: src/pv/display.c:592 src/pv/transfer.c:458 -msgid "B" -msgstr "" - -#: src/pv/display.c:628 src/pv/display.c:636 -msgid "/s" -msgstr "" - -#: src/pv/display.c:628 src/pv/display.c:636 -msgid "B/s" -msgstr "" - -#: src/pv/display.c:671 src/pv/display.c:676 src/pv/display.c:738 -msgid "ETA" -msgstr "" - -#: src/pv/transfer.c:341 -msgid "read failed" -msgstr "" - -#: src/pv/transfer.c:359 -msgid "warning: read errors detected" -msgstr "" - -#: src/pv/transfer.c:374 -msgid "file is not seekable" -msgstr "" - -#: src/pv/transfer.c:437 -msgid "failed to seek past error" -msgstr "" - -#: src/pv/transfer.c:456 -msgid "skipped past read error" -msgstr "" - -#: src/pv/transfer.c:631 -msgid "write failed" -msgstr "" - -#: src/pv/transfer.c:770 -msgid "select call failed" -msgstr "" - -#: src/pv/state.c:33 -msgid "none" -msgstr "" - -#: src/main/version.c:17 -#, c-format -msgid "%s %s - Copyright %s %s" -msgstr "" - -#: src/main/version.c:20 -#, c-format -msgid "Web site: %s" -msgstr "" - -#: src/main/version.c:23 -msgid "" -"This program is free software, and is being distributed under the\n" -"terms of the Artistic License 2.0." -msgstr "" - -#: src/main/version.c:28 -msgid "" -"This program is distributed in the hope that it will be useful,\n" -"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -msgstr "" - -#: src/main/main.c:73 -msgid "state allocation failed" -msgstr "" - -#: src/main/options.c:98 -#, c-format -msgid "%s: option structure allocation failed (%s)" -msgstr "" - -#: src/main/options.c:114 -#, c-format -msgid "%s: option structure argv allocation failed (%s)" -msgstr "" - -#: src/main/options.c:154 -msgid "integer argument expected" -msgstr "" - -#: src/main/options.c:165 -msgid "numeric argument expected" -msgstr "" - -#: src/main/options.c:176 -msgid "process ID or pid:fd pair expected" -msgstr "" - -#: src/main/options.c:183 -msgid "invalid process ID" -msgstr "" - -#: src/main/options.c:317 -#, c-format -msgid "Try `%s --help' for more information." -msgstr "" - -#: src/main/options.c:321 -#, c-format -msgid "Try `%s -h' for more information." -msgstr "" - -#: src/main/options.c:338 -#, c-format -msgid "" -"%s: cannot use line mode or transfer modifier options when watching file " -"descriptors" -msgstr "" - -#: src/main/options.c:348 -#, c-format -msgid "%s: cannot use cursor positioning when watching file descriptors" -msgstr "" - -#: src/main/options.c:358 -#, c-format -msgid "%s: cannot use remote control when watching file descriptors" -msgstr "" - -#: src/main/options.c:368 -#, c-format -msgid "%s: cannot transfer files when watching file descriptors" -msgstr "" - -#: src/main/options.c:378 -#, c-format -msgid "%s: -d: not available on systems without /proc/self/fdinfo" -msgstr "" - -#: src/main/remote.c:218 -msgid "message not received" -msgstr "" - -#: src/main/remote.c:324 -msgid "IPC not supported on this system" -msgstr "" - #: src/main/help.c:31 msgid "show progress bar" msgstr "" @@ -418,13 +207,221 @@ msgid "" "with monitoring." msgstr "" -#: src/main/help.c:201 +#: src/main/help.c:207 msgid "" "Debugging is enabled; export the DEBUG environment variable to define the\n" "output filename.\n" msgstr "" -#: src/main/help.c:205 +#: src/main/help.c:211 #, c-format msgid "Please report any bugs to %s." msgstr "" + +#: src/main/main.c:74 +msgid "state allocation failed" +msgstr "" + +#: src/main/main.c:246 +msgid "failed to read terminal attributes" +msgstr "" + +#: src/main/options.c:98 +msgid "option structure allocation failed" +msgstr "" + +#: src/main/options.c:112 +msgid "option structure argv allocation failed" +msgstr "" + +#: src/main/options.c:151 +msgid "integer argument expected" +msgstr "" + +#: src/main/options.c:162 +msgid "numeric argument expected" +msgstr "" + +#: src/main/options.c:173 +msgid "process ID or pid:fd pair expected" +msgstr "" + +#: src/main/options.c:180 +msgid "invalid process ID" +msgstr "" + +#: src/main/options.c:316 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "" + +#: src/main/options.c:320 +#, c-format +msgid "Try `%s -h' for more information." +msgstr "" + +#: src/main/options.c:336 +msgid "" +"cannot use line mode or transfer modifier options when watching file " +"descriptors" +msgstr "" + +#: src/main/options.c:344 +msgid "cannot use cursor positioning when watching file descriptors" +msgstr "" + +#: src/main/options.c:352 +msgid "cannot use remote control when watching file descriptors" +msgstr "" + +#: src/main/options.c:360 +msgid "cannot transfer files when watching file descriptors" +msgstr "" + +#: src/main/options.c:368 +msgid "not available on systems without /proc/self/fdinfo" +msgstr "" + +#: src/main/remote.c:221 +msgid "message not received" +msgstr "" + +#: src/main/remote.c:328 +msgid "IPC not supported on this system" +msgstr "" + +#: src/main/version.c:17 +#, c-format +msgid "%s %s - Copyright %s %s" +msgstr "" + +#: src/main/version.c:20 +#, c-format +msgid "Web site: %s" +msgstr "" + +#: src/main/version.c:23 +msgid "" +"This program is free software, and is being distributed under the\n" +"terms of the Artistic License 2.0." +msgstr "" + +#: src/main/version.c:28 +msgid "" +"This program is distributed in the hope that it will be useful,\n" +"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +msgstr "" + +#: src/pv/cursor.c:80 +msgid "failed to get terminal name" +msgstr "" + +#: src/pv/cursor.c:125 +msgid "failed to open lock file" +msgstr "" + +#: src/pv/cursor.c:159 +msgid "lock attempt failed" +msgstr "" + +#: src/pv/cursor.c:409 +msgid "failed to open terminal" +msgstr "" + +#: src/pv/display.c:138 +msgid "yzafpnum kMGTPEZY" +msgstr "" + +#: src/pv/display.c:143 +msgid "yzafpnum KMGTPEZY" +msgstr "" + +#: src/pv/display.c:558 src/pv/transfer.c:679 +msgid "buffer allocation failed" +msgstr "" + +#: src/pv/display.c:618 src/pv/transfer.c:458 +msgid "B" +msgstr "" + +#: src/pv/display.c:654 src/pv/display.c:662 +msgid "/s" +msgstr "" + +#: src/pv/display.c:654 src/pv/display.c:662 +msgid "B/s" +msgstr "" + +#: src/pv/display.c:697 src/pv/display.c:702 src/pv/display.c:764 +msgid "ETA" +msgstr "" + +#: src/pv/file.c:119 +msgid "failed to seek to start of output" +msgstr "" + +#: src/pv/file.c:215 +msgid "failed to close file" +msgstr "" + +#: src/pv/file.c:238 +msgid "failed to read file" +msgstr "" + +#: src/pv/file.c:248 +msgid "failed to stat file" +msgstr "" + +#: src/pv/file.c:257 +msgid "failed to stat output file" +msgstr "" + +#: src/pv/file.c:280 +msgid "input file is output file" +msgstr "" + +#: src/pv/loop.c:520 src/pv/loop.c:590 src/pv/loop.c:642 src/pv/watchpid.c:51 +#: src/pv/watchpid.c:74 src/pv/watchpid.c:84 src/pv/watchpid.c:115 +msgid "pid" +msgstr "" + +#: src/pv/state.c:33 +msgid "none" +msgstr "" + +#: src/pv/transfer.c:341 +msgid "read failed" +msgstr "" + +#: src/pv/transfer.c:359 +msgid "warning: read errors detected" +msgstr "" + +#: src/pv/transfer.c:374 +msgid "file is not seekable" +msgstr "" + +#: src/pv/transfer.c:437 +msgid "failed to seek past error" +msgstr "" + +#: src/pv/transfer.c:456 +msgid "skipped past read error" +msgstr "" + +#: src/pv/transfer.c:631 +msgid "write failed" +msgstr "" + +#: src/pv/transfer.c:770 +msgid "select call failed" +msgstr "" + +#: src/pv/watchpid.c:76 src/pv/watchpid.c:86 src/pv/watchpid.c:117 +msgid "fd" +msgstr "" + +#: src/pv/watchpid.c:120 +msgid "not a regular file or block device" +msgstr "" diff --git a/src/pv/cursor.c b/src/pv/cursor.c index f030fff..8594e30 100644 --- a/src/pv/cursor.c +++ b/src/pv/cursor.c @@ -21,6 +21,7 @@ #include #include #include +#include #ifdef HAVE_IPC #include @@ -34,6 +35,32 @@ #endif /* HAVE_IPC */ +/* + * Write the given buffer to the given file descriptor, retrying until all + * bytes have been written or an error has occurred. + */ +static void write_retry(int fd, const char *buf, size_t count) +{ + while (count > 0) { + ssize_t nwritten; + + nwritten = write(fd, buf, count); + + if (nwritten < 0) { + if ((EINTR == errno) || (EAGAIN == errno)) { + continue; + } + return; + } + if (nwritten < 1) + return; + + count -= nwritten; + buf += nwritten; + } +} + + /* * Create a per-euid, per-tty, lockfile in ${TMPDIR:-${TMP:-/tmp}} for the * tty on the given file descriptor. @@ -69,15 +96,17 @@ static void pv_crs_open_lockfile(pvstate_t state, int fd) if (!tmpdir) tmpdir = "/tmp"; + memset(state->crs_lock_file, 0, sizeof(state->crs_lock_file)); #ifdef HAVE_SNPRINTF - snprintf(state->crs_lock_file, sizeof(state->crs_lock_file) - 1, - "%s/pv-%s-%i.lock", tmpdir, basename(ttydev), - (int) geteuid()); + (void) snprintf(state->crs_lock_file, + sizeof(state->crs_lock_file) - 1, + "%s/pv-%s-%i.lock", tmpdir, basename(ttydev), + (int) geteuid()); #else - sprintf(state->crs_lock_file, - "%.*s/pv-%8s-%i.lock", - sizeof(state->crs_lock_file) - 64, tmpdir, - basename(ttydev), (int) geteuid()); + (void) sprintf(state->crs_lock_file, + "%.*s/pv-%8s-%i.lock", + sizeof(state->crs_lock_file) - 64, tmpdir, + basename(ttydev), (int) geteuid()); #endif /* @@ -113,8 +142,9 @@ static void pv_crs_lock(pvstate_t state, int fd) if (state->crs_lock_fd >= 0) lock_fd = state->crs_lock_fd; - lock.l_type = F_WRLCK; - lock.l_whence = SEEK_SET; + memset(&lock, 0, sizeof(lock)); + lock.l_type = (short) F_WRLCK; + lock.l_whence = (short) SEEK_SET; lock.l_start = 0; lock.l_len = 1; while (fcntl(lock_fd, F_SETLKW, &lock) < 0) { @@ -155,11 +185,12 @@ static void pv_crs_unlock(pvstate_t state, int fd) if (state->crs_lock_fd >= 0) lock_fd = state->crs_lock_fd; - lock.l_type = F_UNLCK; - lock.l_whence = SEEK_SET; + memset(&lock, 0, sizeof(lock)); + lock.l_type = (short) F_UNLCK; + lock.l_whence = (short) SEEK_SET; lock.l_start = 0; lock.l_len = 1; - fcntl(lock_fd, F_SETLK, &lock); + (void) fcntl(lock_fd, F_SETLK, &lock); if (state->crs_lock_fd >= 0) { debug("%s: %s", state->crs_lock_file, @@ -181,10 +212,11 @@ static void pv_crs_ipccount(pvstate_t state) { struct shmid_ds buf; + memset(&buf, 0, sizeof(buf)); buf.shm_nattch = 0; - shmctl(state->crs_shmid, IPC_STAT, &buf); - state->crs_pvcount = buf.shm_nattch; + (void) shmctl(state->crs_shmid, IPC_STAT, &buf); + state->crs_pvcount = (int) (buf.shm_nattch); if (state->crs_pvcount > state->crs_pvmax) state->crs_pvmax = state->crs_pvcount; @@ -204,23 +236,29 @@ static int pv_crs_get_ypos(int terminalfd) struct termios old_tty; char cpr[32]; int ypos; - int r; + ssize_t r; #ifdef CURSOR_ANSWERBACK_BYTE_BY_BYTE int got; #endif /* CURSOR_ANSWERBACK_BYTE_BY_BYTE */ - tcgetattr(terminalfd, &tty); - tcgetattr(terminalfd, &old_tty); + if (0 != tcgetattr(terminalfd, &tty)) { + debug("%s: %s", "tcgetattr (1) failed", strerror(errno)); + } + if (0 != tcgetattr(terminalfd, &old_tty)) { + debug("%s: %s", "tcgetattr (2) failed", strerror(errno)); + } tty.c_lflag &= ~(ICANON | ECHO); - tcsetattr(terminalfd, TCSANOW | TCSAFLUSH, &tty); + if (0 != tcsetattr(terminalfd, TCSANOW | TCSAFLUSH, &tty)) { + debug("%s: %s", "tcsetattr (1) failed", strerror(errno)); + } - write(terminalfd, "\033[6n", 4); + write_retry(terminalfd, "\033[6n", 4); memset(cpr, 0, sizeof(cpr)); #ifdef CURSOR_ANSWERBACK_BYTE_BY_BYTE /* Read answerback byte by byte - fails on AIX */ - for (got = 0, r = 0; got < sizeof(cpr) - 2; got += r) { + for (got = 0, r = 0; got < (int) (sizeof(cpr) - 2); got += r) { r = read(terminalfd, cpr + got, 1); if (r <= 0) { debug("got=%d, r=%d: %s", got, r, strerror(errno)); @@ -249,9 +287,11 @@ static int pv_crs_get_ypos(int terminalfd) } #endif /* CURSOR_ANSWERBACK_BYTE_BY_BYTE */ - ypos = pv_getnum_i(cpr + 2); + ypos = (int) pv_getnum_ui(cpr + 2); - tcsetattr(terminalfd, TCSANOW | TCSAFLUSH, &old_tty); + if (0 != tcsetattr(terminalfd, TCSANOW | TCSAFLUSH, &old_tty)) { + debug("%s: %s", "tcsetattr (2) failed", strerror(errno)); + } debug("%s: %d", "ypos", ypos); @@ -281,7 +321,7 @@ static int pv_crs_ipcinit(pvstate_t state, char *ttyfile, int terminalfd) * we don't end up interfering in any way with instances of `pv' * running on another terminal. */ - key = ftok(ttyfile, 'p'); + key = ftok(ttyfile, (int) 'p'); if (-1 == key) { debug("%s: %s\n", "ftok failed", strerror(errno)); return 1; @@ -300,7 +340,7 @@ static int pv_crs_ipcinit(pvstate_t state, char *ttyfile, int terminalfd) return 1; } - state->crs_y_top = shmat(state->crs_shmid, 0, 0); + state->crs_y_top = shmat(state->crs_shmid, NULL, 0); pv_crs_ipccount(state); @@ -347,7 +387,7 @@ void pv_crs_init(pvstate_t state) int fd; state->crs_lock_fd = -2; - state->crs_lock_file[0] = 0; + state->crs_lock_file[0] = '\0'; if (!state->cursor) return; @@ -368,13 +408,13 @@ void pv_crs_init(pvstate_t state) pv_error(state, "%s: %s: %s", _("failed to open terminal"), ttyfile, strerror(errno)); - state->cursor = 0; + state->cursor = false; return; } #ifdef HAVE_IPC if (pv_crs_ipcinit(state, ttyfile, fd) != 0) { debug("%s", "ipcinit failed, setting noipc flag"); - state->crs_noipc = 1; + state->crs_noipc = true; } /* @@ -397,14 +437,14 @@ void pv_crs_init(pvstate_t state) * initial ypos. */ if (state->crs_y_start > 0) - write(STDERR_FILENO, "\n", 1); + write_retry(STDERR_FILENO, "\n", 1); pv_crs_unlock(state, fd); if (state->crs_y_start < 1) state->cursor = 0; } - close(fd); + (void) close(fd); } @@ -465,7 +505,7 @@ void pv_crs_update(pvstate_t state, char *str) #ifdef HAVE_IPC if (!state->crs_noipc) { - if (state->crs_needreinit) + if (state->crs_needreinit > 0) pv_crs_reinit(state); pv_crs_ipccount(state); @@ -488,7 +528,8 @@ void pv_crs_update(pvstate_t state, char *str) * scroll the screen (only if we're the first `pv'), and then move * our initial Y co-ordinate up. */ - if (((state->crs_y_start + state->crs_pvmax) > state->height) + if (((state->crs_y_start + state->crs_pvmax) > + (int) (state->height)) && (!state->crs_noipc) ) { int offs; @@ -509,10 +550,16 @@ void pv_crs_update(pvstate_t state, char *str) if (0 == state->crs_y_offset) { pv_crs_lock(state, STDERR_FILENO); - sprintf(pos, "\033[%d;1H", state->height); - write(STDERR_FILENO, pos, strlen(pos)); + memset(pos, 0, sizeof(pos)); +# ifdef HAVE_SNPRINTF + (void) snprintf(pos, sizeof(pos) - 1, "\033[%u;1H", + state->height); +# else + (void) sprintf(pos, "\033[%u;1H", state->height); +# endif + write_retry(STDERR_FILENO, pos, strlen(pos)); for (; offs > 0; offs--) { - write(STDERR_FILENO, "\n", 1); + write_retry(STDERR_FILENO, "\n", 1); } pv_crs_unlock(state, STDERR_FILENO); @@ -531,12 +578,18 @@ void pv_crs_update(pvstate_t state, char *str) */ if ((y < 1) || (y > 999999)) y = 1; - sprintf(pos, "\033[%d;1H", y); + + memset(pos, 0, sizeof(pos)); +#ifdef HAVE_SNPRINTF + (void) snprintf(pos, sizeof(pos) - 1, "\033[%d;1H", y); +#else + (void) sprintf(pos, "\033[%d;1H", y); +#endif pv_crs_lock(state, STDERR_FILENO); - write(STDERR_FILENO, pos, strlen(pos)); - write(STDERR_FILENO, str, strlen(str)); + write_retry(STDERR_FILENO, pos, strlen(pos)); + write_retry(STDERR_FILENO, str, strlen(str)); pv_crs_unlock(state, STDERR_FILENO); } @@ -548,11 +601,11 @@ void pv_crs_update(pvstate_t state, char *str) void pv_crs_fini(pvstate_t state) { char pos[32]; - int y; + unsigned int y; debug("%s", "fini"); - y = state->crs_y_start; + y = (unsigned int) (state->crs_y_start); #ifdef HAVE_IPC if ((state->crs_pvmax > 0) && (!state->crs_noipc)) @@ -568,34 +621,39 @@ void pv_crs_fini(pvstate_t state) if ((y < 1) || (y > 999999)) y = 1; - sprintf(pos, "\033[%d;1H\n", y); + memset(pos, 0, sizeof(pos)); +#ifdef HAVE_SNPRINTF + (void) snprintf(pos, sizeof(pos) - 1, "\033[%u;1H\n", y); +#else + (void) sprintf(pos, "\033[%u;1H\n", y); +#endif pv_crs_lock(state, STDERR_FILENO); - write(STDERR_FILENO, pos, strlen(pos)); + write_retry(STDERR_FILENO, pos, strlen(pos)); #ifdef HAVE_IPC pv_crs_ipccount(state); - shmdt((void *) state->crs_y_top); + (void) shmdt((void *) state->crs_y_top); /* * If we are the last instance detaching from the shared memory, * delete it so it's not left lying around. */ if (state->crs_pvcount < 2) - shmctl(state->crs_shmid, IPC_RMID, 0); + (void) shmctl(state->crs_shmid, IPC_RMID, NULL); #endif /* HAVE_IPC */ pv_crs_unlock(state, STDERR_FILENO); if (state->crs_lock_fd >= 0) { - close(state->crs_lock_fd); + (void) close(state->crs_lock_fd); /* * We can get away with removing this on exit because all * the other PVs will be finishing at the same sort of time. */ - remove(state->crs_lock_file); + (void) remove(state->crs_lock_file); } } diff --git a/src/pv/display.c b/src/pv/display.c index 2627152..5b4fcad 100644 --- a/src/pv/display.c +++ b/src/pv/display.c @@ -28,12 +28,33 @@ void pv_error(pvstate_t state, char *format, ...) fprintf(stderr, "\n"); fprintf(stderr, "%s: ", state->program_name); va_start(ap, format); - vfprintf(stderr, format, ap); + (void) vfprintf(stderr, format, ap); va_end(ap); fprintf(stderr, "\n"); } +/* + * Return true if we are the foreground process on the terminal, or if we + * aren't outputting to a terminal; false otherwise. + */ +bool pv_in_foreground(void) +{ + pid_t our_process_group; + pid_t tty_process_group; + + if (0 == isatty(STDERR_FILENO)) + return true; + + our_process_group = getpgrp(); + tty_process_group = tcgetpgrp(STDERR_FILENO); + if (our_process_group == tty_process_group) + return true; + + return false; +} + + /* * Fill in *width and *height with the current terminal size, * if possible. @@ -43,7 +64,7 @@ void pv_screensize(unsigned int *width, unsigned int *height) #ifdef TIOCGWINSZ struct winsize wsz; - if (isatty(STDERR_FILENO)) { + if (0 != isatty(STDERR_FILENO)) { if (0 == ioctl(STDERR_FILENO, TIOCGWINSZ, &wsz)) { *width = wsz.ws_col; *height = wsz.ws_row; @@ -213,7 +234,11 @@ static void pv__sizestr(char *buffer, int bufsize, char *format, str_disp, si_prefix, suffix); } +#ifdef HAVE_SNPRINTF snprintf(buffer, bufsize, format, sizestr_buffer); +#else + sprintf(buffer, format, sizestr_buffer); +#endif } @@ -244,8 +269,8 @@ static void pv__format_init(pvstate_t state) } formatstr = - state->format_string ? state-> - format_string : state->default_format; + state->format_string ? state->format_string : state-> + default_format; state->components_used = 0; @@ -274,7 +299,7 @@ static void pv__format_init(pvstate_t state) for (strpos = 0; formatstr[strpos] != 0 && segment < 99; strpos++, segment++) { if ('%' == formatstr[strpos]) { - int num; + unsigned int num; strpos++; num = 0; while (isdigit(formatstr[strpos])) { @@ -470,6 +495,7 @@ static char *pv__format(pvstate_t state, * update or if the average rate display is enabled. Otherwise it's * not worth the extra CPU cycles. */ + average_rate = 0; if ((bytes_since_last < 0) || ((state->components_used & PV_DISPLAY_AVERAGERATE) != 0)) { /* Sanity check to avoid division by zero */ @@ -682,7 +708,7 @@ static char *pv__format(pvstate_t state, * ETA used to be. */ if (bytes_since_last < 0) { - int i; + unsigned int i; for (i = 0; i < sizeof(state->str_eta) && state->str_eta[i] != 0; i++) { state->str_eta[i] = ' '; @@ -744,7 +770,7 @@ static char *pv__format(pvstate_t state, } if (!show_eta) { - int i; + unsigned int i; for (i = 0; i < sizeof(state->str_fineta) && state->str_fineta[i] != 0; i++) { state->str_fineta[i] = ' '; @@ -796,7 +822,7 @@ static char *pv__format(pvstate_t state, available_width = 0; if (available_width > - sizeof(state->str_progress) - 16) + (int) (sizeof(state->str_progress)) - 16) available_width = sizeof(state->str_progress) - 16; @@ -826,7 +852,7 @@ static char *pv__format(pvstate_t state, available_width = 0; if (available_width > - sizeof(state->str_progress) - 16) + (int) (sizeof(state->str_progress)) - 16) available_width = sizeof(state->str_progress) - 16; @@ -882,7 +908,8 @@ static char *pv__format(pvstate_t state, if (segment_length < 1) break; /* Skip segment if it would make the display too wide */ - if (segment_length + display_string_length > state->width) + if (segment_length + display_string_length > + (int) (state->width)) break; strncat(state->display_buffer, state->format[segment].string, segment_length); @@ -895,7 +922,7 @@ static char *pv__format(pvstate_t state, */ output_length = strlen(state->display_buffer); if ((output_length < state->prev_length) - && (state->width >= state->prev_width)) { + && ((int) (state->width) >= state->prev_width)) { char spaces[32]; int spaces_to_add; spaces_to_add = state->prev_length - output_length; @@ -954,12 +981,16 @@ void pv_display(pvstate_t state, long double esec, long long sl, if (state->numeric) { write(STDERR_FILENO, display, strlen(display)); } else if (state->cursor) { - pv_crs_update(state, display); - state->display_visible = 1; + if (pv_in_foreground()) { + pv_crs_update(state, display); + state->display_visible = true; + } } else { - write(STDERR_FILENO, display, strlen(display)); - write(STDERR_FILENO, "\r", 1); - state->display_visible = 1; + if (pv_in_foreground()) { + write(STDERR_FILENO, display, strlen(display)); + write(STDERR_FILENO, "\r", 1); + state->display_visible = true; + } } debug("%s: [%s]", "display", display); diff --git a/src/pv/file.c b/src/pv/file.c index aab1cb4..71f1787 100644 --- a/src/pv/file.c +++ b/src/pv/file.c @@ -36,6 +36,7 @@ unsigned long long pv_calc_total_size(pvstate_t state) total = 0; rc = 0; + memset(&sb, 0, sizeof(sb)); /* * No files specified - check stdin. diff --git a/src/pv/loop.c b/src/pv/loop.c index 59aac10..c006d22 100644 --- a/src/pv/loop.c +++ b/src/pv/loop.c @@ -166,7 +166,8 @@ int pv_main_loop(pvstate_t state) * try to write more than we're allowed to. */ if ((0 < state->size) && (state->stop_at_size)) { - if ((state->size < (total_written + cansend)) + if (((long) (state->size) < + (total_written + cansend)) || ((0 == cansend) && (0 == state->rate_limit))) { cansend = state->size - total_written; @@ -505,7 +506,7 @@ int pv_watchpid_loop(pvstate_t state) struct pvstate_s *state_array = NULL; int array_length = 0; int fd_to_idx[FD_SETSIZE] = { 0, }; - struct timeval next_update, cur_time, next_remotecheck; + struct timeval next_update, cur_time; int idx; int prev_displayed_lines, blank_lines; int first_pass = 1; @@ -532,19 +533,31 @@ int pv_watchpid_loop(pvstate_t state) * it's not present. */ original_format_string = - state->format_string ? state-> - format_string : state->default_format; + state->format_string ? state->format_string : state-> + default_format; if (NULL == strstr(original_format_string, "%N")) { +#ifdef HAVE_SNPRINTF snprintf(new_format_string, sizeof(new_format_string) - 1, - "%%N %s", original_format_string); +#else + sprintf(new_format_string, +#endif + "%%N %s", original_format_string); } else { +#ifdef HAVE_SNPRINTF snprintf(new_format_string, sizeof(new_format_string) - 1, - "%s", original_format_string); +#else + sprintf(new_format_string, +#endif + "%s", original_format_string); } state_copy.format_string = NULL; +#ifdef HAVE_SNPRINTF snprintf(state_copy.default_format, - sizeof(state_copy.default_format) - 1, "%s", - new_format_string); + sizeof(state_copy.default_format) - 1, +#else + sprintf(state_copy.default_format, +#endif + "%.510s", new_format_string); /* * Get things ready for the main loop. @@ -552,9 +565,6 @@ int pv_watchpid_loop(pvstate_t state) gettimeofday(&cur_time, NULL); - next_remotecheck.tv_sec = cur_time.tv_sec; - next_remotecheck.tv_usec = cur_time.tv_usec; - next_update.tv_sec = cur_time.tv_sec; next_update.tv_usec = cur_time.tv_usec; pv_timeval_add_usec(&next_update, @@ -649,7 +659,7 @@ int pv_watchpid_loop(pvstate_t state) struct timeval init_time; long double elapsed; - if (displayed_lines >= state->height) + if (displayed_lines >= (int) (state->height)) break; idx = fd_to_idx[fd]; @@ -733,7 +743,7 @@ int pv_watchpid_loop(pvstate_t state) debug("%s: %d", "adding blank lines", blank_lines); while (blank_lines > 0) { - int x; + unsigned int x; if (displayed_lines > 0) write(STDERR_FILENO, "\n", 1); for (x = 0; x < state->width; x++) @@ -756,7 +766,7 @@ int pv_watchpid_loop(pvstate_t state) */ blank_lines = prev_displayed_lines; while (blank_lines > 0) { - int x; + unsigned int x; for (x = 0; x < state->width; x++) write(STDERR_FILENO, " ", 1); write(STDERR_FILENO, "\r", 1); diff --git a/src/pv/number.c b/src/pv/number.c index b0c5572..d841402 100644 --- a/src/pv/number.c +++ b/src/pv/number.c @@ -13,31 +13,31 @@ * including causes weird versioned glibc dependencies on certain * Red Hat systems, complicating package management. */ -static int pv__isdigit(char c) +static bool pv__isdigit(char c) { - return ((c >= '0') && (c <= '9')); + return ((c >= '0') && (c <= '9')) ? true : false; } /* - * Return the numeric value of "str", as a long long. + * Return the numeric value of "str", as an unsigned long long. */ -long long pv_getnum_ll(const char *str) +unsigned long long pv_getnum_ull(const char *str) { - long long n = 0; - long long decimal = 0; - int decdivisor = 1; - int shift = 0; + unsigned long long n = 0; + unsigned long long decimal = 0; + unsigned int decdivisor = 1; + unsigned int shift = 0; - if (0 == str) + if (NULL == str) return n; - while (str[0] != 0 && (!pv__isdigit(str[0]))) + while (str[0] != '\0' && (!pv__isdigit(str[0]))) str++; for (; pv__isdigit(str[0]); str++) { n = n * 10; - n += (str[0] - '0'); + n += (unsigned long long) (str[0] - '0'); } /* @@ -48,7 +48,8 @@ long long pv_getnum_ll(const char *str) for (; pv__isdigit(str[0]); str++) { if (decdivisor < 10000) { decimal = decimal * 10; - decimal += (str[0] - '0'); + decimal += + (unsigned long long) (str[0] - '0'); decdivisor = decdivisor * 10; } } @@ -58,7 +59,7 @@ long long pv_getnum_ll(const char *str) * Parse any units given (K=KiB=*1024, M=MiB=1024KiB, G=GiB=1024MiB, * T=TiB=1024GiB). */ - if (str[0]) { + if (str[0] != '\0') { while ((' ' == str[0]) || ('\t' == str[0])) str++; switch (str[0]) { @@ -89,7 +90,7 @@ long long pv_getnum_ll(const char *str) * more than 30 at a time to avoid overflows. */ while (shift > 0) { - int shiftby; + unsigned int shiftby; shiftby = shift; if (shiftby > 30) @@ -118,15 +119,15 @@ double pv_getnum_d(const char *str) double n = 0.0; double step = 1; - if (0 == str) + if (NULL == str) return n; - while (str[0] != 0 && (!pv__isdigit(str[0]))) + while (str[0] != '\0' && (!pv__isdigit(str[0]))) str++; for (; pv__isdigit(str[0]); str++) { n = n * 10; - n += (str[0] - '0'); + n += (double) (str[0] - '0'); } if ((str[0] != '.') && (str[0] != ',')) @@ -136,7 +137,7 @@ double pv_getnum_d(const char *str) for (; pv__isdigit(str[0]) && step < 1000000; str++) { step = step * 10; - n += (str[0] - '0') / step; + n += ((double) (str[0] - '0')) / step; } return n; @@ -144,11 +145,11 @@ double pv_getnum_d(const char *str) /* - * Return the numeric value of "str", as an int. + * Return the numeric value of "str", as an unsigned int. */ -int pv_getnum_i(const char *str) +unsigned int pv_getnum_ui(const char *str) { - return (int) pv_getnum_ll(str); + return (unsigned int) pv_getnum_ull(str); } @@ -176,7 +177,7 @@ int pv_getnum_check(const char *str, pv_numtype_t type) for (; pv__isdigit(str[0]); str++); } - if (0 == str[0]) + if ('\0' == str[0]) return 0; /* @@ -202,7 +203,7 @@ int pv_getnum_check(const char *str, pv_numtype_t type) return 1; } - if (str[0] != 0) + if (str[0] != '\0') return 1; return 0; diff --git a/src/pv/signal.c b/src/pv/signal.c index e4b7aac..2954ee7 100644 --- a/src/pv/signal.c +++ b/src/pv/signal.c @@ -25,7 +25,8 @@ static pvstate_t pv_sig_state = NULL; * subsequent SIGCONT we can try writing to the terminal again, in case we * get backgrounded and later get foregrounded again. */ -static void pv_sig_ttou(int s) +static void pv_sig_ttou( __attribute__ ((unused)) + int s) { int fd; @@ -45,7 +46,8 @@ static void pv_sig_ttou(int s) * Handle SIGTSTP (stop typed at tty) by storing the time the signal * happened for later use by pv_sig_cont(), and then stopping the process. */ -static void pv_sig_tstp(int s) +static void pv_sig_tstp( __attribute__ ((unused)) + int s) { gettimeofday(&(pv_sig_state->pv_sig_tstp_time), NULL); raise(SIGSTOP); @@ -57,7 +59,8 @@ static void pv_sig_tstp(int s) * last SIGTSTP to the elapsed time offset, and by trying to write to the * terminal again (by replacing the /dev/null stderr with the old stderr). */ -static void pv_sig_cont(int s) +static void pv_sig_cont( __attribute__ ((unused)) + int s) { struct timeval tv; struct termios t; @@ -111,7 +114,8 @@ static void pv_sig_cont(int s) /* * Handle SIGWINCH (window size changed) by setting a flag. */ -static void pv_sig_winch(int s) +static void pv_sig_winch( __attribute__ ((unused)) + int s) { pv_sig_state->pv_sig_newsize = 1; } @@ -120,7 +124,8 @@ static void pv_sig_winch(int s) /* * Handle termination signals by setting the abort flag. */ -static void pv_sig_term(int s) +static void pv_sig_term( __attribute__ ((unused)) + int s) { pv_sig_state->pv_sig_abort = 1; } @@ -211,7 +216,7 @@ void pv_sig_init(pvstate_t state) /* * Shut down signal handling. */ -void pv_sig_fini(pvstate_t state) +void pv_sig_fini( __attribute__ ((unused)) pvstate_t state) { sigaction(SIGPIPE, &(pv_sig_state->pv_sig_old_sigpipe), NULL); sigaction(SIGTTOU, &(pv_sig_state->pv_sig_old_sigttou), NULL); diff --git a/src/pv/state.c b/src/pv/state.c index 5673c5b..be41fa2 100644 --- a/src/pv/state.c +++ b/src/pv/state.c @@ -17,8 +17,8 @@ pvstate_t pv_state_alloc(const char *program_name) pvstate_t state; state = calloc(1, sizeof(*state)); - if (0 == state) - return 0; + if (NULL == state) + return NULL; state->program_name = program_name; state->watch_pid = 0; @@ -34,7 +34,7 @@ pvstate_t pv_state_alloc(const char *program_name) #ifdef HAVE_SPLICE state->splice_failed_fd = -1; #endif /* HAVE_SPLICE */ - state->display_visible = 0; + state->display_visible = false; return state; } @@ -65,20 +65,20 @@ void pv_state_free(pvstate_t state) /* * Set the formatting string, given a set of old-style formatting options. */ -void pv_state_set_format(pvstate_t state, unsigned char progress, - unsigned char timer, unsigned char eta, - unsigned char fineta, unsigned char rate, - unsigned char average_rate, unsigned char bytes, - unsigned char bufpercent, +void pv_state_set_format(pvstate_t state, bool progress, + bool timer, bool eta, + bool fineta, bool rate, + bool average_rate, bool bytes, + bool bufpercent, unsigned int lastwritten, const char *name) { #define PV_ADDFORMAT(x,y) if (x) { \ - if (state->default_format[0] != 0) \ + if (state->default_format[0] != '\0') \ strcat(state->default_format, " "); \ strcat(state->default_format, y); \ } - state->default_format[0] = 0; + state->default_format[0] = '\0'; PV_ADDFORMAT(name, "%N"); PV_ADDFORMAT(bytes, "%b"); PV_ADDFORMAT(bufpercent, "%T"); @@ -90,8 +90,14 @@ void pv_state_set_format(pvstate_t state, unsigned char progress, PV_ADDFORMAT(fineta, "%I"); if (lastwritten > 0) { char buf[16]; - sprintf(buf, "%%%uA", lastwritten); - PV_ADDFORMAT(lastwritten, buf); + memset(buf, 0, sizeof(buf)); +#ifdef HAVE_SNPRINTF + (void) snprintf(buf, sizeof(buf) - 1, "%%%uA", + lastwritten); +#else + (void) sprintf(buf, "%%%uA", lastwritten); +#endif + PV_ADDFORMAT(lastwritten > 0, buf); } state->name = name; @@ -99,22 +105,22 @@ void pv_state_set_format(pvstate_t state, unsigned char progress, } -void pv_state_force_set(pvstate_t state, unsigned char val) +void pv_state_force_set(pvstate_t state, bool val) { state->force = val; } -void pv_state_cursor_set(pvstate_t state, unsigned char val) +void pv_state_cursor_set(pvstate_t state, bool val) { state->cursor = val; }; -void pv_state_numeric_set(pvstate_t state, unsigned char val) +void pv_state_numeric_set(pvstate_t state, bool val) { state->numeric = val; }; -void pv_state_wait_set(pvstate_t state, unsigned char val) +void pv_state_wait_set(pvstate_t state, bool val) { state->wait = val; }; @@ -124,27 +130,27 @@ void pv_state_delay_start_set(pvstate_t state, double val) state->delay_start = val; }; -void pv_state_linemode_set(pvstate_t state, unsigned char val) +void pv_state_linemode_set(pvstate_t state, bool val) { state->linemode = val; }; -void pv_state_null_set(pvstate_t state, unsigned char val) +void pv_state_null_set(pvstate_t state, bool val) { state->null = val; }; -void pv_state_no_op_set(pvstate_t state, unsigned char val) +void pv_state_no_op_set(pvstate_t state, bool val) { state->no_op = val; }; -void pv_state_skip_errors_set(pvstate_t state, unsigned char val) +void pv_state_skip_errors_set(pvstate_t state, unsigned int val) { state->skip_errors = val; }; -void pv_state_stop_at_size_set(pvstate_t state, unsigned char val) +void pv_state_stop_at_size_set(pvstate_t state, bool val) { state->stop_at_size = val; }; @@ -160,7 +166,7 @@ void pv_state_target_buffer_size_set(pvstate_t state, state->target_buffer_size = val; }; -void pv_state_no_splice_set(pvstate_t state, unsigned char val) +void pv_state_no_splice_set(pvstate_t state, bool val) { state->no_splice = val; }; diff --git a/src/pv/transfer.c b/src/pv/transfer.c index ee33df0..6e8f313 100644 --- a/src/pv/transfer.c +++ b/src/pv/transfer.c @@ -160,19 +160,20 @@ static ssize_t pv__transfer_write_repeated(int fd, void *buf, size_t count) * out of time - also on our gettimeofday() check. */ if (count > 0) { +# if 0 /* disabled after 1.6.0 - see comment above */ fd_set writefds; struct timeval tv; - - tv.tv_sec = 0; - tv.tv_usec = 0; - FD_ZERO(&writefds); - FD_SET(fd, &writefds); +# endif debug("%s %d: %s (%ld %s, %ld %s)", "fd", fd, "trying another write after partial buffer flush", nwritten, "written", count, "remaining"); # if 0 /* disabled after 1.6.0 - see comment above */ + tv.tv_sec = 0; + tv.tv_usec = 0; + FD_ZERO(&writefds); + FD_SET(fd, &writefds); if (select(fd + 1, NULL, &writefds, NULL, &tv) < 1) break; # endif @@ -211,8 +212,7 @@ static ssize_t pv__transfer_write_repeated(int fd, void *buf, size_t count) */ static int pv__transfer_read(pvstate_t state, int fd, int *eof_in, int *eof_out, - unsigned long long allowed, - long *lineswritten) + unsigned long long allowed) { unsigned long bytes_can_read; unsigned long amount_to_skip; @@ -484,7 +484,7 @@ static int pv__transfer_read(pvstate_t state, int fd, * On error, sets *eof_out to 1, sets state->written to -1, and updates * state->exit_status. */ -static int pv__transfer_write(pvstate_t state, int fd, +static int pv__transfer_write(pvstate_t state, int *eof_in, int *eof_out, long *lineswritten) { @@ -531,8 +531,8 @@ static int pv__transfer_write(pvstate_t state, int fd, for (ptr++; ptr - (char *) state->transfer_buffer - - state->write_position < nwritten; - ptr++) { + state->write_position < + (size_t) nwritten; ptr++) { if (*ptr == '\0') ++lines; } @@ -738,7 +738,7 @@ long pv_transfer(pvstate_t state, int fd, int *eof_in, int *eof_out, */ state->to_write = state->read_position - state->write_position; if ((state->rate_limit > 0) || (allowed > 0)) { - if (state->to_write > allowed) { + if ((unsigned long long) (state->to_write) > allowed) { state->to_write = allowed; } } @@ -784,8 +784,7 @@ long pv_transfer(pvstate_t state, int fd, int *eof_in, int *eof_out, */ if (FD_ISSET(fd, &readfds)) { if (pv__transfer_read - (state, fd, eof_in, eof_out, allowed, - lineswritten) == 0) + (state, fd, eof_in, eof_out, allowed) == 0) return 0; } @@ -831,7 +830,7 @@ long pv_transfer(pvstate_t state, int fd, int *eof_in, int *eof_out, && (state->read_position > state->write_position) && (state->to_write > 0)) { if (pv__transfer_write - (state, fd, eof_in, eof_out, lineswritten) == 0) + (state, eof_in, eof_out, lineswritten) == 0) return 0; } #ifdef MAXIMISE_BUFFER_FILL diff --git a/src/pv/watchpid.c b/src/pv/watchpid.c index 0fa147e..3fccde9 100644 --- a/src/pv/watchpid.c +++ b/src/pv/watchpid.c @@ -52,12 +52,20 @@ int pv_watchfd_info(pvstate_t state, pvwatchfd_t info, int automatic) info->watch_pid, strerror(errno)); return 1; } - +#ifdef HAVE_SNPRINTF snprintf(info->file_fdinfo, sizeof(info->file_fdinfo) - 1, - "/proc/%u/fdinfo/%d", info->watch_pid, info->watch_fd); +#else + sprintf(info->file_fdinfo, +#endif + "/proc/%u/fdinfo/%d", info->watch_pid, info->watch_fd); +#ifdef HAVE_SNPRINTF snprintf(info->file_fd, sizeof(info->file_fd) - 1, - "/proc/%u/fd/%d", info->watch_pid, info->watch_fd); +#else + sprintf(info->file_fd, +#endif + "/proc/%u/fd/%d", info->watch_pid, info->watch_fd); + memset(info->file_fdpath, 0, sizeof(info->file_fdpath)); if (readlink (info->file_fd, info->file_fdpath, sizeof(info->file_fdpath) - 1) < 0) { @@ -183,7 +191,11 @@ int pv_watchpid_scanfds(pvstate_t state, pvstate_t pristine, struct pvwatchfd_s *info_array = NULL; struct pvstate_s *state_array = NULL; +#ifdef HAVE_SNPRINTF snprintf(fd_dir, sizeof(fd_dir) - 1, "/proc/%u/fd", watch_pid); +#else + sprintf(fd_dir, "/proc/%u/fd", watch_pid); +#endif dptr = opendir(fd_dir); if (NULL == dptr) return 1; @@ -362,20 +374,29 @@ void pv_watchpid_setname(pvstate_t state, pvwatchfd_t info) max_display_length = (state->width / 2) - 6; if (max_display_length >= path_length) { +#ifdef HAVE_SNPRINTF snprintf(info->display_name, - sizeof(info->display_name) - 1, "%4d:%s", - info->watch_fd, info->file_fdpath); + sizeof(info->display_name) - 1, +#else + sprintf(info->display_name, +#endif + "%4d:%.498s", info->watch_fd, info->file_fdpath); } else { int prefix_length, suffix_length; prefix_length = max_display_length / 4; suffix_length = max_display_length - prefix_length - 3; +#ifdef HAVE_SNPRINTF snprintf(info->display_name, - sizeof(info->display_name) - 1, "%4d:%.*s...%.*s", - info->watch_fd, prefix_length, info->file_fdpath, - suffix_length, - info->file_fdpath + path_length - suffix_length); + sizeof(info->display_name) - 1, +#else + sprintf(info->display_name, +#endif + "%4d:%.*s...%.*s", + info->watch_fd, prefix_length, info->file_fdpath, + suffix_length, + info->file_fdpath + path_length - suffix_length); } debug("%s: %d: [%s]", "set name for fd", info->watch_fd,