Skip to content
Open
2 changes: 1 addition & 1 deletion .cirrus.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ task:
setup_script:
- kldload mqueuefs
- fetch https://sh.rustup.rs -o rustup.sh
- sh rustup.sh -y --profile=minimal --default-toolchain $MSRV
- sh rustup.sh -y --profile=minimal --default-toolchain stable
- . $HOME/.cargo/env
- rustup target add i686-unknown-freebsd
- rustup component add clippy
Expand Down
19 changes: 18 additions & 1 deletion .github/actions/build/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ inputs:
required: false
default: -D warnings

TARGETS:
description: 'Build all targets or only default?'
required: false
default: "--all-targets"

TOOL:
description: 'Tool used to involve the BUILD command, can be cargo or cross'
required: false
Expand All @@ -30,6 +35,16 @@ inputs:
required: false
default:

NOCLIPPY:
description: "whether to run cargo clippy"
required: false
default: false

NODOC:
description: "whether to run cargo doc"
required: false
default: false

NOHACK:
description: "whether to run cargo hack"
required: false
Expand All @@ -52,13 +67,15 @@ runs:
- name: build
shell: bash
run: ${{ inputs.TOOL }} ${{ inputs.BUILD }} ${{ inputs.ZFLAGS }} --target ${{ inputs.TARGET }} --all-targets --all-features
run: ${{ inputs.TOOL }} ${{ inputs.BUILD }} ${{ inputs.ZFLAGS }} --target ${{ inputs.TARGET }} ${{ inputs.TARGETS }} --all-features

- name: doc
if: inputs.NODOC == 'false'
shell: bash
run: ${{ inputs.TOOL }} doc ${{ inputs.ZFLAGS }} --no-deps --target ${{ inputs.TARGET }} --all-features

- name: clippy
if: inputs.NOCLIPPY == 'false'
shell: bash
run: ${{ inputs.TOOL}} clippy ${{ inputs.ZFLAGS }} --target ${{ inputs.TARGET }} --all-targets --all-features -- ${{ inputs.CLIPPYFLAGS }}

Expand Down
5 changes: 5 additions & 0 deletions .github/actions/test/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,18 @@ inputs:
required: false
default: -D warnings -A unknown-lints

RUSTDOCFLAGS:
required: false
default: -D warnings

runs:
using: "composite"
steps:
- name: set up Rust env
shell: bash
run: |
echo "RUSTFLAGS=${{ inputs.RUSTFLAGS }}" >> $GITHUB_ENV
echo "RUSTDOCFLAGS=${{ inputs.RUSTDOCFLAGS }}" >> $GITHUB_ENV
- name: test
shell: bash
Expand Down
98 changes: 56 additions & 42 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ permissions:

env:
MSRV: 1.69.0
# Rust's Loongarch support merged in 1.71.0
MSRV_LOONGARCH: 1.71.0
# Minimal Rust version to support all 3 official OpenHarmony targets as tier2
MSRV_OHOS: 1.78.0
RUSTFLAGS: -Dwarnings

jobs:
Expand All @@ -32,7 +28,7 @@ jobs:
- name: setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: '${{ env.MSRV }}'
toolchain: stable
components: clippy

- name: build
Expand All @@ -59,7 +55,7 @@ jobs:
- name: setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: '${{ env.MSRV }}'
toolchain: stable
components: clippy

- name: build
Expand All @@ -79,7 +75,7 @@ jobs:
# cross needs to execute Docker, GitHub Action already has it installed
cross:
runs-on: ubuntu-24.04
needs: [rustfmt, minver, macos, x86_64_linux_native_builds, rust_stable]
needs: [rustfmt, minver, macos, x86_64_linux_native_builds]
strategy:
fail-fast: false
matrix:
Expand Down Expand Up @@ -108,8 +104,7 @@ jobs:
- name: setup Rust
uses: dtolnay/rust-toolchain@master
with:
# Use a newer version rustc if the target is Loongarch, remove this workaround after MSRV is newer than 1.71.0
toolchain: "${{ matrix.target == 'loongarch64-unknown-linux-gnu' && env.MSRV_LOONGARCH || env.MSRV }}"
toolchain: stable
components: clippy

# cross relies on docker or podman, GitHub Acton already has it installed.
Expand All @@ -132,6 +127,7 @@ jobs:
SUDO: ""
TOOL: cross
RUSTFLAGS: --cfg qemu -D warnings
RUSTDOCFLAGS: --cfg qemu

- name: before_cache_script
run: rm -rf $CARGO_HOME/registry/index
Expand All @@ -156,7 +152,7 @@ jobs:
- name: setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: '${{ env.MSRV }}'
toolchain: stable
components: clippy

- name: install targets
Expand Down Expand Up @@ -193,7 +189,7 @@ jobs:
- name: setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: '${{ env.MSRV }}'
toolchain: stable
components: clippy

- name: install targets
Expand All @@ -212,38 +208,11 @@ jobs:
- name: before_cache_script
run: sudo rm -rf $CARGO_HOME/registry/index;

rust_stable:
runs-on: ubuntu-latest
env:
TARGET: x86_64-unknown-linux-gnu
steps:
- name: checkout
uses: actions/checkout@v4

- name: setup Rust
uses: dtolnay/rust-toolchain@stable
with:
components: clippy

- name: build
uses: ./.github/actions/build
with:
TARGET: '${{ env.TARGET }}'

- name: test
uses: ./.github/actions/test
with:
TARGET: '${{ env.TARGET }}'

- name: before_cache_script
run: sudo rm -rf $CARGO_HOME/registry/index



# Tasks for cross-compiling, but no testing
cross_compiling:
runs-on: ubuntu-latest
needs: [rustfmt, minver, macos, x86_64_linux_native_builds, rust_stable]
needs: [rustfmt, minver, macos, x86_64_linux_native_builds]
env:
BUILD: check
strategy:
Expand Down Expand Up @@ -282,8 +251,7 @@ jobs:
- name: setup Rust
uses: dtolnay/rust-toolchain@master
with:
# Use a newer version rustc if it is OpenHarmony, remove this workaround after MSRV is newer than 1.78.0
toolchain: "${{ contains(matrix.target, 'ohos') && env.MSRV_OHOS || env.MSRV }}"
toolchain: stable
components: clippy

- name: install targets
Expand All @@ -299,10 +267,56 @@ jobs:
- name: before_cache_script
run: rm -rf $CARGO_HOME/registry/index

# Check that Nix will build on the MSRV, on a variety of operating systems.
# But don't check the tests. Those are not required to build on MSRV.
msrv:
runs-on: ubuntu-latest
needs: [rustfmt, minver, macos, x86_64_linux_native_builds]
env:
BUILD: check
NOCLIPPY: true
NODOC: true
NOHACK: true
TARGETS: ""
strategy:
fail-fast: false
matrix:
include:
- target: aarch64-linux-android
- target: x86_64-unknown-linux-gnu
- target: x86_64-unknown-linux-musl
- target: aarch64-apple-darwin
- target: x86_64-unknown-freebsd
- target: x86_64-unknown-netbsd
steps:
- name: checkout
uses: actions/checkout@v4

- name: setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: $MSRV

- name: install targets
run: rustup target add ${{ matrix.target }}

- name: build
uses: ./.github/actions/build
with:
TARGET: '${{ matrix.target }}'
TARGETS: '${{ env.TARGETS }}'
BUILD: '${{ env.BUILD }}'
NOCLIPPY: '${{ env.NOCLIPPY }}'
NODOC: '${{ env.NODOC }}'
NOHACK: '${{ env.NOHACK }}'

- name: before_cache_script
run: rm -rf $CARGO_HOME/registry/index


redox:
runs-on: ubuntu-latest
needs: [rustfmt, minver, macos, x86_64_linux_native_builds, rust_stable]
needs: [rustfmt, minver, macos, x86_64_linux_native_builds]
env:
TARGET: x86_64-unknown-redox
CLIPPYFLAGS: -D warnings
Expand Down
1 change: 1 addition & 0 deletions src/fcntl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1038,6 +1038,7 @@ pub unsafe trait Flockable: std::os::fd::AsRawFd {}
pub struct Flock<T: Flockable>(T);

#[cfg(not(any(target_os = "redox", target_os = "solaris")))]
#[allow(clippy::unnecessary_unwrap)] // https://github.com/rust-lang/rust-clippy/issues/15744
impl<T: Flockable> Drop for Flock<T> {
fn drop(&mut self) {
let res = Errno::result(unsafe { libc::flock(self.0.as_raw_fd(), libc::LOCK_UN) });
Expand Down
6 changes: 3 additions & 3 deletions src/sys/aio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1154,12 +1154,12 @@ pub fn aio_suspend(
/// pub static SIGNALED: AtomicBool = AtomicBool::new(false);
///
/// extern fn sigfunc(_: c_int) {
/// SIGNALED.store(true, Ordering::Relaxed);
/// SIGNALED.store(true, Ordering::Release);
/// }
/// let sa = SigAction::new(SigHandler::Handler(sigfunc),
/// SaFlags::SA_RESETHAND,
/// SigSet::empty());
/// SIGNALED.store(false, Ordering::Relaxed);
/// SIGNALED.store(false, Ordering::Release);
/// unsafe { sigaction(Signal::SIGUSR2, &sa) }.unwrap();
///
/// const WBUF: &[u8] = b"abcdef123456";
Expand All @@ -1173,7 +1173,7 @@ pub fn aio_suspend(
/// ));
/// let sev = SigevNotify::SigevSignal { signal: Signal::SIGUSR2, si_value: 0 };
/// lio_listio(LioMode::LIO_NOWAIT, &mut[aiow.as_mut()], sev).unwrap();
/// while !SIGNALED.load(Ordering::Relaxed) {
/// while !SIGNALED.load(Ordering::Acquire) {
/// thread::sleep(time::Duration::from_millis(10));
/// }
/// // At this point, since `lio_listio` returned success and delivered its
Expand Down
9 changes: 5 additions & 4 deletions src/sys/personality.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ libc_bitflags! {
///
/// Example:
///
/// ```
#[cfg_attr(any(qemu, target_arch = "aarch64"), doc = " ```no_run")]
#[cfg_attr(not(any(qemu, target_arch = "aarch64")), doc = " ```")]
/// # use nix::sys::personality::{self, Persona};
/// let pers = personality::get().unwrap();
/// assert!(!pers.contains(Persona::WHOLE_SECONDS));
Expand All @@ -78,10 +79,10 @@ pub fn get() -> Result<Persona> {
///
/// Example:
///
// Disable test on aarch64 until we know why it fails.
// Disable test on aarch64 and with QEMU. seccomp interference is suspected.
// https://github.com/nix-rust/nix/issues/2060
#[cfg_attr(target_arch = "aarch64", doc = " ```no_run")]
#[cfg_attr(not(target_arch = "aarch64"), doc = " ```")]
#[cfg_attr(any(qemu, target_arch = "aarch64"), doc = " ```no_run")]
#[cfg_attr(not(any(qemu, target_arch = "aarch64")), doc = " ```")]
/// # use nix::sys::personality::{self, Persona};
/// let mut pers = personality::get().unwrap();
/// assert!(!pers.contains(Persona::ADDR_NO_RANDOMIZE));
Expand Down
2 changes: 2 additions & 0 deletions src/sys/socket/sockopt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1972,12 +1972,14 @@ impl<'a> Set<'a, OsString> for SetOsString<'a> {

/// Getter for a `CString` value.
#[cfg(apple_targets)]
#[cfg(feature = "net")]
struct GetCString<T: AsMut<[u8]>> {
len: socklen_t,
val: MaybeUninit<T>,
}

#[cfg(apple_targets)]
#[cfg(feature = "net")]
impl<T: AsMut<[u8]>> Get<CString> for GetCString<T> {
fn uninit() -> Self {
GetCString {
Expand Down
8 changes: 4 additions & 4 deletions test/test_sendfile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -159,10 +159,10 @@ fn test_sendfile_dragonfly() {
fn test_sendfile_darwin() {
// Declare the content
let header_strings =
vec!["HTTP/1.1 200 OK\n", "Content-Type: text/plain\n", "\n"];
["HTTP/1.1 200 OK\n", "Content-Type: text/plain\n", "\n"];
let body = "Xabcdef123456";
let body_offset = 1;
let trailer_strings = vec!["\n", "Served by Make Believe\n"];
let trailer_strings = ["\n", "Served by Make Believe\n"];

// Write the body to a file
let mut tmp = tempfile().unwrap();
Expand Down Expand Up @@ -195,7 +195,7 @@ fn test_sendfile_darwin() {
+ &trailer_strings.concat();

// Verify the message that was sent
assert_eq!(bytes_written as usize, expected_string.as_bytes().len());
assert_eq!(bytes_written as usize, expected_string.len());

let mut read_string = String::new();
let bytes_read = rd.read_to_string(&mut read_string).unwrap();
Expand Down Expand Up @@ -258,7 +258,7 @@ fn test_sendfilev() {
+ &trailer_strings.concat();

// Verify the message that was sent
assert_eq!(bytes_written, expected_string.as_bytes().len());
assert_eq!(bytes_written, expected_string.len());

let mut read_string = String::new();
let bytes_read = rd.read_to_string(&mut read_string).unwrap();
Expand Down
Loading