Commit Graph
40 Commits
Author SHA1 Message Date
Daniel HofstetterandGitHub 2d5c28f344 stdbuf: fix warning from uninlined_format_args (#10784) 2026-02-07 08:07:19 -05:00
Etienne CordonnierandGitHub 181b247531 stdbuf: support libstdbuf in same directory as stdbuf (#10352)
Make stdbuf search for libstdbuf first in the directory where stdbuf is running. This matches GNU coreutils behavior.
Add a symlink to deps/libstdbuf in order to make it easier to run the stdbuf tests with feat_external_stdbuf enabled.

Remove tests which are assuming that libstdbuf is not found. Those tests are now always failing, because the build
directory contains a symlink to deps/libstdbuf and libstdbuf is always found.

Fixes https://github.com/uutils/coreutils/issues/10345

Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
2026-02-06 23:55:44 +01:00
Etienne CordonnierandGitHub c66be8cd60 stdbuf: use exec instead of forking (#9495) 2026-01-17 09:32:44 +01:00
Sylvestre LedruandGitHub 103777b766 Merge pull request #8798 from naoNao89/test/cat-stdbuf-broken-pipe
tests(cat,stdbuf): Add broken-pipe robustness tests (#4627)
2025-12-26 00:25:52 +01:00
naoNao89 e0c7ef7b10 fix(stdbuf): remove unsafe unwrap() calls for proper error handling
- Replace get_many().unwrap() with ok_or_else() to handle missing command
- Replace next().unwrap() with pattern matching for safety
- Replace tempdir().unwrap() with map_err() to handle temp dir failures

All stdbuf internal errors now properly exit with code 125 per GNU specification:
https://www.gnu.org/s/coreutils/manual/html_node/stdbuf-invocation.html
2025-11-21 08:04:56 +07:00
naoNao89 130893a19a tests(cat,stdbuf): Add broken-pipe robustness tests (#4627)
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.
2025-10-03 16:39:55 +07:00
Sylvestre Ledru 1c5b95d1bb non-utf8: address review commits 2025-08-14 10:54:17 +02:00
Sylvestre Ledru b5f8931b17 Fix stdbuf to handle non-UTF-8 filenames 2025-08-14 10:52:24 +02:00
Yuri AstrakhanandDaniel Hofstetter 206281e29b chore: fix uninlined_format_args lint
I used this command, plus some manual fixes:

```sh
__CARGO_FIX_YOLO=1 cargo clippy --fix --all-targets --workspace --all-features --allow-dirty
```
2025-07-09 10:50:36 +02:00
Etienne Cordonnier 35634b46a0 stdbuf: fix cross-compilation
Summary:

Partial fix for https://github.com/uutils/coreutils/issues/6591

The current code declare libstdbuf as a build-dependency of stdbuf as a
workaround to enforce that libstdbuf is compiled before stdbuf. This breaks
cross-compilation, because build-dependencies were compiled for the host
architecture, and not for the target architecture.

The reason this workaround is necessary is that bindeps is available only in nightly at the moment:
https://rust-lang.github.io/rfcs/3028-cargo-binary-dependencies.html

This commit replaces the "build-dependency" workaround with another workaround:
calling cargo manually to build libstdbuf in the build.rs of stdbuf, in order to ensure that libstdbuf is built before stdbuf.

Changes:

- Removed cpp/cpp_build dependencies:

The cpp, cpp_build, and related dependencies were removed because they made cross-compilation in a build.rs file very complex, since you need
to pass proper CXX env variables for cross-compilation, whereas cross-compiling rust code using cargo is quite simple.
Provided Rust implementations for getting stdin, stdout, and stderr pointers.
Switched from C++/cpp macro-based initialization to using the Rust ctor crate for library initialization.

- Remove "feat_require_crate_cpp" which is not needed any more, since stdbuf was the only utility using the cpp crate.

Tests:

This commit fixes e.g. this test:
cross test --target aarch64-unknown-linux-gnu --features stdbuf test_stdbuf::test_libstdbuf_preload -- --nocapture

- The "i686" build of stdbuf was also broken (stdbuf 32 bits, but libstdbuf 64 bits) and test_stdbuf::test_libstdbuf_preload of the i686 builds in github CI serves as regression
test for this issue, no need to add a cross-rs test for aarch64.
- The x86_64 musl build of stdbuf was also broken and was passing tests in CI only because it was compiled with the wrong libc (glibc instead of musl)

Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
2025-06-02 10:55:57 +02:00
Etienne Cordonnier 2e8b6fabcc stdbuf: add test_libstdbuf_preload
This test verifies that libstdbuf correctly gets preloaded, and that there are no architecture mismatch errors.
At the moment the test passes when compiled normally, but fails when compiled with cross-rs, due to https://github.com/uutils/coreutils/issues/6591

This passes:
```
cargo test --features stdbuf test_stdbuf::test_libstdbuf_preload -- --nocapture
```

This fails:
```
cross test --target aarch64-unknown-linux-gnu --features stdbuf test_stdbuf::test_libstdbuf_preload -- --nocapture
```

Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
2025-06-02 10:52:32 +02:00
Sylvestre Ledru a0179ea239 uutests: adjust the tests to use them 2025-03-28 21:40:31 +01:00
Daniel Hofstetter df4dfea852 tests: replace run() with succeeds() or fails() 2025-03-09 16:53:56 +01:00
Sylvestre Ledru 18cb7dcf9e Use the new function fails_with_code
Done with
```
$ perl -0777 -i -pe 's/([ \t]+)\.fails\(\)[ \t]*\n[ \t]+\.no_stdout\(\)[ \t]*\n[ \t]+\.code_is\(([0-9]+)\);/\1.fails_with_code(\2)\n\1.no_stdout();/gs' *rs
$ sed -i -e "s|.fails()(.*).code_is(|.fails_with_code(|g" *rs
$ perl -0777 -i -pe 's/([ \t]+)\.fails\(\)[ \t]*\n[ \t]+\.code_is\(([0-9]+)\);/\1.fails_with_code(\2);/gs' *rs
$ perl -0777 -i -pe 's/([ \t]+)\.fails\(\)(.*?)[ \t]+\.code_is\(([0-9]+)\);/\1.fails_with_code(\3)\2;/gs' *rs
...
```
2025-03-01 17:26:20 +01:00
Sylvestre Ledru 04d4c9e1ef stdbuf: better handling when non existing files
Should fix tests/misc/stdbuf
2025-01-08 00:13:31 +01:00
Sylvestre Ledru 79645d45ce stdbuf: better handling of the error message when no perm
Tested in tests/misc/stdbuf
2025-01-08 00:13:31 +01:00
Sylvestre Ledru 001b97f445 adjust error for runcon & stdbuf to make tests/misc/invalid-opt.pl pass 2024-08-20 22:28:16 +02:00
Laurent Cheylus c96e639f2f tests: disable failed tests for stdbuf on OpenBSD
Signed-off-by: Laurent Cheylus <foxy@free.fr>
2024-07-06 22:29:19 +02:00
Daniel HofstetterandBen Wiederhake a816960c33 tests: remove 'target_pointer_width = "128"' 2024-05-20 23:27:53 +02:00
clara swansonandGitHub 58087df02a stdbuf: remove crash macro (#5549)
* stdbuf: remove crash! macro

* stdbuf: change target_vendor back to apple

* tests/stdbuf: change stderr_only to usage_error in test_stdbuf_invalid_mode_fails

* stdbuf: add exit code to check_option

* stdbuf: remove set_exit_code line from error
2023-11-20 10:16:18 +01:00
zhitkoffandYury Zhytkou 7038657a44 implement R and Q prefixes 2023-10-17 10:50:50 -04:00
Sylvestre Ledru bfca6bf70f Add license headers on all files 2023-08-21 10:49:27 +02:00
Daniel Hofstetter 6988eb7ec6 tests: expand wildcard imports 2023-03-20 15:32:35 +01:00
Daniel Hofstetter 3eeb5dda30 tests: adapt to clap's modified error messages 2023-03-09 10:06:20 +01:00
Joining7943 1fadeb43b2 tests/util: Do not trim stderr in CmdResult::stderr_is. Add method stderr_trimmed_is.
Fix tests assert whitespace instead of trimming it. Disable some tests in `test_tr` because `tr`
produces too many newlines.
2023-01-22 14:56:19 +01:00