mirror of
https://github.com/openharmony/third_party_rust_nix.git
synced 2026-07-01 21:24:00 -04:00
+29
-30
@@ -5,32 +5,32 @@ cargo_cache:
|
||||
env:
|
||||
# Build by default; don't just check
|
||||
BUILD: build
|
||||
CLIPPYFLAGS: -D warnings -A unknown-lints
|
||||
RUSTFLAGS: -D warnings
|
||||
RUSTDOCFLAGS: -D warnings
|
||||
TOOL: cargo
|
||||
# The MSRV
|
||||
TOOLCHAIN: 1.56.1
|
||||
MSRV: 1.56.1
|
||||
ZFLAGS:
|
||||
|
||||
# Tests that don't require executing the build binaries
|
||||
build: &BUILD
|
||||
build_script:
|
||||
- . $HOME/.cargo/env || true
|
||||
- $TOOL +$TOOLCHAIN -Vv
|
||||
- rustc +$TOOLCHAIN -Vv
|
||||
- $TOOL +$TOOLCHAIN $BUILD $ZFLAGS --target $TARGET --all-targets
|
||||
- $TOOL +$TOOLCHAIN doc $ZFLAGS --no-deps --target $TARGET
|
||||
- $TOOL +$TOOLCHAIN clippy $ZFLAGS --target $TARGET --all-targets -- -D warnings
|
||||
- $TOOL -Vv
|
||||
- rustc -Vv
|
||||
- $TOOL $BUILD $ZFLAGS --target $TARGET --all-targets
|
||||
- $TOOL doc $ZFLAGS --no-deps --target $TARGET
|
||||
- $TOOL clippy $ZFLAGS --target $TARGET --all-targets -- $CLIPPYFLAGS
|
||||
- if [ -z "$NOHACK" ]; then mkdir -p $HOME/.cargo/bin; export PATH=$HOME/.cargo/bin:$PATH; fi
|
||||
- if [ -z "$NOHACK" ]; then curl -LsSf https://github.com/taiki-e/cargo-hack/releases/latest/download/cargo-hack-${HOST:-$TARGET}.tar.gz | tar xzf - -C ~/.cargo/bin; fi
|
||||
- if [ -z "$NOHACK" ]; then $TOOL +$TOOLCHAIN hack $ZFLAGS check --target $TARGET --each-feature; fi
|
||||
- if [ -z "$NOHACK" ]; then $TOOL hack $ZFLAGS check --target $TARGET --each-feature; fi
|
||||
|
||||
# Tests that do require executing the binaries
|
||||
test: &TEST
|
||||
<< : *BUILD
|
||||
test_script:
|
||||
- . $HOME/.cargo/env || true
|
||||
- $TOOL +$TOOLCHAIN test --target $TARGET
|
||||
- $TOOL test --target $TARGET
|
||||
|
||||
# Test FreeBSD in a full VM. Test the i686 target too, in the
|
||||
# same VM. The binary will be built in 32-bit mode, but will execute on a
|
||||
@@ -52,10 +52,11 @@ task:
|
||||
setup_script:
|
||||
- kldload mqueuefs
|
||||
- fetch https://sh.rustup.rs -o rustup.sh
|
||||
- sh rustup.sh -y --profile=minimal --default-toolchain $TOOLCHAIN
|
||||
- sh rustup.sh -y --profile=minimal --default-toolchain $MSRV
|
||||
- . $HOME/.cargo/env
|
||||
- rustup target add i686-unknown-freebsd
|
||||
- rustup component add --toolchain $TOOLCHAIN clippy
|
||||
- rustup component add clippy
|
||||
- cp Cargo.lock.msrv Cargo.lock
|
||||
<< : *TEST
|
||||
i386_test_script:
|
||||
- . $HOME/.cargo/env
|
||||
@@ -76,9 +77,10 @@ task:
|
||||
image: ghcr.io/cirruslabs/macos-ventura-base:latest
|
||||
setup_script:
|
||||
- curl --proto '=https' --tlsv1.2 -sSf -o rustup.sh https://sh.rustup.rs
|
||||
- sh rustup.sh -y --profile=minimal --default-toolchain $TOOLCHAIN
|
||||
- sh rustup.sh -y --profile=minimal --default-toolchain $MSRV
|
||||
- . $HOME/.cargo/env
|
||||
- rustup component add --toolchain $TOOLCHAIN clippy
|
||||
- rustup component add clippy
|
||||
- cp Cargo.lock.msrv Cargo.lock
|
||||
<< : *TEST
|
||||
before_cache_script: rm -rf $CARGO_HOME/registry/index
|
||||
|
||||
@@ -129,9 +131,10 @@ task:
|
||||
setup_script:
|
||||
- mkdir /tmp/home
|
||||
- curl --proto '=https' --tlsv1.2 -sSf -o rustup.sh https://sh.rustup.rs
|
||||
- sh rustup.sh -y --profile=minimal --default-toolchain $TOOLCHAIN
|
||||
- sh rustup.sh -y --profile=minimal --default-toolchain $MSRV
|
||||
- . $HOME/.cargo/env
|
||||
- cargo install cross --version 0.2.1 # cross 0.2.2 bumped the MSRV to 1.58.1
|
||||
- cargo install cross --version 0.2.1 --locked # cross 0.2.2 bumped the MSRV to 1.58.1
|
||||
- cp Cargo.lock.msrv Cargo.lock
|
||||
<< : *TEST
|
||||
before_cache_script: rm -rf $CARGO_HOME/registry/index
|
||||
|
||||
@@ -142,7 +145,6 @@ task:
|
||||
arm_container:
|
||||
image: rust:1.56
|
||||
env:
|
||||
RUSTFLAGS: --cfg graviton -D warnings
|
||||
TARGET: aarch64-unknown-linux-gnu
|
||||
- name: Linux x86_64
|
||||
container:
|
||||
@@ -157,6 +159,7 @@ task:
|
||||
setup_script:
|
||||
- rustup target add $TARGET
|
||||
- rustup component add clippy
|
||||
- cp Cargo.lock.msrv Cargo.lock
|
||||
<< : *TEST
|
||||
before_cache_script: rm -rf $CARGO_HOME/registry/index
|
||||
|
||||
@@ -166,9 +169,7 @@ task:
|
||||
image: rust:latest
|
||||
env:
|
||||
TARGET: x86_64-unknown-linux-gnu
|
||||
TOOLCHAIN:
|
||||
setup_script:
|
||||
- rustup target add $TARGET
|
||||
- rustup component add clippy
|
||||
<< : *TEST
|
||||
before_cache_script: rm -rf $CARGO_HOME/registry/index
|
||||
@@ -243,38 +244,37 @@ task:
|
||||
TARGET: x86_64-unknown-netbsd
|
||||
setup_script:
|
||||
- rustup target add $TARGET
|
||||
- rustup toolchain install $TOOLCHAIN --profile minimal --target $TARGET
|
||||
- rustup component add --toolchain $TOOLCHAIN clippy
|
||||
- rustup component add clippy
|
||||
- cp Cargo.lock.msrv Cargo.lock
|
||||
<< : *BUILD
|
||||
before_cache_script: rm -rf $CARGO_HOME/registry/index
|
||||
|
||||
task:
|
||||
container:
|
||||
image: rust:1.56
|
||||
# Redox's MSRV policy is unclear. Until they define it, use nightly.
|
||||
image: rustlang/rust:nightly
|
||||
env:
|
||||
BUILD: check
|
||||
name: Redox x86_64
|
||||
env:
|
||||
HOST: x86_64-unknown-linux-gnu
|
||||
TARGET: x86_64-unknown-redox
|
||||
# Redox's MSRV policy is unclear. Until they define it, use nightly.
|
||||
TOOLCHAIN: nightly
|
||||
CLIPPYFLAGS: -D warnings
|
||||
setup_script:
|
||||
- rustup target add $TARGET
|
||||
- rustup toolchain install $TOOLCHAIN --profile minimal --target $TARGET
|
||||
- rustup component add --toolchain $TOOLCHAIN clippy
|
||||
- rustup component add clippy
|
||||
<< : *BUILD
|
||||
before_cache_script: rm -rf $CARGO_HOME/registry/index
|
||||
|
||||
# Rust Tier 3 targets can't use Rustup
|
||||
## Rust Tier 3 targets can't use Rustup
|
||||
task:
|
||||
container:
|
||||
image: rustlang/rust:nightly
|
||||
env:
|
||||
BUILD: check
|
||||
HOST: x86_64-unknown-linux-gnu
|
||||
TOOLCHAIN: nightly
|
||||
ZFLAGS: -Zbuild-std
|
||||
CLIPPYFLAGS: -D warnings
|
||||
matrix:
|
||||
- name: DragonFly BSD x86_64
|
||||
env:
|
||||
@@ -300,7 +300,6 @@ task:
|
||||
name: Minver
|
||||
env:
|
||||
HOST: x86_64-unknown-linux-gnu
|
||||
TOOLCHAIN: nightly
|
||||
container:
|
||||
image: rustlang/rust:nightly
|
||||
setup_script:
|
||||
@@ -314,5 +313,5 @@ task:
|
||||
name: Rust Formatter
|
||||
container:
|
||||
image: rust:latest
|
||||
setup_script: rustup +$TOOLCHAIN component add rustfmt
|
||||
test_script: $TOOL +$TOOLCHAIN fmt --all -- --check **/*.rs
|
||||
setup_script: rustup component add rustfmt
|
||||
test_script: cargo fmt --all -- --check **/*.rs
|
||||
|
||||
@@ -20,7 +20,7 @@ ohos_cargo_crate("lib") {
|
||||
|
||||
sources = ["src/lib.rs"]
|
||||
edition = "2018"
|
||||
cargo_pkg_version = "0.26.2"
|
||||
cargo_pkg_version = "0.26.4"
|
||||
cargo_pkg_authors = "The nix-rust Project Developers"
|
||||
cargo_pkg_name = "nix"
|
||||
cargo_pkg_description = "Rust friendly bindings to *nix APIs"
|
||||
|
||||
@@ -3,6 +3,29 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
This project adheres to [Semantic Versioning](https://semver.org/).
|
||||
|
||||
## [0.26.4] - 2023-08-28
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed an unintended API change in release 0.26.3, due to the upgrade of the
|
||||
bitflags dependency.
|
||||
([#2117](https://github.com/nix-rust/nix/pull/2117))
|
||||
|
||||
## [0.26.3] - 2023-08-27
|
||||
|
||||
### Fixed
|
||||
- Fix: send `ETH_P_ALL` in htons format
|
||||
([#1925](https://github.com/nix-rust/nix/pull/1925))
|
||||
- Fix: `recvmsg` now sets the length of the received `sockaddr_un` field
|
||||
correctly on Linux platforms. ([#2041](https://github.com/nix-rust/nix/pull/2041))
|
||||
- Fix potentially invalid conversions in
|
||||
`SockaddrIn::from<std::net::SocketAddrV4>`,
|
||||
`SockaddrIn6::from<std::net::SockaddrV6>`, `IpMembershipRequest::new`, and
|
||||
`Ipv6MembershipRequest::new` with future Rust versions.
|
||||
([#2061](https://github.com/nix-rust/nix/pull/2061))
|
||||
- Fixed an incorrect lifetime returned from `recvmsg`.
|
||||
([#2095](https://github.com/nix-rust/nix/pull/2095))
|
||||
|
||||
## [0.26.2] - 2023-01-18
|
||||
### Fixed
|
||||
- Fix `SockaddrIn6` bug that was swapping flowinfo and scope_id byte ordering.
|
||||
|
||||
+491
@@ -0,0 +1,491 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "assert-impl"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c3464313de0c867016e3e69d7e1e9ae3499bcc4c18e12283d381359ed38b5b9e"
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
|
||||
|
||||
[[package]]
|
||||
name = "caps"
|
||||
version = "0.5.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.83"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
|
||||
dependencies = [
|
||||
"errno-dragonfly",
|
||||
"libc",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "errno-dragonfly"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fastrand"
|
||||
version = "1.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
|
||||
dependencies = [
|
||||
"instant",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.2.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"wasi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
|
||||
|
||||
[[package]]
|
||||
name = "instant"
|
||||
version = "0.1.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "io-lifetimes"
|
||||
version = "1.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.147"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.3.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.4.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"scopeguard",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memoffset"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.26.2"
|
||||
dependencies = [
|
||||
"assert-impl",
|
||||
"bitflags 2.4.0",
|
||||
"caps",
|
||||
"cfg-if",
|
||||
"lazy_static",
|
||||
"libc",
|
||||
"memoffset",
|
||||
"parking_lot",
|
||||
"pin-utils",
|
||||
"rand",
|
||||
"semver",
|
||||
"sysctl",
|
||||
"tempfile",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
|
||||
dependencies = [
|
||||
"lock_api",
|
||||
"parking_lot_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot_core"
|
||||
version = "0.9.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"redox_syscall",
|
||||
"smallvec",
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pin-utils"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
||||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.66"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.8.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"rand_chacha",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.3.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "0.37.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"errno",
|
||||
"io-lifetimes",
|
||||
"libc",
|
||||
"linux-raw-sys",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "same-file"
|
||||
version = "1.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
|
||||
dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||
|
||||
[[package]]
|
||||
name = "semver"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sysctl"
|
||||
version = "0.4.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "225e483f02d0ad107168dc57381a8a40c3aeea6abe47f37506931f861643cfa8"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"byteorder",
|
||||
"libc",
|
||||
"thiserror",
|
||||
"walkdir",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tempfile"
|
||||
version = "3.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"cfg-if",
|
||||
"fastrand",
|
||||
"redox_syscall",
|
||||
"rustix",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.47"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
|
||||
dependencies = [
|
||||
"thiserror-impl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror-impl"
|
||||
version = "1.0.47"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
|
||||
|
||||
[[package]]
|
||||
name = "walkdir"
|
||||
version = "2.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
|
||||
dependencies = [
|
||||
"same-file",
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.0+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||
dependencies = [
|
||||
"winapi-i686-pc-windows-gnu",
|
||||
"winapi-x86_64-pc-windows-gnu",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-util"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
|
||||
dependencies = [
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm",
|
||||
"windows_aarch64_msvc",
|
||||
"windows_i686_gnu",
|
||||
"windows_i686_msvc",
|
||||
"windows_x86_64_gnu",
|
||||
"windows_x86_64_gnullvm",
|
||||
"windows_x86_64_msvc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
||||
+2
-3
@@ -2,7 +2,7 @@
|
||||
name = "nix"
|
||||
description = "Rust friendly bindings to *nix APIs"
|
||||
edition = "2018"
|
||||
version = "0.26.2"
|
||||
version = "0.26.4"
|
||||
rust-version = "1.56"
|
||||
authors = ["The nix-rust Project Developers"]
|
||||
repository = "https://github.com/nix-rust/nix"
|
||||
@@ -31,7 +31,6 @@ libc = { version = "0.2.137", features = [ "extra_traits" ] }
|
||||
bitflags = "1.1"
|
||||
cfg-if = "1.0"
|
||||
pin-utils = { version = "0.1.0", optional = true }
|
||||
static_assertions = "1"
|
||||
|
||||
[target.'cfg(not(target_os = "redox"))'.dependencies]
|
||||
memoffset = { version = "0.7", optional = true }
|
||||
@@ -83,7 +82,7 @@ assert-impl = "0.1"
|
||||
lazy_static = "1.4"
|
||||
parking_lot = "0.12"
|
||||
rand = "0.8"
|
||||
tempfile = "3.3.0"
|
||||
tempfile = "3.3"
|
||||
semver = "1.0.7"
|
||||
|
||||
[target.'cfg(any(target_os = "android", target_os = "linux"))'.dev-dependencies]
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
"Name": "nix",
|
||||
"License": "MIT",
|
||||
"License File": "LICENSE",
|
||||
"Version Number": "0.26.2",
|
||||
"Version Number": "0.26.4",
|
||||
"Owner": "fangting12@huawei.com",
|
||||
"Upstream URL": "https://github.com/nix-rust/nix",
|
||||
"Description": "A Rust library that provides support for interacting with Unix-like operating systems.",
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
dev-version = false
|
||||
pre-release-replacements = [
|
||||
{ file="CHANGELOG.md", search="Unreleased", replace="{{version}}" },
|
||||
{ file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}" }
|
||||
|
||||
@@ -101,6 +101,9 @@ impl Drop for Dir {
|
||||
}
|
||||
}
|
||||
|
||||
// The pass by mut is technically needless only because the inner NonNull is
|
||||
// Copy. But philosophically we're mutating the Dir, so we pass by mut.
|
||||
#[allow(clippy::needless_pass_by_ref_mut)]
|
||||
fn next(dir: &mut Dir) -> Option<Result<Entry>> {
|
||||
unsafe {
|
||||
// Note: POSIX specifies that portable applications should dynamically allocate a
|
||||
|
||||
+3
-3
@@ -104,7 +104,7 @@ libc_bitflags!(
|
||||
#[cfg(any(target_os = "dragonfly",
|
||||
target_os = "freebsd",
|
||||
target_os = "ios",
|
||||
all(target_os = "linux", not(any(target_env = "musl", target_env = "ohos"))),
|
||||
all(target_os = "linux", not(target_env = "musl")),
|
||||
target_os = "macos",
|
||||
target_os = "netbsd",
|
||||
target_os = "openbsd",
|
||||
@@ -638,7 +638,7 @@ pub fn vmsplice(
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(target_os = "linux"))]
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(feature = "fs")]
|
||||
libc_bitflags!(
|
||||
/// Mode argument flags for fallocate determining operation performed on a given range.
|
||||
@@ -678,7 +678,7 @@ feature! {
|
||||
///
|
||||
/// Allows the caller to directly manipulate the allocated disk space for the
|
||||
/// file referred to by fd.
|
||||
#[cfg(any(target_os = "linux"))]
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(feature = "fs")]
|
||||
pub fn fallocate(
|
||||
fd: RawFd,
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
#![warn(missing_docs)]
|
||||
#![cfg_attr(docsrs, feature(doc_cfg))]
|
||||
#![deny(clippy::cast_ptr_alignment)]
|
||||
#![allow(clippy::bad_bit_mask)]
|
||||
|
||||
// Re-exported external crates
|
||||
pub use libc;
|
||||
|
||||
+1
-1
@@ -391,7 +391,7 @@ impl<'a> Nmount<'a> {
|
||||
});
|
||||
|
||||
let niov = self.iov.len() as c_uint;
|
||||
let iovp = self.iov.as_mut_ptr() as *mut libc::iovec;
|
||||
let iovp = self.iov.as_mut_ptr();
|
||||
let res = unsafe { libc::nmount(iovp, niov, flags.bits) };
|
||||
match Errno::result(res) {
|
||||
Ok(_) => Ok(()),
|
||||
|
||||
+2
-2
@@ -26,7 +26,7 @@ pub struct KEvent {
|
||||
target_os = "openbsd"
|
||||
))]
|
||||
type type_of_udata = *mut libc::c_void;
|
||||
#[cfg(any(target_os = "netbsd"))]
|
||||
#[cfg(target_os = "netbsd")]
|
||||
type type_of_udata = intptr_t;
|
||||
|
||||
#[cfg(target_os = "netbsd")]
|
||||
@@ -87,7 +87,7 @@ libc_enum! {
|
||||
target_os = "openbsd"
|
||||
))]
|
||||
pub type type_of_event_flag = u16;
|
||||
#[cfg(any(target_os = "netbsd"))]
|
||||
#[cfg(target_os = "netbsd")]
|
||||
pub type type_of_event_flag = u32;
|
||||
libc_bitflags! {
|
||||
pub struct EventFlag: type_of_event_flag {
|
||||
|
||||
@@ -712,7 +712,7 @@ macro_rules! ioctl_read_buf {
|
||||
pub unsafe fn $name(fd: $crate::libc::c_int,
|
||||
data: &mut [$ty])
|
||||
-> $crate::Result<$crate::libc::c_int> {
|
||||
convert_ioctl_res!($crate::libc::ioctl(fd, request_code_read!($ioty, $nr, data.len() * ::std::mem::size_of::<$ty>()) as $crate::sys::ioctl::ioctl_num_type, data))
|
||||
convert_ioctl_res!($crate::libc::ioctl(fd, request_code_read!($ioty, $nr, ::std::mem::size_of_val(data)) as $crate::sys::ioctl::ioctl_num_type, data))
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -751,7 +751,7 @@ macro_rules! ioctl_write_buf {
|
||||
pub unsafe fn $name(fd: $crate::libc::c_int,
|
||||
data: &[$ty])
|
||||
-> $crate::Result<$crate::libc::c_int> {
|
||||
convert_ioctl_res!($crate::libc::ioctl(fd, request_code_write!($ioty, $nr, data.len() * ::std::mem::size_of::<$ty>()) as $crate::sys::ioctl::ioctl_num_type, data))
|
||||
convert_ioctl_res!($crate::libc::ioctl(fd, request_code_write!($ioty, $nr, ::std::mem::size_of_val(data)) as $crate::sys::ioctl::ioctl_num_type, data))
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -780,7 +780,7 @@ macro_rules! ioctl_readwrite_buf {
|
||||
pub unsafe fn $name(fd: $crate::libc::c_int,
|
||||
data: &mut [$ty])
|
||||
-> $crate::Result<$crate::libc::c_int> {
|
||||
convert_ioctl_res!($crate::libc::ioctl(fd, request_code_readwrite!($ioty, $nr, data.len() * ::std::mem::size_of::<$ty>()) as $crate::sys::ioctl::ioctl_num_type, data))
|
||||
convert_ioctl_res!($crate::libc::ioctl(fd, request_code_readwrite!($ioty, $nr, ::std::mem::size_of_val(data)) as $crate::sys::ioctl::ioctl_num_type, data))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -80,7 +80,10 @@ pub fn get() -> Result<Persona> {
|
||||
///
|
||||
/// Example:
|
||||
///
|
||||
/// ```
|
||||
// Disable test on aarch64 until we know why it fails.
|
||||
// https://github.com/nix-rust/nix/issues/2060
|
||||
#[cfg_attr(target_arch = "aarch64", doc = " ```no_run")]
|
||||
#[cfg_attr(not(target_arch = "aarch64"), doc = " ```")]
|
||||
/// # use nix::sys::personality::{self, Persona};
|
||||
/// let mut pers = personality::get().unwrap();
|
||||
/// assert!(!pers.contains(Persona::ADDR_NO_RANDOMIZE));
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
///! Provides helpers for making ptrace system calls
|
||||
//! Provides helpers for making ptrace system calls
|
||||
|
||||
#[cfg(any(target_os = "android", target_os = "linux"))]
|
||||
mod linux;
|
||||
|
||||
+58
-14
@@ -41,21 +41,16 @@ use std::{fmt, mem, net, ptr, slice};
|
||||
/// Convert a std::net::Ipv4Addr into the libc form.
|
||||
#[cfg(feature = "net")]
|
||||
pub(crate) const fn ipv4addr_to_libc(addr: net::Ipv4Addr) -> libc::in_addr {
|
||||
static_assertions::assert_eq_size!(net::Ipv4Addr, libc::in_addr);
|
||||
// Safe because both types have the same memory layout, and no fancy Drop
|
||||
// impls.
|
||||
unsafe {
|
||||
mem::transmute(addr)
|
||||
libc::in_addr {
|
||||
s_addr: u32::from_ne_bytes(addr.octets())
|
||||
}
|
||||
}
|
||||
|
||||
/// Convert a std::net::Ipv6Addr into the libc form.
|
||||
#[cfg(feature = "net")]
|
||||
pub(crate) const fn ipv6addr_to_libc(addr: &net::Ipv6Addr) -> libc::in6_addr {
|
||||
static_assertions::assert_eq_size!(net::Ipv6Addr, libc::in6_addr);
|
||||
// Safe because both are Newtype wrappers around the same libc type
|
||||
unsafe {
|
||||
mem::transmute(*addr)
|
||||
libc::in6_addr {
|
||||
s6_addr: addr.octets()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -775,6 +770,7 @@ enum UnixAddrKind<'a> {
|
||||
}
|
||||
impl<'a> UnixAddrKind<'a> {
|
||||
/// Safety: sun & sun_len must be valid
|
||||
#[allow(clippy::unnecessary_cast)] // Not unnecessary on all platforms
|
||||
unsafe fn get(sun: &'a libc::sockaddr_un, sun_len: u8) -> Self {
|
||||
assert!(sun_len as usize >= offset_of!(libc::sockaddr_un, sun_path));
|
||||
let path_len =
|
||||
@@ -811,6 +807,7 @@ impl<'a> UnixAddrKind<'a> {
|
||||
|
||||
impl UnixAddr {
|
||||
/// Create a new sockaddr_un representing a filesystem path.
|
||||
#[allow(clippy::unnecessary_cast)] // Not unnecessary on all platforms
|
||||
pub fn new<P: ?Sized + NixPath>(path: &P) -> Result<UnixAddr> {
|
||||
path.with_nix_path(|cstr| unsafe {
|
||||
let mut ret = libc::sockaddr_un {
|
||||
@@ -858,6 +855,7 @@ impl UnixAddr {
|
||||
/// processes to communicate with processes having a different filesystem view.
|
||||
#[cfg(any(target_os = "android", target_os = "linux"))]
|
||||
#[cfg_attr(docsrs, doc(cfg(all())))]
|
||||
#[allow(clippy::unnecessary_cast)] // Not unnecessary on all platforms
|
||||
pub fn new_abstract(path: &[u8]) -> Result<UnixAddr> {
|
||||
unsafe {
|
||||
let mut ret = libc::sockaddr_un {
|
||||
@@ -1049,6 +1047,22 @@ impl SockaddrLike for UnixAddr {
|
||||
{
|
||||
mem::size_of::<libc::sockaddr_un>() as libc::socklen_t
|
||||
}
|
||||
|
||||
unsafe fn set_length(&mut self, new_length: usize) -> std::result::Result<(), SocketAddressLengthNotDynamic> {
|
||||
// `new_length` is only used on some platforms, so it must be provided even when not used
|
||||
#![allow(unused_variables)]
|
||||
cfg_if! {
|
||||
if #[cfg(any(target_os = "android",
|
||||
target_os = "fuchsia",
|
||||
target_os = "illumos",
|
||||
target_os = "linux",
|
||||
target_os = "redox",
|
||||
))] {
|
||||
self.sun_len = new_length as u8;
|
||||
}
|
||||
};
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<libc::sockaddr_un> for UnixAddr {
|
||||
@@ -1198,8 +1212,33 @@ pub trait SockaddrLike: private::SockaddrLikePriv {
|
||||
{
|
||||
mem::size_of::<Self>() as libc::socklen_t
|
||||
}
|
||||
|
||||
/// Set the length of this socket address
|
||||
///
|
||||
/// This method may only be called on socket addresses whose lengths are dynamic, and it
|
||||
/// returns an error if called on a type whose length is static.
|
||||
///
|
||||
/// # Safety
|
||||
///
|
||||
/// `new_length` must be a valid length for this type of address. Specifically, reads of that
|
||||
/// length from `self` must be valid.
|
||||
#[doc(hidden)]
|
||||
unsafe fn set_length(&mut self, _new_length: usize) -> std::result::Result<(), SocketAddressLengthNotDynamic> {
|
||||
Err(SocketAddressLengthNotDynamic)
|
||||
}
|
||||
}
|
||||
|
||||
/// The error returned by [`SockaddrLike::set_length`] on an address whose length is statically
|
||||
/// fixed.
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
pub struct SocketAddressLengthNotDynamic;
|
||||
impl fmt::Display for SocketAddressLengthNotDynamic {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.write_str("Attempted to set length on socket whose length is statically fixed")
|
||||
}
|
||||
}
|
||||
impl std::error::Error for SocketAddressLengthNotDynamic {}
|
||||
|
||||
impl private::SockaddrLikePriv for () {
|
||||
fn as_mut_ptr(&mut self) -> *mut libc::sockaddr {
|
||||
ptr::null_mut()
|
||||
@@ -1235,9 +1274,6 @@ impl SockaddrLike for () {
|
||||
}
|
||||
|
||||
/// An IPv4 socket address
|
||||
// This is identical to net::SocketAddrV4. But the standard library
|
||||
// doesn't allow direct access to the libc fields, which we need. So we
|
||||
// reimplement it here.
|
||||
#[cfg(feature = "net")]
|
||||
#[repr(transparent)]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
@@ -1645,6 +1681,15 @@ impl SockaddrLike for SockaddrStorage {
|
||||
None => mem::size_of_val(self) as libc::socklen_t
|
||||
}
|
||||
}
|
||||
|
||||
unsafe fn set_length(&mut self, new_length: usize) -> std::result::Result<(), SocketAddressLengthNotDynamic> {
|
||||
match self.as_unix_addr_mut() {
|
||||
Some(addr) => {
|
||||
addr.set_length(new_length)
|
||||
},
|
||||
None => Err(SocketAddressLengthNotDynamic),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! accessors {
|
||||
@@ -1961,7 +2006,7 @@ impl PartialEq for SockaddrStorage {
|
||||
}
|
||||
}
|
||||
|
||||
mod private {
|
||||
pub(super) mod private {
|
||||
pub trait SockaddrLikePriv {
|
||||
/// Returns a mutable raw pointer to the inner structure.
|
||||
///
|
||||
@@ -2850,7 +2895,6 @@ mod datalink {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+25
-20
@@ -226,10 +226,10 @@ pub enum SockProtocol {
|
||||
// The protocol number is fed into the socket syscall in network byte order.
|
||||
#[cfg(any(target_os = "android", target_os = "linux"))]
|
||||
#[cfg_attr(docsrs, doc(cfg(all())))]
|
||||
EthAll = libc::ETH_P_ALL.to_be(),
|
||||
EthAll = (libc::ETH_P_ALL as u16).to_be() as i32,
|
||||
}
|
||||
|
||||
#[cfg(any(target_os = "linux"))]
|
||||
#[cfg(target_os = "linux")]
|
||||
libc_bitflags! {
|
||||
/// Configuration flags for `SO_TIMESTAMPING` interface
|
||||
///
|
||||
@@ -1535,7 +1535,7 @@ pub fn sendmmsg<'a, XS, AS, C, I, S>(
|
||||
|
||||
|
||||
for (i, ((slice, addr), mmsghdr)) in slices.into_iter().zip(addrs.as_ref()).zip(data.items.iter_mut() ).enumerate() {
|
||||
let mut p = &mut mmsghdr.msg_hdr;
|
||||
let p = &mut mmsghdr.msg_hdr;
|
||||
p.msg_iov = slice.as_ref().as_ptr() as *mut libc::iovec;
|
||||
p.msg_iovlen = slice.as_ref().len() as _;
|
||||
|
||||
@@ -1611,24 +1611,24 @@ impl<S> MultiHeaders<S> {
|
||||
{
|
||||
// we will be storing pointers to addresses inside mhdr - convert it into boxed
|
||||
// slice so it can'be changed later by pushing anything into self.addresses
|
||||
let mut addresses = vec![std::mem::MaybeUninit::uninit(); num_slices].into_boxed_slice();
|
||||
let mut addresses = vec![std::mem::MaybeUninit::<S>::uninit(); num_slices].into_boxed_slice();
|
||||
|
||||
let msg_controllen = cmsg_buffer.as_ref().map_or(0, |v| v.capacity());
|
||||
|
||||
// we'll need a cmsg_buffer for each slice, we preallocate a vector and split
|
||||
// it into "slices" parts
|
||||
let cmsg_buffers =
|
||||
let mut cmsg_buffers =
|
||||
cmsg_buffer.map(|v| vec![0u8; v.capacity() * num_slices].into_boxed_slice());
|
||||
|
||||
let items = addresses
|
||||
.iter_mut()
|
||||
.enumerate()
|
||||
.map(|(ix, address)| {
|
||||
let (ptr, cap) = match &cmsg_buffers {
|
||||
Some(v) => ((&v[ix * msg_controllen] as *const u8), msg_controllen),
|
||||
None => (std::ptr::null(), 0),
|
||||
let (ptr, cap) = match &mut cmsg_buffers {
|
||||
Some(v) => ((&mut v[ix * msg_controllen] as *mut u8), msg_controllen),
|
||||
None => (std::ptr::null_mut(), 0),
|
||||
};
|
||||
let msg_hdr = unsafe { pack_mhdr_to_receive(std::ptr::null(), 0, ptr, cap, address.as_mut_ptr()) };
|
||||
let msg_hdr = unsafe { pack_mhdr_to_receive(std::ptr::null_mut(), 0, ptr, cap, address.as_mut_ptr()) };
|
||||
libc::mmsghdr {
|
||||
msg_hdr,
|
||||
msg_len: 0,
|
||||
@@ -1689,7 +1689,7 @@ where
|
||||
{
|
||||
let mut count = 0;
|
||||
for (i, (slice, mmsghdr)) in slices.into_iter().zip(data.items.iter_mut()).enumerate() {
|
||||
let mut p = &mut mmsghdr.msg_hdr;
|
||||
let p = &mut mmsghdr.msg_hdr;
|
||||
p.msg_iov = slice.as_ref().as_ptr() as *mut libc::iovec;
|
||||
p.msg_iovlen = slice.as_ref().len() as _;
|
||||
count = i + 1;
|
||||
@@ -1916,7 +1916,7 @@ unsafe fn read_mhdr<'a, 'i, S>(
|
||||
mhdr: msghdr,
|
||||
r: isize,
|
||||
msg_controllen: usize,
|
||||
address: S,
|
||||
mut address: S,
|
||||
) -> RecvMsg<'a, 'i, S>
|
||||
where S: SockaddrLike
|
||||
{
|
||||
@@ -1932,6 +1932,11 @@ unsafe fn read_mhdr<'a, 'i, S>(
|
||||
}.as_ref()
|
||||
};
|
||||
|
||||
// Ignore errors if this socket address has statically-known length
|
||||
//
|
||||
// This is to ensure that unix socket addresses have their length set appropriately.
|
||||
let _ = address.set_length(mhdr.msg_namelen as usize);
|
||||
|
||||
RecvMsg {
|
||||
bytes: r as usize,
|
||||
cmsghdr,
|
||||
@@ -1954,9 +1959,9 @@ unsafe fn read_mhdr<'a, 'i, S>(
|
||||
///
|
||||
/// Buffers must remain valid for the whole lifetime of msghdr
|
||||
unsafe fn pack_mhdr_to_receive<S>(
|
||||
iov_buffer: *const IoSliceMut,
|
||||
iov_buffer: *mut IoSliceMut,
|
||||
iov_buffer_len: usize,
|
||||
cmsg_buffer: *const u8,
|
||||
cmsg_buffer: *mut u8,
|
||||
cmsg_capacity: usize,
|
||||
address: *mut S,
|
||||
) -> msghdr
|
||||
@@ -1967,7 +1972,7 @@ unsafe fn pack_mhdr_to_receive<S>(
|
||||
// initialize it.
|
||||
let mut mhdr = mem::MaybeUninit::<msghdr>::zeroed();
|
||||
let p = mhdr.as_mut_ptr();
|
||||
(*p).msg_name = (*address).as_mut_ptr() as *mut c_void;
|
||||
(*p).msg_name = address as *mut c_void;
|
||||
(*p).msg_namelen = S::size();
|
||||
(*p).msg_iov = iov_buffer as *mut iovec;
|
||||
(*p).msg_iovlen = iov_buffer_len as _;
|
||||
@@ -1992,7 +1997,7 @@ fn pack_mhdr_to_send<'a, I, C, S>(
|
||||
|
||||
// The message header must be initialized before the individual cmsgs.
|
||||
let cmsg_ptr = if capacity > 0 {
|
||||
cmsg_buffer.as_ptr() as *mut c_void
|
||||
cmsg_buffer.as_mut_ptr() as *mut c_void
|
||||
} else {
|
||||
ptr::null_mut()
|
||||
};
|
||||
@@ -2046,7 +2051,7 @@ fn pack_mhdr_to_send<'a, I, C, S>(
|
||||
/// [recvmsg(2)](https://pubs.opengroup.org/onlinepubs/9699919799/functions/recvmsg.html)
|
||||
pub fn recvmsg<'a, 'outer, 'inner, S>(fd: RawFd, iov: &'outer mut [IoSliceMut<'inner>],
|
||||
mut cmsg_buffer: Option<&'a mut Vec<u8>>,
|
||||
flags: MsgFlags) -> Result<RecvMsg<'a, 'inner, S>>
|
||||
flags: MsgFlags) -> Result<RecvMsg<'a, 'outer, S>>
|
||||
where S: SockaddrLike + 'a,
|
||||
'inner: 'outer
|
||||
{
|
||||
@@ -2056,7 +2061,7 @@ pub fn recvmsg<'a, 'outer, 'inner, S>(fd: RawFd, iov: &'outer mut [IoSliceMut<'i
|
||||
.map(|v| (v.as_mut_ptr(), v.capacity()))
|
||||
.unwrap_or((ptr::null_mut(), 0));
|
||||
let mut mhdr = unsafe {
|
||||
pack_mhdr_to_receive(iov.as_ref().as_ptr(), iov.len(), msg_control, msg_controllen, address.as_mut_ptr())
|
||||
pack_mhdr_to_receive(iov.as_mut().as_mut_ptr(), iov.len(), msg_control, msg_controllen, address.as_mut_ptr())
|
||||
};
|
||||
|
||||
let ret = unsafe { libc::recvmsg(fd, &mut mhdr, flags.bits()) };
|
||||
@@ -2202,7 +2207,7 @@ pub fn recv(sockfd: RawFd, buf: &mut [u8], flags: MsgFlags) -> Result<usize> {
|
||||
unsafe {
|
||||
let ret = libc::recv(
|
||||
sockfd,
|
||||
buf.as_ptr() as *mut c_void,
|
||||
buf.as_mut_ptr() as *mut c_void,
|
||||
buf.len() as size_t,
|
||||
flags.bits(),
|
||||
);
|
||||
@@ -2226,7 +2231,7 @@ pub fn recvfrom<T: SockaddrLike>(
|
||||
|
||||
let ret = Errno::result(libc::recvfrom(
|
||||
sockfd,
|
||||
buf.as_ptr() as *mut c_void,
|
||||
buf.as_mut_ptr() as *mut c_void,
|
||||
buf.len() as size_t,
|
||||
0,
|
||||
addr.as_mut_ptr() as *mut libc::sockaddr,
|
||||
@@ -2236,7 +2241,7 @@ pub fn recvfrom<T: SockaddrLike>(
|
||||
Ok((
|
||||
ret,
|
||||
T::from_raw(
|
||||
addr.assume_init().as_ptr() as *const libc::sockaddr,
|
||||
addr.assume_init().as_ptr(),
|
||||
Some(len),
|
||||
),
|
||||
))
|
||||
|
||||
@@ -678,7 +678,7 @@ sockopt_impl!(
|
||||
libc::IP6T_SO_ORIGINAL_DST,
|
||||
libc::sockaddr_in6
|
||||
);
|
||||
#[cfg(any(target_os = "linux"))]
|
||||
#[cfg(target_os = "linux")]
|
||||
sockopt_impl!(
|
||||
/// Specifies exact type of timestamping information collected by the kernel
|
||||
/// [Further reading](https://www.kernel.org/doc/html/latest/networking/timestamping.html)
|
||||
@@ -697,7 +697,7 @@ sockopt_impl!(
|
||||
libc::SO_TIMESTAMP,
|
||||
bool
|
||||
);
|
||||
#[cfg(all(target_os = "linux"))]
|
||||
#[cfg(target_os = "linux")]
|
||||
sockopt_impl!(
|
||||
/// Enable or disable the receiving of the `SO_TIMESTAMPNS` control message.
|
||||
ReceiveTimestampns,
|
||||
|
||||
+7
-1
@@ -28,6 +28,9 @@ pub fn writev(fd: RawFd, iov: &[IoSlice<'_>]) -> Result<usize> {
|
||||
/// Low-level vectored read from a raw file descriptor
|
||||
///
|
||||
/// See also [readv(2)](https://pubs.opengroup.org/onlinepubs/9699919799/functions/readv.html)
|
||||
// Clippy doesn't know that we need to pass iov mutably only because the
|
||||
// mutation happens after converting iov to a pointer
|
||||
#[allow(clippy::needless_pass_by_ref_mut)]
|
||||
pub fn readv(fd: RawFd, iov: &mut [IoSliceMut<'_>]) -> Result<usize> {
|
||||
// SAFETY: same as in writev(), IoSliceMut is ABI-compatible with iovec
|
||||
let res = unsafe {
|
||||
@@ -71,6 +74,9 @@ pub fn pwritev(fd: RawFd, iov: &[IoSlice<'_>], offset: off_t) -> Result<usize> {
|
||||
/// See also: [`readv`](fn.readv.html) and [`pread`](fn.pread.html)
|
||||
#[cfg(not(any(target_os = "redox", target_os = "haiku")))]
|
||||
#[cfg_attr(docsrs, doc(cfg(all())))]
|
||||
// Clippy doesn't know that we need to pass iov mutably only because the
|
||||
// mutation happens after converting iov to a pointer
|
||||
#[allow(clippy::needless_pass_by_ref_mut)]
|
||||
pub fn preadv(
|
||||
fd: RawFd,
|
||||
iov: &mut [IoSliceMut<'_>],
|
||||
@@ -201,7 +207,7 @@ impl<'a> IoVec<&'a mut [u8]> {
|
||||
pub fn from_mut_slice(buf: &'a mut [u8]) -> IoVec<&'a mut [u8]> {
|
||||
IoVec(
|
||||
libc::iovec {
|
||||
iov_base: buf.as_ptr() as *mut c_void,
|
||||
iov_base: buf.as_mut_ptr() as *mut c_void,
|
||||
iov_len: buf.len() as size_t,
|
||||
},
|
||||
PhantomData,
|
||||
|
||||
@@ -200,7 +200,7 @@ mod aio_read {
|
||||
assert_eq!(err, Ok(()));
|
||||
assert_eq!(aior.as_mut().aio_return().unwrap(), EXPECT.len());
|
||||
}
|
||||
assert_eq!(EXPECT, rbuf.deref().deref());
|
||||
assert_eq!(EXPECT, rbuf.deref());
|
||||
}
|
||||
|
||||
// Like ok, but allocates the structure on the stack.
|
||||
@@ -223,7 +223,7 @@ mod aio_read {
|
||||
assert_eq!(err, Ok(()));
|
||||
assert_eq!(aior.as_mut().aio_return().unwrap(), EXPECT.len());
|
||||
}
|
||||
assert_eq!(EXPECT, rbuf.deref().deref());
|
||||
assert_eq!(EXPECT, rbuf.deref());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+70
-44
@@ -68,7 +68,7 @@ pub fn test_inetv4_addr_roundtrip_sockaddr_storage_to_addr() {
|
||||
assert_eq!(from_storage, sockaddr);
|
||||
}
|
||||
|
||||
#[cfg(any(target_os = "linux"))]
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg_attr(qemu, ignore)]
|
||||
#[test]
|
||||
pub fn test_timestamping() {
|
||||
@@ -298,6 +298,45 @@ pub fn test_socketpair() {
|
||||
assert_eq!(&buf[..], b"hello");
|
||||
}
|
||||
|
||||
#[test]
|
||||
pub fn test_recvmsg_sockaddr_un() {
|
||||
use nix::sys::socket::{
|
||||
self, bind, socket, AddressFamily, MsgFlags, SockFlag, SockType,
|
||||
};
|
||||
|
||||
let tempdir = tempfile::tempdir().unwrap();
|
||||
let sockname = tempdir.path().join("sock");
|
||||
let sock = socket(
|
||||
AddressFamily::Unix,
|
||||
SockType::Datagram,
|
||||
SockFlag::empty(),
|
||||
None,
|
||||
)
|
||||
.expect("socket failed");
|
||||
let sockaddr = UnixAddr::new(&sockname).unwrap();
|
||||
bind(sock, &sockaddr).expect("bind failed");
|
||||
|
||||
// Send a message
|
||||
let send_buffer = "hello".as_bytes();
|
||||
if let Err(e) = socket::sendmsg(
|
||||
sock,
|
||||
&[std::io::IoSlice::new(send_buffer)],
|
||||
&[],
|
||||
MsgFlags::empty(),
|
||||
Some(&sockaddr),
|
||||
) {
|
||||
crate::skip!("Couldn't send ({:?}), so skipping test", e);
|
||||
}
|
||||
|
||||
// Receive the message
|
||||
let mut recv_buffer = [0u8; 32];
|
||||
let mut iov = [std::io::IoSliceMut::new(&mut recv_buffer)];
|
||||
let received =
|
||||
socket::recvmsg(sock, &mut iov, None, MsgFlags::empty()).unwrap();
|
||||
// Check the address in the received message
|
||||
assert_eq!(sockaddr, received.address.unwrap());
|
||||
}
|
||||
|
||||
#[test]
|
||||
pub fn test_std_conversions() {
|
||||
use nix::sys::socket::*;
|
||||
@@ -2136,63 +2175,50 @@ pub fn test_recv_ipv6pktinfo() {
|
||||
}
|
||||
|
||||
#[cfg(any(target_os = "android", target_os = "linux"))]
|
||||
#[cfg_attr(graviton, ignore = "Not supported by the CI environment")]
|
||||
#[test]
|
||||
pub fn test_vsock() {
|
||||
use nix::errno::Errno;
|
||||
use nix::sys::socket::{
|
||||
bind, connect, listen, socket, AddressFamily, SockFlag, SockType,
|
||||
VsockAddr,
|
||||
};
|
||||
use nix::unistd::close;
|
||||
use std::thread;
|
||||
use nix::sys::socket::SockaddrLike;
|
||||
use nix::sys::socket::{AddressFamily, VsockAddr};
|
||||
use std::convert::TryInto;
|
||||
use std::mem;
|
||||
|
||||
let port: u32 = 3000;
|
||||
|
||||
let s1 = socket(
|
||||
AddressFamily::Vsock,
|
||||
SockType::Stream,
|
||||
SockFlag::empty(),
|
||||
None,
|
||||
)
|
||||
.expect("socket failed");
|
||||
let addr_local = VsockAddr::new(libc::VMADDR_CID_LOCAL, port);
|
||||
assert_eq!(addr_local.cid(), libc::VMADDR_CID_LOCAL);
|
||||
assert_eq!(addr_local.port(), port);
|
||||
|
||||
// VMADDR_CID_HYPERVISOR is reserved, so we expect an EADDRNOTAVAIL error.
|
||||
let sockaddr_hv = VsockAddr::new(libc::VMADDR_CID_HYPERVISOR, port);
|
||||
assert_eq!(bind(s1, &sockaddr_hv).err(), Some(Errno::EADDRNOTAVAIL));
|
||||
let addr_any = VsockAddr::new(libc::VMADDR_CID_ANY, libc::VMADDR_PORT_ANY);
|
||||
assert_eq!(addr_any.cid(), libc::VMADDR_CID_ANY);
|
||||
assert_eq!(addr_any.port(), libc::VMADDR_PORT_ANY);
|
||||
|
||||
let sockaddr_any = VsockAddr::new(libc::VMADDR_CID_ANY, port);
|
||||
assert_eq!(bind(s1, &sockaddr_any), Ok(()));
|
||||
listen(s1, 10).expect("listen failed");
|
||||
assert_ne!(addr_local, addr_any);
|
||||
assert_ne!(calculate_hash(&addr_local), calculate_hash(&addr_any));
|
||||
|
||||
let thr = thread::spawn(move || {
|
||||
let cid: u32 = libc::VMADDR_CID_HOST;
|
||||
let addr1 = VsockAddr::new(libc::VMADDR_CID_HOST, port);
|
||||
let addr2 = VsockAddr::new(libc::VMADDR_CID_HOST, port);
|
||||
assert_eq!(addr1, addr2);
|
||||
assert_eq!(calculate_hash(&addr1), calculate_hash(&addr2));
|
||||
|
||||
let s2 = socket(
|
||||
AddressFamily::Vsock,
|
||||
SockType::Stream,
|
||||
SockFlag::empty(),
|
||||
None,
|
||||
let addr3 = unsafe {
|
||||
VsockAddr::from_raw(
|
||||
addr2.as_ref() as *const libc::sockaddr_vm as *const libc::sockaddr,
|
||||
Some(mem::size_of::<libc::sockaddr_vm>().try_into().unwrap()),
|
||||
)
|
||||
.expect("socket failed");
|
||||
|
||||
let sockaddr_host = VsockAddr::new(cid, port);
|
||||
|
||||
// The current implementation does not support loopback devices, so,
|
||||
// for now, we expect a failure on the connect.
|
||||
assert_ne!(connect(s2, &sockaddr_host), Ok(()));
|
||||
|
||||
close(s2).unwrap();
|
||||
});
|
||||
|
||||
close(s1).unwrap();
|
||||
thr.join().unwrap();
|
||||
}
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
addr3.as_ref().svm_family,
|
||||
AddressFamily::Vsock as libc::sa_family_t
|
||||
);
|
||||
assert_eq!(addr3.as_ref().svm_cid, addr1.cid());
|
||||
assert_eq!(addr3.as_ref().svm_port, addr1.port());
|
||||
}
|
||||
|
||||
// Disable the test on emulated platforms because it fails in Cirrus-CI. Lack
|
||||
// of QEMU support is suspected.
|
||||
#[cfg_attr(qemu, ignore)]
|
||||
#[cfg(all(target_os = "linux"))]
|
||||
#[cfg(target_os = "linux")]
|
||||
#[test]
|
||||
fn test_recvmsg_timestampns() {
|
||||
use nix::sys::socket::*;
|
||||
@@ -2247,7 +2273,7 @@ fn test_recvmsg_timestampns() {
|
||||
// Disable the test on emulated platforms because it fails in Cirrus-CI. Lack
|
||||
// of QEMU support is suspected.
|
||||
#[cfg_attr(qemu, ignore)]
|
||||
#[cfg(all(target_os = "linux"))]
|
||||
#[cfg(target_os = "linux")]
|
||||
#[test]
|
||||
fn test_recvmmsg_timestampns() {
|
||||
use nix::sys::socket::*;
|
||||
|
||||
+3
-3
@@ -238,7 +238,7 @@ mod linux_android {
|
||||
use nix::unistd::{close, pipe, read, write};
|
||||
|
||||
use tempfile::tempfile;
|
||||
#[cfg(any(target_os = "linux"))]
|
||||
#[cfg(target_os = "linux")]
|
||||
use tempfile::NamedTempFile;
|
||||
|
||||
use crate::*;
|
||||
@@ -340,7 +340,7 @@ mod linux_android {
|
||||
|
||||
let buf1 = b"abcdef";
|
||||
let buf2 = b"defghi";
|
||||
let iovecs = vec![IoSlice::new(&buf1[0..3]), IoSlice::new(&buf2[0..3])];
|
||||
let iovecs = [IoSlice::new(&buf1[0..3]), IoSlice::new(&buf2[0..3])];
|
||||
|
||||
let res = vmsplice(wr, &iovecs[..], SpliceFFlags::empty()).unwrap();
|
||||
|
||||
@@ -355,7 +355,7 @@ mod linux_android {
|
||||
close(wr).unwrap();
|
||||
}
|
||||
|
||||
#[cfg(any(target_os = "linux"))]
|
||||
#[cfg(target_os = "linux")]
|
||||
#[test]
|
||||
fn test_fallocate() {
|
||||
let tmp = NamedTempFile::new().unwrap();
|
||||
|
||||
@@ -63,10 +63,10 @@ fn test_sendfile64_linux() {
|
||||
fn test_sendfile_freebsd() {
|
||||
// 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();
|
||||
@@ -114,10 +114,10 @@ fn test_sendfile_freebsd() {
|
||||
fn test_sendfile_dragonfly() {
|
||||
// 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();
|
||||
|
||||
Reference in New Issue
Block a user