mirror of
https://github.com/uutils/coreutils.git
synced 2026-06-10 15:48:22 -07:00
uucore: add function which checks hardlink as well as directed symlink
This commit is contained in:
@@ -648,6 +648,36 @@ pub fn are_hardlinks_to_same_file(source: &Path, target: &Path) -> bool {
|
||||
source_metadata.ino() == target_metadata.ino() && source_metadata.dev() == target_metadata.dev()
|
||||
}
|
||||
|
||||
#[cfg(not(unix))]
|
||||
pub fn are_hardlinks_or_one_way_symlink_to_same_file(_source: &Path, _target: &Path) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
/// Checks if either two paths are hard links to the same file or if the source path is a symbolic link which when fully resolved points to target path
|
||||
///
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `source` - A reference to a `Path` representing the source path.
|
||||
/// * `target` - A reference to a `Path` representing the target path.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// * `bool` - Returns `true` if either of above conditions are true, and `false` otherwise.
|
||||
#[cfg(unix)]
|
||||
pub fn are_hardlinks_or_one_way_symlink_to_same_file(source: &Path, target: &Path) -> bool {
|
||||
let source_metadata = match fs::metadata(source) {
|
||||
Ok(metadata) => metadata,
|
||||
Err(_) => return false,
|
||||
};
|
||||
|
||||
let target_metadata = match fs::symlink_metadata(target) {
|
||||
Ok(metadata) => metadata,
|
||||
Err(_) => return false,
|
||||
};
|
||||
|
||||
source_metadata.ino() == target_metadata.ino() && source_metadata.dev() == target_metadata.dev()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
// Note this useful idiom: importing names from outer (for mod tests) scope.
|
||||
|
||||
Reference in New Issue
Block a user