Commit Graph
498 Commits
Author SHA1 Message Date
Andrew Wood ae60fc0688 Move output_fd into HAVE_SPLICE. 2026-05-03 17:06:47 +01:00
Andrew Wood 11d727a88d In discard mode, if splice() is available, open a file descriptor to /dev/null and splice the input to that, to improve performance (#191). 2026-05-03 14:53:45 +01:00
Andrew Wood b75ecd79d5 Add comments explaining the steps (#188). 2026-05-03 13:42:27 +01:00
Andrew Wood 5fb7e49848 Start the intermediary pipe buffer size at 1MiB (#188). 2026-05-03 13:41:52 +01:00
Andrew Wood 21c8237a73 When splice() is available but neither the input nor the output are pipes, splice the input through an intermediary pipe (#188). 2026-05-03 01:12:33 +01:00
Andrew Wood 17cbab3045 Add an option "-J" / "--pipe-buffer-size" to set the size of the output pipe buffer when the output is a pipe, and when that option is not specified, automatically increase the output pipe buffer size to match that of the input, when the first input is also a pipe (#188). 2026-05-02 16:42:35 +01:00
Andrew Wood d421024fb8 Run through "make indent" for consistency, update message line numbers. 2026-05-01 19:47:10 +01:00
Wolfgang Hoschek e7d188ac65 fix: avoid EOF hang on unread pipe output (#189)
At EOF, pv waits for bytes already written to an output pipe to be consumed before finishing. If the downstream reader exits without reading those bytes, the pipe can keep reporting unread data forever. Since pv has no more input, there is no later write that would fail with EPIPE and break the wait.

Detect this EOF drain-wait case with a non-blocking poll() on the output pipe. When the pipe reports that its readers are gone, mark the pipe closed and stop waiting for bytes that can no longer be consumed. While a reader is still present, keep the existing behaviour and continue waiting for the pipe buffer to drain.

Add regression coverage for both ways pv can reach this state: direct input that leaves unread output bytes behind, and a pipeline where the original producer fails but an intermediate filter such as gzip still emits a valid empty stream. The latter matters because pv can still have pending output at EOF even when the command at the start of the pipeline failed immediately.

Signed-off-by: Wolfgang Hoschek <wolfgang.hoschek@mac.com>
2026-04-30 04:47:09 -04:00
Andrew Wood 79a6420fea Replace the fixed-sized buffer file_fdpath with a dynamically allocated equivalent. 2026-04-29 21:43:46 +01:00
Andrew Wood a3f0caeab4 Record the received number before setting the exit trigger, so it will definitely be available for reporting (#187). 2026-04-28 22:55:16 +01:00
Andrew Wood 478039f539 Report which signal triggered the exit (#187). 2026-04-28 22:53:23 +01:00
Andrew Wood 2a25221eaf Suppress the error message about a signal interrupt in cursor mode in all but the first instance in a pipeline (#187). 2026-04-27 21:27:20 +01:00
Andrew Wood c763f1fcaa Write an error message if interrupted by a signal such as SIGINT (#187). 2026-04-26 21:45:36 +01:00
Andrew Wood 8b4fa8ade7 Clear the terminal flag ECHOCTL before starting, and set it again at the end, similar to how TOSTOP is dealt with (#187). 2026-04-26 20:01:22 +01:00
Andrew Wood 57f0b91d16 Adjust the watchfd changes for Apple builds. 2026-04-25 23:05:17 +01:00
Andrew Wood 2a31b73a32 Replace the fixed-sized buffers file_fdinfo and file_fdsymlink with dynamically allocated equivalents. 2026-04-25 22:04:38 +01:00
Andrew Wood ee96f3f43b Specify which watched PID had the problem. 2026-04-25 21:04:41 +01:00
Andrew Wood 2b1d359281 Use pv_asprintf() to allocate fd_dir instead of having it statically sized. 2026-04-25 21:03:09 +01:00
Andrew Wood 4854d71aa9 Adjustment from "make indent". 2026-04-25 21:01:56 +01:00
Andrew Wood 18b1926d61 Replace the fixed-size "cwd" buffer with a dynamically allocated one. 2026-04-24 23:00:45 +01:00
Andrew Wood 43a54bd541 Rename the pvwatchfd "file_fd" item to "file_fdsymlink" to to better distinguish it from the other structure members. 2026-04-23 21:42:10 +01:00
Andrew Wood bf371e9a8c Tidy up comments. 2026-04-22 22:21:36 +01:00
Andrew Wood 239a20d13f Tidy up comments. 2026-04-21 23:45:56 +01:00
Andrew Wood 496b1e431e Return a boolean from pv__transfer_read/write, where false indicates a transient error. 2026-04-19 21:47:46 +01:00
Andrew Wood ef9240a7a5 Add another _ to the internal read/write_repeated functions so they are easier to distinguish from pv__transfer_read/write when searching. 2026-04-19 21:15:33 +01:00
Andrew Wood b2f44b6724 Clamp the calculated ETA to within the size of a long integer to avoid over/underflows, and round off the floating point value rather than just truncating the decimal portion. 2026-04-19 17:57:32 +01:00
Andrew Wood f3353cb4bd Adjust the ETA max to 68 years on systems where a long integer is 32 bits wide, as that is all that will fit. 2026-04-19 16:58:05 +01:00
Andrew Wood 9f63212a7c Add pv_asprintf() and change the way the terminal lock file is stored, so it is in a dynamically allocated buffer rather than using one of a fixed size. 2026-04-19 16:24:26 +01:00
Andrew Wood 3bc102c334 Increase the ETA max cutoff to just under 1,000,000 days, not 100,000. 2026-04-19 13:04:05 +01:00
Andrew Wood d638cd50f4 Remove pv_bound_long() and the blanket 100,000 hour cutoff - instead, clamp the ETA to just under 100,000 hours (to keep it from getting too wide), clamp the FINETA to a max of 7,000 years (to keep the date the same width), and make the timer show an overflow message when 1,000,000 days is reached. 2026-04-19 13:02:03 +01:00
Andrew Wood ebbcdf4b4d Remove obsolete TODO - there is no open issue for it, and it doesn't explain what "better" means. 2026-04-19 12:16:48 +01:00
Andrew Wood 7dc02a475e Make pv_error() and pv_perror() available outside of src/pv/, and use them throughout the program. 2026-04-18 22:23:28 +01:00
Andrew Wood 25f43e129f Use pv_perror() rather than perror(), for consistency. 2026-04-18 21:46:16 +01:00
Andrew Wood b12681d667 Add a pv_perror() function to remove all the repeated strerror(errno) calls from pv_error() arguments, and standardise the error lines so the filename in question always comes first. 2026-04-18 21:07:08 +01:00
Andrew Wood 0af9cb2314 Use pv_error() instead of writing directly to stderr. 2026-04-18 20:33:07 +01:00
Andrew Wood fc364d381f Dynamically allocate the error message prefix, instead of copying it into a static buffer. 2026-04-18 20:30:39 +01:00
Andrew Wood 0481e99c2f Use pv_error() instead of writing directly to stderr. 2026-04-18 20:29:40 +01:00
Andrew Wood 7eedf884ea Add TODO markers for changes to make the code easier to understand. 2026-04-18 20:11:20 +01:00
Andrew Wood ebefc02f4e Tidy up comments. 2026-04-18 18:00:48 +01:00
Andrew Wood 17d9ee59e7 Tidy up comments. 2026-04-18 17:41:14 +01:00
Andrew Wood fec4253f07 Tidy up comments. 2026-04-18 17:23:13 +01:00
Andrew Wood 505a6d9d2b Tidy up comments. 2026-04-18 14:48:13 +01:00
Andrew Wood 3a90959f9c Tidy up comments. 2026-04-18 14:37:29 +01:00
Andrew Wood 73d1237f1b Tidy up comments. 2026-04-17 23:27:30 +01:00
Andrew Wood 1b5a936ebf Tidy up comments. 2026-04-16 21:59:49 +01:00
Andrew Wood 7de5e2ca33 Tidy up comments. 2026-04-16 20:49:44 +01:00
Andrew Wood 854186c942 Tidy up comments. 2026-04-16 20:46:07 +01:00
Andrew Wood 39c7d4f586 Tidy up comments. 2026-04-15 22:00:50 +01:00
Andrew Wood 2e08bbb20a Tidy up comments. 2026-04-14 22:17:00 +01:00
Andrew Wood bea21335c0 Add TODO markers for the removal of fprintf(stderr). 2026-04-14 21:54:33 +01:00