- Modified ClapErrorWrapper to detect and report when printing --version/--help fails
- Added test_version_help_dev_full to verify error handling
- Fixes issue where cat --version > /dev/full silently succeeded instead of failing
Addresses feedback from commit 9cc2e096d8
Co-authored-by: Cả thế giới là Rust <naoNao89@users.noreply.github.com>
* cat: do not connect to unix domain socket and instead return an error. fixed#9751
* added empty line to fr-FR.ftl
* made NoSuchDeviceOrAddress error unix specific
* fix: handle EINTR (signal interruptions) in cat, od, and comm
Add proper retry loops for ErrorKind::Interrupted in I/O operations
to handle signals like SIGUSR1 that can interrupt read/write calls.
This pattern is proven in production - identical to PR #6025 (merged
March 2024) which fixed dd's EINTR handling for GNU test dd/stats.sh.
The same pattern is already used in 9+ utilities (head, tail, tee, wc,
sort, sum, tr, shuf, dd) without issues.
Changes:
- cat: Fix write_fast() and write_lines() to retry on EINTR
- od: Fix PartialReader::read() in all three read paths
- comm: Fix are_files_identical() for both file readers
- tests: Add InterruptingReader/Writer test utilities
Historical context:
- Pattern validated by cre4ture's PR #6025 (dd EINTR fix)
- Matches existing implementations in dd/dd.rs:450,881
- POSIX best practice for signal-interrupted I/O
Fixes#1275
* fix: handle EINTR (signal interruptions) in cat, od, and comm
Add proper retry loops for ErrorKind::Interrupted in I/O operations to handle signals like SIGUSR1 that can interrupt read/write calls.
Pattern matches PR #6025 (dd EINTR fix) and is already used in 9+ utilities. Changes:
- cat: Fix write_fast() and write_lines() to retry on EINTR
- od: Fix PartialReader::read() in all three read paths
- comm: Fix are_files_identical() for both file readers
- tests: Add visible EINTR integration tests for CI
Addresses sylvestre's review feedback on code documentation and CI test visibility.
* style: apply cargo fmt formatting to EINTR changes
* test: fix EINTR integration test failures
- Fix comm test: use stdout_contains instead of stdout_only for tabbed output
- Fix od test: create new command instance to avoid 'already run this UCommand' error
- Remove unused imports and dead code to eliminate compiler warnings
- Both tests now pass without warnings or errors
* style: fix formatting and remove duplicate comment in od test
* ci: add EINTR and related technical terms to appropriate cspell dictionaries
- Add EINTR, eintr, nextest to jargon.wordlist.txt (technical/systems programming terms)
- Add SIGUSR, SIGINT, etc. to shell.wordlist.txt (POSIX signals)
- Add uutils, coreutils, ucmd, etc. to workspace.wordlist.txt (project-specific terms)
- Fixes CI cspell warnings for legitimate technical terminology
- Proper categorization follows existing dictionary structure
Add test coverage for cat and stdbuf broken pipe handling:
**cat tests:**
- test_cat_broken_pipe_nonzero_and_message: Verify cat handles SIGPIPE
without hanging or crashing and exits with nonzero status
**stdbuf tests:**
- test_permission_external_missing_lib: Handle missing external libstdbuf
- test_no_such_external_missing_lib: Error handling in external lib mode
- Guard existing tests with #[cfg(not(feature = "feat_external_libstdbuf"))]
These tests address write-errors.sh from GNU test suite (#4627) and improve
cross-platform robustness for stdbuf feat_external_libstdbuf builds.
* cat: Check if a file can be overwritten safely in Unix
* cat: Check if a file can be overwritten safely in Windows
* cat: Test writing read-write file that is input and output
* cat: Unit test `is_appending` function
* cat: Unit test `is_unsafe_overwrite` function
* cat: Comment why a few function calls could return Err
* cat: Remove obvious comments from test
See #7542, it's not totally clear where the problem comes from,
but blanking LD_PRELOAD set by termux seems to fix the problem
(but introduces other issues.
Let's just disable these tests for now.