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