mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-29 02:03:53 +00:00
Rollup merge of #132977 - cberner:fix_solaris, r=tgross35
Fix compilation error on Solaris due to flock usage PR 130999 added the file_lock feature, but libc does not define flock() for the Solaris platform leading to a compilation error. Additionally, I went through all the Tier 2 platforms and read through their documentation to see whether flock was implemented. This turned up 5 more Unix platforms where flock is not supported, even though it may exist in the libc crate. Fixes https://github.com/rust-lang/rust/issues/132921 Related to #130999
This commit is contained in:
commit
3f9f7c4a72
@ -204,6 +204,13 @@ fn file_test_io_seek_and_write() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(
|
||||
windows,
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
))]
|
||||
fn file_lock_multiple_shared() {
|
||||
let tmpdir = tmpdir();
|
||||
let filename = &tmpdir.join("file_lock_multiple_shared_test.txt");
|
||||
@ -220,6 +227,13 @@ fn file_lock_multiple_shared() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(
|
||||
windows,
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
))]
|
||||
fn file_lock_blocking() {
|
||||
let tmpdir = tmpdir();
|
||||
let filename = &tmpdir.join("file_lock_blocking_test.txt");
|
||||
@ -237,6 +251,13 @@ fn file_lock_blocking() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(
|
||||
windows,
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
))]
|
||||
fn file_lock_drop() {
|
||||
let tmpdir = tmpdir();
|
||||
let filename = &tmpdir.join("file_lock_dup_test.txt");
|
||||
@ -251,6 +272,13 @@ fn file_lock_drop() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(
|
||||
windows,
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
))]
|
||||
fn file_lock_dup() {
|
||||
let tmpdir = tmpdir();
|
||||
let filename = &tmpdir.join("file_lock_dup_test.txt");
|
||||
|
@ -1254,16 +1254,54 @@ impl File {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
))]
|
||||
pub fn lock(&self) -> io::Result<()> {
|
||||
cvt(unsafe { libc::flock(self.as_raw_fd(), libc::LOCK_EX) })?;
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
#[cfg(not(any(
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
)))]
|
||||
pub fn lock(&self) -> io::Result<()> {
|
||||
Err(io::const_io_error!(io::ErrorKind::Unsupported, "lock() not supported"))
|
||||
}
|
||||
|
||||
#[cfg(any(
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
))]
|
||||
pub fn lock_shared(&self) -> io::Result<()> {
|
||||
cvt(unsafe { libc::flock(self.as_raw_fd(), libc::LOCK_SH) })?;
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
#[cfg(not(any(
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
)))]
|
||||
pub fn lock_shared(&self) -> io::Result<()> {
|
||||
Err(io::const_io_error!(io::ErrorKind::Unsupported, "lock_shared() not supported"))
|
||||
}
|
||||
|
||||
#[cfg(any(
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
))]
|
||||
pub fn try_lock(&self) -> io::Result<bool> {
|
||||
let result = cvt(unsafe { libc::flock(self.as_raw_fd(), libc::LOCK_EX | libc::LOCK_NB) });
|
||||
if let Err(ref err) = result {
|
||||
@ -1275,6 +1313,22 @@ impl File {
|
||||
return Ok(true);
|
||||
}
|
||||
|
||||
#[cfg(not(any(
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
)))]
|
||||
pub fn try_lock(&self) -> io::Result<bool> {
|
||||
Err(io::const_io_error!(io::ErrorKind::Unsupported, "try_lock() not supported"))
|
||||
}
|
||||
|
||||
#[cfg(any(
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
))]
|
||||
pub fn try_lock_shared(&self) -> io::Result<bool> {
|
||||
let result = cvt(unsafe { libc::flock(self.as_raw_fd(), libc::LOCK_SH | libc::LOCK_NB) });
|
||||
if let Err(ref err) = result {
|
||||
@ -1286,11 +1340,37 @@ impl File {
|
||||
return Ok(true);
|
||||
}
|
||||
|
||||
#[cfg(not(any(
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
)))]
|
||||
pub fn try_lock_shared(&self) -> io::Result<bool> {
|
||||
Err(io::const_io_error!(io::ErrorKind::Unsupported, "try_lock_shared() not supported"))
|
||||
}
|
||||
|
||||
#[cfg(any(
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
))]
|
||||
pub fn unlock(&self) -> io::Result<()> {
|
||||
cvt(unsafe { libc::flock(self.as_raw_fd(), libc::LOCK_UN) })?;
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
#[cfg(not(any(
|
||||
target_os = "freebsd",
|
||||
target_os = "linux",
|
||||
target_os = "netbsd",
|
||||
target_vendor = "apple",
|
||||
)))]
|
||||
pub fn unlock(&self) -> io::Result<()> {
|
||||
Err(io::const_io_error!(io::ErrorKind::Unsupported, "unlock() not supported"))
|
||||
}
|
||||
|
||||
pub fn truncate(&self, size: u64) -> io::Result<()> {
|
||||
let size: off64_t =
|
||||
size.try_into().map_err(|e| io::Error::new(io::ErrorKind::InvalidInput, e))?;
|
||||
|
Loading…
Reference in New Issue
Block a user