use super::get_path::get_path;
use std::{fs, io};
pub(crate) fn remove_open_dir_impl(dir: fs::File) -> io::Result<()> {
let path = get_path(&dir)?;
// Drop the directory before removing it, since we open directories without
// `FILE_SHARE_DELETE`, and removing it requires accessing via its name
// rather than its handle.
//
// There is a window here in which another process could remove or rename
// a directory with this path after the handle is dropped, however it's
// unlikely to happen by accident, and unlikely to cause major problems.
// It may cause spurious failures, or failures with different error codes,
// but this appears to be unavoidable.
//
// Even if we did have `FILE_SHARE_DELETE` and we kept the handle open
// while doing the `remove_dir, `FILE_SHARE_DELETE` would grant other
// processes the right to remove or rename the directory. So there
// doesn't seem to be a race-free way of removing opened directories.
drop(dir);
fs::remove_dir(path)
}