#[cfg(not(target_os = "windows"))]
use std::fs::File;
#[cfg(not(target_os = "windows"))]
use crate::{Error, Result};
#[cfg(not(target_os = "windows"))]
#[allow(dead_code)]
pub(crate) fn exclusive_lock_file(file: &File) -> Result<()> {
use std::os::unix::prelude::*;
use libc::{flock, LOCK_EX, LOCK_NB};
let fd = file.as_raw_fd();
let result = unsafe {
flock(fd, LOCK_EX | LOCK_NB)
};
if result == 0 {
Ok(())
} else {
Err(Error::Busy)
}
}
#[cfg(not(target_os = "windows"))]
#[allow(dead_code)]
pub(crate) fn shared_lock_file(file: &File) -> Result<()> {
use std::os::unix::prelude::*;
use libc::{flock, LOCK_SH, LOCK_NB};
let fd = file.as_raw_fd();
let result = unsafe {
flock(fd, LOCK_SH | LOCK_NB)
};
if result == 0 {
Ok(())
} else {
Err(Error::Busy)
}
}
#[cfg(not(target_os = "windows"))]
#[allow(dead_code)]
pub(crate) fn unlock_file(file: &File) -> Result<()> {
use std::os::unix::prelude::*;
use libc::{flock, LOCK_UN, LOCK_NB};
let fd = file.as_raw_fd();
let result = unsafe {
flock(fd, LOCK_UN | LOCK_NB)
};
if result == 0 {
Ok(())
} else {
Err(Error::Busy)
}
}