diff --git a/src/uucore/src/lib/features/proc_info.rs b/src/uucore/src/lib/features/proc_info.rs index 8345e7e0921..d36f5d0100b 100644 --- a/src/uucore/src/lib/features/proc_info.rs +++ b/src/uucore/src/lib/features/proc_info.rs @@ -465,11 +465,16 @@ mod tests { .flat_map(Teletype::try_from) .collect::>(); - assert_eq!(result.len(), 1); - assert_eq!( - pid_entry.tty(), - Vec::from_iter(result.into_iter()).first().unwrap().clone() - ); + // In CI environments or when running without a terminal, there may be no TTY + if result.is_empty() { + assert_eq!(pid_entry.tty(), Teletype::Unknown); + } else { + assert_eq!(result.len(), 1); + assert_eq!( + pid_entry.tty(), + Vec::from_iter(result.into_iter()).first().unwrap().clone() + ); + } } #[test] diff --git a/src/uucore/src/lib/features/process.rs b/src/uucore/src/lib/features/process.rs index 55e8c36482b..043d4850d9b 100644 --- a/src/uucore/src/lib/features/process.rs +++ b/src/uucore/src/lib/features/process.rs @@ -67,13 +67,11 @@ pub fn getpid() -> pid_t { /// so some system such as redox doesn't supported. #[cfg(not(target_os = "redox"))] pub fn getsid(pid: i32) -> Result { - unsafe { - let result = libc::getsid(pid); - if Errno::last() == Errno::UnknownErrno { - Ok(result) - } else { - Err(Errno::last()) - } + let result = unsafe { libc::getsid(pid) }; + if result == -1 { + Err(Errno::last()) + } else { + Ok(result) } } diff --git a/tests/by-util/test_dd.rs b/tests/by-util/test_dd.rs index 3e53f9a59e5..03c5bceebd6 100644 --- a/tests/by-util/test_dd.rs +++ b/tests/by-util/test_dd.rs @@ -1655,6 +1655,8 @@ fn test_reading_partial_blocks_from_fifo() { .stdout(Stdio::piped()) .stderr(Stdio::piped()) .env("LC_ALL", "C") + .env("LANG", "C") + .env("LANGUAGE", "C") .spawn() .unwrap(); @@ -1700,6 +1702,8 @@ fn test_reading_partial_blocks_from_fifo_unbuffered() { .stdout(Stdio::piped()) .stderr(Stdio::piped()) .env("LC_ALL", "C") + .env("LANG", "C") + .env("LANGUAGE", "C") .spawn() .unwrap(); diff --git a/util/build-run-test-coverage-linux.sh b/util/build-run-test-coverage-linux.sh index 9dcfefed25c..8aba215304c 100755 --- a/util/build-run-test-coverage-linux.sh +++ b/util/build-run-test-coverage-linux.sh @@ -28,6 +28,8 @@ set -e # Treat unset variables as errors set -u +# Ensure pipeline failures are caught (not just the last command's exit code) +set -o pipefail # Print expanded commands to stdout before running them set -x @@ -39,7 +41,12 @@ REPO_main_dir="$(dirname -- "${ME_dir}")" FEATURES_OPTION=${FEATURES_OPTION:-"--features=feat_os_unix"} COVERAGE_DIR=${COVERAGE_DIR:-"${REPO_main_dir}/coverage"} -LLVM_PROFDATA="$(find "$(rustc --print sysroot)" -name llvm-profdata)" +# Find llvm-profdata in the nightly toolchain (which is used for coverage builds) +LLVM_PROFDATA="$(find "$(RUSTUP_TOOLCHAIN=nightly-gnu rustc --print sysroot)" -name llvm-profdata)" +if [ -z "${LLVM_PROFDATA}" ]; then + echo "Error: llvm-profdata not found. Install it with: rustup +nightly-gnu component add llvm-tools" + exit 1 +fi PROFRAW_DIR="${COVERAGE_DIR}/traces" PROFDATA_DIR="${COVERAGE_DIR}/data"