diff --git a/cap-fs-ext/src/dir_entry_ext.rs b/cap-fs-ext/src/dir_entry_ext.rs index 59abf6fb..a78272e7 100644 --- a/cap-fs-ext/src/dir_entry_ext.rs +++ b/cap-fs-ext/src/dir_entry_ext.rs @@ -1,6 +1,6 @@ -use cap_primitives::fs::Metadata; #[cfg(windows)] use cap_primitives::fs::_WindowsDirEntryExt; +use cap_primitives::fs::Metadata; use std::io; /// Extension trait for `DirEntry`. diff --git a/cap-primitives/src/fs/mod.rs b/cap-primitives/src/fs/mod.rs index 62ef8c9c..2b77fab7 100644 --- a/cap-primitives/src/fs/mod.rs +++ b/cap-primitives/src/fs/mod.rs @@ -64,16 +64,16 @@ pub use canonicalize::canonicalize; pub use copy::copy; pub use create_dir::create_dir; pub use dir_builder::*; -pub use dir_entry::DirEntry; #[cfg(windows)] pub use dir_entry::_WindowsDirEntryExt; +pub use dir_entry::DirEntry; pub use dir_options::DirOptions; pub use file::FileExt; +#[cfg(windows)] +pub use file_type::_WindowsFileTypeExt; pub use file_type::FileType; #[cfg(any(unix, target_os = "vxworks", all(windows, windows_file_type_ext)))] pub use file_type::FileTypeExt; -#[cfg(windows)] -pub use file_type::_WindowsFileTypeExt; pub use follow_symlinks::FollowSymlinks; pub use hard_link::hard_link; pub use is_file_read_write::is_file_read_write; diff --git a/tests/cap-net-ext-tcp-split.rs b/tests/cap-net-ext-tcp-split.rs index db279ded..17fdae36 100644 --- a/tests/cap-net-ext-tcp-split.rs +++ b/tests/cap-net-ext-tcp-split.rs @@ -62,7 +62,10 @@ fn connect_error() { || e.kind() == ErrorKind::InvalidInput || e.kind() == ErrorKind::AddrInUse || e.kind() == ErrorKind::AddrNotAvailable - || e.kind() == ErrorKind::TimedOut, + || e.kind() == ErrorKind::TimedOut + // Rust >=1.83 adds `ErrorKind::NetworkUnreachable`. + || e.to_string().contains("network unreachable") + || e.to_string().contains("Network is unreachable"), "bad error: {} {:?}", e, e.kind() diff --git a/tests/cap-net-ext-tcp.rs b/tests/cap-net-ext-tcp.rs index 4839c168..b7ddd5a7 100644 --- a/tests/cap-net-ext-tcp.rs +++ b/tests/cap-net-ext-tcp.rs @@ -52,7 +52,10 @@ fn connect_error() { || e.kind() == ErrorKind::InvalidInput || e.kind() == ErrorKind::AddrInUse || e.kind() == ErrorKind::AddrNotAvailable - || e.kind() == ErrorKind::TimedOut, + || e.kind() == ErrorKind::TimedOut + // Rust >=1.83 adds `ErrorKind::NetworkUnreachable`. + || e.to_string().contains("network unreachable") + || e.to_string().contains("Network is unreachable"), "bad error: {} {:?}", e, e.kind() diff --git a/tests/fs_additional.rs b/tests/fs_additional.rs index 64716819..bc220df0 100644 --- a/tests/fs_additional.rs +++ b/tests/fs_additional.rs @@ -1386,17 +1386,29 @@ fn dotdot_slashdot_at_end_of_symlink_all_inside_dir() { fn statat_slash() { let tmpdir = tmpdir(); - error_contains!(tmpdir.metadata("/"), "a path led outside of the filesystem"); - error_contains!( - tmpdir.metadata("/foo"), - "a path led outside of the filesystem" - ); - error_contains!( - tmpdir.symlink_metadata("/"), - "a path led outside of the filesyste" - ); - error_contains!( - tmpdir.symlink_metadata("/foo"), - "a path led outside of the filesyste" - ); + // FreeBSD 14+ uses `O_RESOLVE_BENEATH` which issues different errors. + #[cfg(target_os = "freebsd")] + { + error_contains!(tmpdir.metadata("/"), "Capabilities insufficient"); + error_contains!(tmpdir.metadata("/foo"), "Capabilities insufficient"); + error_contains!(tmpdir.symlink_metadata("/"), "Capabilities insufficient"); + error_contains!(tmpdir.symlink_metadata("/foo"), "Capabilities insufficient"); + } + + #[cfg(not(target_os = "freebsd"))] + { + error_contains!(tmpdir.metadata("/"), "a path led outside of the filesystem"); + error_contains!( + tmpdir.metadata("/foo"), + "a path led outside of the filesystem" + ); + error_contains!( + tmpdir.symlink_metadata("/"), + "a path led outside of the filesyste" + ); + error_contains!( + tmpdir.symlink_metadata("/foo"), + "a path led outside of the filesyste" + ); + } } diff --git a/tests/net-tcp.rs b/tests/net-tcp.rs index 699050dd..108e558e 100644 --- a/tests/net-tcp.rs +++ b/tests/net-tcp.rs @@ -49,7 +49,10 @@ fn connect_error() { || e.kind() == ErrorKind::InvalidInput || e.kind() == ErrorKind::AddrInUse || e.kind() == ErrorKind::AddrNotAvailable - || e.kind() == ErrorKind::TimedOut, + || e.kind() == ErrorKind::TimedOut + // Rust >=1.83 adds `ErrorKind::NetworkUnreachable`. + || e.to_string().contains("network unreachable") + || e.to_string().contains("Network is unreachable"), "bad error: {} {:?}", e, e.kind()