Closed
Description
I tried this code:
fn main() {
let path = std::path::Path::new("");
if let Err(err) = path.canonicalize() {
println!("{}", err);
// println!("{:?}", err.kind());
}
}
I expected to see this happen: canonicalize()
returns os error 3 (ERROR_PATH_NOT_FOUND
)
Instead, this happened: it returns os error 123 (ERROR_INVALID_NAME
)
This is problematic as std::io::ErrorKind
doesn't become NotFound
but Uncategorized
, which isn't useful for most users. Other platforms like Linux return NotFound
so the former behavior should be correct here.
Meta
rustc --version --verbose
:
rustc 1.58.0-nightly (e249ce6b2 2021-10-30)
binary: rustc
commit-hash: e249ce6b2345587d6e11052779c86adbad626dff
commit-date: 2021-10-30
host: x86_64-pc-windows-msvc
release: 1.58.0-nightly
LLVM version: 13.0.0
The issue doesn't happen on rustc 1.58.0-nightly (e99963c55 2021-10-29)
, I think the regression was introduced by #89174.
Activity
ChrisDenton commentedon Nov 16, 2021
Thanks for finding and fixing that! I do think that
ERROR_INVALID_NAME
should be mapped to anErrorKind
. It means "The filename, directory name, or volume label syntax is incorrect". So a syntax error basically.But I don't think that should block your current PR.
JohnTitor commentedon Nov 16, 2021
Sounds good, maybe it should be
InvalidInput
? (EDIT: Opened #90955)FilenameTooLong
toInvalidFilename
and also use it for Windows'ERROR_INVALID_NAME
#90955nbdd0121 commentedon Nov 17, 2021
@m-ou-se is it intentional that E-medium is added instead of P-medium?
m-ou-se commentedon Nov 17, 2021
Oh oops.
9 remaining items