use crate::{Error, ErrorKind, Result};
use nix::fcntl::FlockArg;
use std::os::unix::prelude::*;
pub(crate) fn lock_exclusive(fd: RawFd) -> Result<()> {
nix::fcntl::flock(fd, FlockArg::LockExclusiveNonblock).map_err(|e| {
if e == nix::errno::Errno::EWOULDBLOCK {
Error::new(
ErrorKind::NoDevice,
"Unable to acquire exclusive lock on serial port",
)
} else {
e.into()
}
})
}
pub(crate) fn lock_shared(fd: RawFd) -> Result<()> {
nix::fcntl::flock(fd, FlockArg::LockSharedNonblock).map_err(|e| {
if e == nix::errno::Errno::EWOULDBLOCK {
Error::new(
ErrorKind::NoDevice,
"Unable to acquire shared lock on serial port",
)
} else {
e.into()
}
})
}