Make sure CreateDirectoryW works for path lengths > 247
This commit is contained in:
@@ -1411,3 +1411,32 @@ fn symlink_hard_link() {
|
||||
// "hard_link" should still appear as a symlink.
|
||||
assert!(check!(fs::symlink_metadata(tmpdir.join("hard_link"))).file_type().is_symlink());
|
||||
}
|
||||
|
||||
/// Ensure `fs::create_dir` works on Windows with longer paths.
|
||||
#[test]
|
||||
#[cfg(windows)]
|
||||
fn create_dir_long_paths() {
|
||||
use crate::{ffi::OsStr, iter, os::windows::ffi::OsStrExt};
|
||||
const PATH_LEN: usize = 247;
|
||||
|
||||
let tmpdir = tmpdir();
|
||||
let mut path = tmpdir.path().to_path_buf();
|
||||
path.push("a");
|
||||
let mut path = path.into_os_string();
|
||||
|
||||
let utf16_len = path.encode_wide().count();
|
||||
if utf16_len >= PATH_LEN {
|
||||
// Skip the test in the unlikely event the local user has a long temp directory path.
|
||||
// This should not affect CI.
|
||||
return;
|
||||
}
|
||||
// Increase the length of the path.
|
||||
path.extend(iter::repeat(OsStr::new("a")).take(PATH_LEN - utf16_len));
|
||||
|
||||
// This should succeed.
|
||||
fs::create_dir(&path).unwrap();
|
||||
|
||||
// This will fail if the path isn't converted to verbatim.
|
||||
path.push("a");
|
||||
fs::create_dir(&path).unwrap();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user