-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
More ErrorKinds for common errnos #79965
Conversation
(rust-highfive has picked a reviewer for you, use r? to override) |
@rustbot modify labels +T-libs +A-io |
r? @m-ou-se Probably needs a T-libs decision, maybe discussion. |
A similar change to Window's |
We've discussed this PR in the library team meeting a few days ago, and we generally felt positive about this change. We discussed two concerns:
|
2. It might be too Unix-specific. We'd like to see how this works
out for the other platforms (especially Windows). Some of these
might have a name or description that is too specific for Unix
and doesn't fit the equivalent Windows error. [...] We'd like
to see an implementation for Windows as well, to make sure this
won't cause any problems there later.
Thanks for looking at this. That concern makes sense to me.
However, I know very little about Windows and am certainly not able to
do this. Is there some way I could request help from a Rustacean
who is an expert in the Windows APIs, to do the Windows part of this ?
Taking one of the sentences out from your comment:
Or it might be the case that two related new ErrorKinds are
represented as the same error code on Windows, which would make
it tricky to map them properly.
It seems to me that it would be best to have distinct `ErrorKind`
values whenever an important platform makes a distinction between two
of its own error numbers. The downside of that is that portable code
might have to check for two errors in some circumstances, but with the
alternative approach of squashing two errors into one, code that knows
more about what's going on, and is doing something a bit subtle, would
have to resort to a non-portable API to be correct.
But the converse concern, which I quoted earlier, is definitely valid.
And it certianly does make sense to consider the names and
descriptions in the light of Windows.
1. This might break code matching specifically on ErrorKind::Other. However,
as the documentation already mentions this, this is acceptable.
Right.
Thanks,
Ian.
…--
Ian Jackson <ijackson@chiark.greenend.org.uk> These opinions are my own.
Pronouns: they/he. If I emailed you from @fyvzl.net or @evade.org.uk,
that is a private address which bypasses my fierce spamfilter.
|
You could try asking on Zulip (in #t-libs or #t-compiler/windows) first. If that doesn't work, we can ping a few Windows experts on GitHub here.
Yes, maybe. But that's easier to see once we have some concrete error for which this is the case. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not a master of Windows IO, but I took some time to go through and link the system error codes that look like they match the new error types in this PR. If desired, I could split this information into some other location for easier reading.
@CraftSpider Thank you for that! I have replied to a couple of your comments where I think things are not 100% settled, but I think I should be able to make a plausible Windows implementation out of your suggestions. It will still want a review by someone with Windows expertise. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
(After we've decided on the set of Windows error value numbers needed, I'll fish them out of the docs links @CraftSpider helpfully provided and add them to Windows's |
Thanks everone who helped work on this! @ChrisDenton, you mentioned some Windows error codes which might usefully have |
Also, @zackw you had a list in #79965 (comment) which would be worth revisiting now, if you felt like it. FYI I don't expect to have time to pick that up soon... |
This appears to have broken our CI on beta builds now (which assert errors match expected ones after filesystem operations), though I guess that was expected? |
Breakage should only happen if you're matching against ErrorKind::Other, which is discouraged |
Indeed, it was an assertion checking exactly that.
Looks like that was added pretty recently (middle of last year). The code in our tests appears to predate that warning pretty substantially. It seems strange that downstream projects would break after a pretty recent warning, or is this intended to land in a future edition and not current ones? |
It was implicit before. The enum docs have been saying this for 7 years:
And
So logically if the list is expanded then new items may cover things that were previously "not part of this list", i.e. |
Hmm, to some extent I suppose that makes sense. It still seems incredibly strange that this breakage is "expected" given the rustc commitment of running, in-the-wild code not suddenly breaking due to rustc/libstd changes, especially when there is no compile warning anywhere to indicate this. There's a much more important related issue here, though - I don't even know how I'd address the issue here even if I wanted to. We are some code that checks the error, which seems like a reasonable thing to want. If we want to support new rustc, it seems the only possible way to do so is to never check the error, because otherwise we'd end up bumping the MSRV to get the new variants to check against? |
When checking IO errors you have several options: match io_thing() {
Ok(_) => println!("success"),
Err(error) if error.kind() == ErrorKind::NotFound =>
println!("someone deleted a file? incorrect path? ask the user to check if he passed the right one"),
#[cfg(unix)]
Err(error) if error.raw_os_error() == Some(libc::EOPNOTSUPP) =>
println!("some obscure problem with network filesystems? tell user to not use NFS"),
Err(_) => println!("general error of unknown type, we don't know how to handle this!")
} Matching against specific |
That doesn't address the issue at all. Lets say we have a test (which we do) which wants to check that the error was due to trying to access a directory as a file. We could manually look up libc errors (yuck, platform specific!), or we could match the new error type (bump MSRV to beta), or we could check Sure, its obviously not ideal, but the docs were not super explicit about this being invalid code (they're now a bit clearer), and more importantly rustc did nothing to warn us that what we wrote wasn't just not-ideal (it was a test, after all), but that it was in fact invalid code that exhibits undefined behavior (in the could-break sense, not the C could-eat-your-cat sense). This feels not just unergonomic but a borderline violation of the rustc stability guarantees. I have to admit I'm incredibly dissapointed the response to this is "who cares" not "alright, lets make sure there's a rustc warning for a few releases then we can revisit" or some other reasonably cautious approach to addressing undefined behavior in rust stdlib. |
Well, what you're really checking for is "not any of the currently known variants" on a match test_error() {
ErrorKind::Foo | ErrorKind::Bar | ErrorKind::Baz | .... => panic!("these are the ones we know and it shouldn't be any of them"),
_ => return Ok(())
}
I'm not sure if this is possible. Error is a user-constructable type, so there are cases where you know that an error really should have that value. So linting against that kind of use may lead to too many false positives. Perhaps the documentation could be improved further. Anyway, since you consider this a bigger issue than I personally do (I'm not speaking for all of rust!) I think it would make sense to open an issue to bring this to broader attention rather than discussing this in an already landed PR. |
@TheBlueMatt I think that ^ something like that is precisely what you need to be doing. Because, what you are trying to express is "not one of the Short of some madness involving version numbers, I think your best option is to replace your matches against That function can't live in stdlib for the same reason as matching against
@TheBlueMatt I think ^ that is a good suggestion if you want to pursue this. In any case thanks for the feedback and see my other reply #86442 (comment) |
On Jul 29, 2021, at 17:09, Ian Jackson ***@***.***> wrote:
Anyway, since you consider this a bigger issue than I personally do (I'm not speaking for all of rust!) I think it would make sense to open an issue to bring this to broader attention rather than discussing this in an already landed PR.
@TheBlueMatt I think ^ that is a good suggestion if you want to pursue this. In any case thanks for the feedback and see my other reply #86442 (comment
Thanks for the feedback. In my specific case it’s probably not even worth fighting with things, we can just remove the test and move on. I figured I’d flag it largely because I’d have assumed this clearly fits the rustc stability guarantee, though obviously I’m aware there are tradeoffs to be had here. I’ll continue on the other thread with the broader issue since for our specific test this doesn’t matter really.
|
@XAMPPRocky Was this missed for relnotes? |
The new variants still have |
Add more errno constants as requested by rustc since commit 1ec9454403e9bb0361d0725524c4bd27030474cc (for a discussion of the change, see rust-lang/rust#79965). The constant values and descriptions were taken from include/uapi/asm-generic/errno.h in the Linux kernel, since "uClibc will be compiled to match the interfaces available in the provided version of the Linux kernel headers". While the fork of uClibc in L4Re nominally has its own errno constants, they appear to be based on the Linux header file and thus are the same.
Add more errno constants as requested by rustc since commit 1ec9454403e9bb0361d0725524c4bd27030474cc (for a discussion of the change, see rust-lang/rust#79965). The constant values and descriptions were taken from include/uapi/asm-generic/errno.h in the Linux kernel, since "uClibc will be compiled to match the interfaces available in the provided version of the Linux kernel headers". While the fork of uClibc in L4Re nominally has its own errno constants, they appear to be based on the Linux header file and thus are the same.
add more errno constants to uclibc Add more errno constants as requested by rustc since commit 1ec9454403e9bb0361d0725524c4bd27030474cc (for a discussion of the change, see rust-lang/rust#79965). The constant values and descriptions were taken from include/uapi/asm-generic/errno.h in the Linux kernel, since "uClibc will be compiled to match the interfaces available in the provided version of the Linux kernel headers". While the fork of uClibc in L4Re nominally has its own errno constants, they appear to be based on the Linux header file and thus are the same.
Add more errno constants as requested by rustc since commit 1ec9454403e9bb0361d0725524c4bd27030474cc (for a discussion of the change, see rust-lang/rust#79965). The constant values and descriptions were taken from include/uapi/asm-generic/errno.h in the Linux kernel, since "uClibc will be compiled to match the interfaces available in the provided version of the Linux kernel headers". While the fork of uClibc in L4Re nominally has its own errno constants, they appear to be based on the Linux header file and thus are the same.
Pkgsrc changes: * Bump bootstrap kit version to 1.55.0. * Adjust patches as needed, some no longer apply (so removed) * Update checksum adjustments. * Avoid rust-llvm on SunOS * Optionally build docs * Remove reference to closed/old PR#54621 Upstream changes: Version 1.56.1 (2021-11-01) =========================== - New lints to detect the presence of bidirectional-override Unicode codepoints in the compiled source code ([CVE-2021-42574]) [CVE-2021-42574]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-42574 Version 1.56.0 (2021-10-21) ======================== Language -------- - [The 2021 Edition is now stable.][rust#88100] See [the edition guide][rust-2021-edition-guide] for more details. - [The pattern in `binding @ pattern` can now also introduce new bindings.] [rust#85305] - [Union field access is permitted in `const fn`.][rust#85769] [rust-2021-edition-guide]: https://doc.rust-lang.org/nightly/edition-guide/rust-2021/index.html Compiler -------- - [Upgrade to LLVM 13.][rust#87570] - [Support memory, address, and thread sanitizers on aarch64-unknown-freebsd.] [rust#88023] - [Allow specifying a deployment target version for all iOS targets][rust#87699] - [Warnings can be forced on with `--force-warn`.][rust#87472] This feature is primarily intended for usage by `cargo fix`, rather than end users. - [Promote `aarch64-apple-ios-sim` to Tier 2\*.][rust#87760] - [Add `powerpc-unknown-freebsd` at Tier 3\*.][rust#87370] - [Add `riscv32imc-esp-espidf` at Tier 3\*.][rust#87666] \* Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Allow writing of incomplete UTF-8 sequences via stdout/stderr on Windows.] [rust#83342] The Windows console still requires valid Unicode, but this change allows splitting a UTF-8 character across multiple write calls. This allows, for instance, programs that just read and write data buffers (e.g. copying a file to stdout) without regard for Unicode or character boundaries. - [Prefer `AtomicU{64,128}` over Mutex for Instant backsliding protection.] [rust#83093] For this use case, atomics scale much better under contention. - [Implement `Extend<(A, B)>` for `(Extend<A>, Extend<B>)`][rust#85835] - [impl Default, Copy, Clone for std::io::Sink and std::io::Empty][rust#86744] - [`impl From<[(K, V); N]>` for all collections.][rust#84111] - [Remove `P: Unpin` bound on impl Future for Pin.][rust#81363] - [Treat invalid environment variable names as non-existent.][rust#86183] Previously, the environment functions would panic if given a variable name with an internal null character or equal sign (`=`). Now, these functions will just treat such names as non-existent variables, since the OS cannot represent the existence of a variable with such a name. Stabilised APIs --------------- - [`std::os::unix::fs::chroot`] - [`UnsafeCell::raw_get`] - [`BufWriter::into_parts`] - [`core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}`] These APIs were previously stable in `std`, but are now also available in `core`. - [`Vec::shrink_to`] - [`String::shrink_to`] - [`OsString::shrink_to`] - [`PathBuf::shrink_to`] - [`BinaryHeap::shrink_to`] - [`VecDeque::shrink_to`] - [`HashMap::shrink_to`] - [`HashSet::shrink_to`] These APIs are now usable in const contexts: - [`std::mem::transmute`] - [`[T]::first`][`slice::first`] - [`[T]::split_first`][`slice::split_first`] - [`[T]::last`][`slice::last`] - [`[T]::split_last`][`slice::split_last`] Cargo ----- - [Cargo supports specifying a minimum supported Rust version in Cargo.toml.] [`rust-version`] This has no effect at present on dependency version selection. We encourage crates to specify their minimum supported Rust version, and we encourage CI systems that support Rust code to include a crate's specified minimum version in the text matrix for that crate by default. Compatibility notes ------------------- - [Update to new argument parsing rules on Windows.][rust#87580] This adjusts Rust's standard library to match the behavior of the standard libraries for C/C++. The rules have changed slightly over time, and this PR brings us to the latest set of rules (changed in 2008). - [Disallow the aapcs calling convention on aarch64][rust#88399] This was already not supported by LLVM; this change surfaces this lack of support with a better error message. - [Make `SEMICOLON_IN_EXPRESSIONS_FROM_MACROS` warn by default][rust#87385] - [Warn when an escaped newline skips multiple lines.][rust#87671] - [Calls to `libc::getpid` / `std::process::id` from `Command::pre_exec` may return different values on glibc <= 2.24.][rust#81825] Rust now invokes the `clone3` system call directly, when available, to use new functionality available via that system call. Older versions of glibc cache the result of `getpid`, and only update that cache when calling glibc's clone/fork functions, so a direct system call bypasses that cache update. glibc 2.25 and newer no longer cache `getpid` for exactly this reason. Internal changes ---------------- These changes provide no direct user facing benefits, but represent significant improvements to the internals and overall performance of rustc and related tools. - [LLVM is compiled with PGO in published x86_64-unknown-linux-gnu artifacts.] [rust#88069] This improves the performance of most Rust builds. - [Unify representation of macros in internal data structures.][rust#88019] This change fixes a host of bugs with the handling of macros by the compiler, as well as rustdoc. [`std::os::unix::fs::chroot`]: https://doc.rust-lang.org/stable/std/os/unix/fs/fn.chroot.html [`Iterator::intersperse`]: https://doc.rust-lang.org/stable/std/iter/trait.Iterator.html#method.intersperse [`Iterator::intersperse_with`]: https://doc.rust-lang.org/stable/std/iter/trait.Iterator.html#method.intersperse [`UnsafeCell::raw_get`]: https://doc.rust-lang.org/stable/std/cell/struct.UnsafeCell.html#method.raw_get [`BufWriter::into_parts`]: https://doc.rust-lang.org/stable/std/io/struct.BufWriter.html#method.into_parts [`core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}`]: rust-lang/rust#84662 [`Vec::shrink_to`]: https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.shrink_to [`String::shrink_to`]: https://doc.rust-lang.org/stable/std/string/struct.String.html#method.shrink_to [`OsString::shrink_to`]: https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.shrink_to [`PathBuf::shrink_to`]: https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.shrink_to [`BinaryHeap::shrink_to`]: https://doc.rust-lang.org/stable/std/collections/struct.BinaryHeap.html#method.shrink_to [`VecDeque::shrink_to`]: https://doc.rust-lang.org/stable/std/collections/struct.VecDeque.html#method.shrink_to [`HashMap::shrink_to`]: https://doc.rust-lang.org/stable/std/collections/hash_map/struct.HashMap.html#method.shrink_to [`HashSet::shrink_to`]: https://doc.rust-lang.org/stable/std/collections/hash_set/struct.HashSet.html#method.shrink_to [`std::mem::transmute`]: https://doc.rust-lang.org/stable/std/mem/fn.transmute.html [`slice::first`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.first [`slice::split_first`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_first [`slice::last`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.last [`slice::split_last`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_last [`rust-version`]: https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-rust-version-field [rust#87671]: rust-lang/rust#87671 [rust#86183]: rust-lang/rust#86183 [rust#87385]: rust-lang/rust#87385 [rust#88100]: rust-lang/rust#88100 [rust#86860]: rust-lang/rust#86860 [rust#84039]: rust-lang/rust#84039 [rust#86492]: rust-lang/rust#86492 [rust#88363]: rust-lang/rust#88363 [rust#85305]: rust-lang/rust#85305 [rust#87832]: rust-lang/rust#87832 [rust#88069]: rust-lang/rust#88069 [rust#87472]: rust-lang/rust#87472 [rust#87699]: rust-lang/rust#87699 [rust#87570]: rust-lang/rust#87570 [rust#88023]: rust-lang/rust#88023 [rust#87760]: rust-lang/rust#87760 [rust#87370]: rust-lang/rust#87370 [rust#87580]: rust-lang/rust#87580 [rust#83342]: rust-lang/rust#83342 [rust#83093]: rust-lang/rust#83093 [rust#88177]: rust-lang/rust#88177 [rust#88548]: rust-lang/rust#88548 [rust#88551]: rust-lang/rust#88551 [rust#88299]: rust-lang/rust#88299 [rust#88220]: rust-lang/rust#88220 [rust#85835]: rust-lang/rust#85835 [rust#86879]: rust-lang/rust#86879 [rust#86744]: rust-lang/rust#86744 [rust#84662]: rust-lang/rust#84662 [rust#86593]: rust-lang/rust#86593 [rust#81050]: rust-lang/rust#81050 [rust#81363]: rust-lang/rust#81363 [rust#84111]: rust-lang/rust#84111 [rust#85769]: rust-lang/rust#85769 (comment) [rust#88490]: rust-lang/rust#88490 [rust#88269]: rust-lang/rust#88269 [rust#84176]: rust-lang/rust#84176 [rust#88399]: rust-lang/rust#88399 [rust#88227]: rust-lang/rust#88227 [rust#88200]: rust-lang/rust#88200 [rust#82776]: rust-lang/rust#82776 [rust#88077]: rust-lang/rust#88077 [rust#87728]: rust-lang/rust#87728 [rust#87050]: rust-lang/rust#87050 [rust#87619]: rust-lang/rust#87619 [rust#81825]: rust-lang/rust#81825 (comment) [rust#88019]: rust-lang/rust#88019 [rust#87666]: rust-lang/rust#87666 Version 1.55.0 (2021-09-09) ============================ Language -------- - [You can now write open "from" range patterns (`X..`), which will start at `X` and will end at the maximum value of the integer.][83918] - [You can now explicitly import the prelude of different editions through `std::prelude` (e.g. `use std::prelude::rust_2021::*;`).][86294] Compiler -------- - [Added tier 3\* support for `powerpc64le-unknown-freebsd`.][83572] \* Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Updated std's float parsing to use the Eisel-Lemire algorithm.][86761] These improvements should in general provide faster string parsing of floats, no longer reject certain valid floating point values, and reduce the produced code size for non-stripped artifacts. - [`string::Drain` now implements `AsRef<str>` and `AsRef<[u8]>`.][86858] Stabilised APIs --------------- - [`Bound::cloned`] - [`Drain::as_str`] - [`IntoInnerError::into_error`] - [`IntoInnerError::into_parts`] - [`MaybeUninit::assume_init_mut`] - [`MaybeUninit::assume_init_ref`] - [`MaybeUninit::write`] - [`array::map`] - [`ops::ControlFlow`] - [`x86::_bittest`] - [`x86::_bittestandcomplement`] - [`x86::_bittestandreset`] - [`x86::_bittestandset`] - [`x86_64::_bittest64`] - [`x86_64::_bittestandcomplement64`] - [`x86_64::_bittestandreset64`] - [`x86_64::_bittestandset64`] The following previously stable functions are now `const`. - [`str::from_utf8_unchecked`] Cargo ----- - [Cargo will now deduplicate compiler diagnostics to the terminal when invoking rustc in parallel such as when using `cargo test`.][cargo/9675] - [The package definition in `cargo metadata` now includes the `"default_run"` field from the manifest.][cargo/9550] - [Added `cargo d` as an alias for `cargo doc`.][cargo/9680] - [Added `{lib}` as formatting option for `cargo tree` to print the `"lib_name"` of packages.][cargo/9663] Rustdoc ------- - [Added "Go to item on exact match" search option.][85876] - [The "Implementors" section on traits no longer shows redundant method definitions.][85970] - [Trait implementations are toggled open by default.][86260] This should make the implementations more searchable by tools like `CTRL+F` in your browser. - [Intra-doc links should now correctly resolve associated items (e.g. methods) through type aliases.][86334] - [Traits which are marked with `#[doc(hidden)]` will no longer appear in the "Trait Implementations" section.][86513] Compatibility Notes ------------------- - [std functions that return an `io::Error` will no longer use the `ErrorKind::Other` variant.][85746] This is to better reflect that these kinds of errors could be categorised [into newer more specific `ErrorKind` variants][79965], and that they do not represent a user error. - [Using environment variable names with `process::Command` on Windows now behaves as expected.][85270] Previously using envionment variables with `Command` would cause them to be ASCII-uppercased. - [Rustdoc will now warn on using rustdoc lints that aren't prefixed with `rustdoc::`][86849] [86849]: rust-lang/rust#86849 [86513]: rust-lang/rust#86513 [86334]: rust-lang/rust#86334 [86260]: rust-lang/rust#86260 [85970]: rust-lang/rust#85970 [85876]: rust-lang/rust#85876 [83572]: rust-lang/rust#83572 [86294]: rust-lang/rust#86294 [86858]: rust-lang/rust#86858 [86761]: rust-lang/rust#86761 [85769]: rust-lang/rust#85769 [85746]: rust-lang/rust#85746 [85305]: rust-lang/rust#85305 [85270]: rust-lang/rust#85270 [84111]: rust-lang/rust#84111 [83918]: rust-lang/rust#83918 [79965]: rust-lang/rust#79965 [87370]: rust-lang/rust#87370 [87298]: rust-lang/rust#87298 [cargo/9663]: rust-lang/cargo#9663 [cargo/9675]: rust-lang/cargo#9675 [cargo/9550]: rust-lang/cargo#9550 [cargo/9680]: rust-lang/cargo#9680 [cargo/9663]: rust-lang/cargo#9663 [`array::map`]: https://doc.rust-lang.org/stable/std/primitive.array.html#method.map [`Bound::cloned`]: https://doc.rust-lang.org/stable/std/ops/enum.Bound.html#method.cloned [`Drain::as_str`]: https://doc.rust-lang.org/stable/std/string/struct.Drain.html#method.as_str [`IntoInnerError::into_error`]: https://doc.rust-lang.org/stable/std/io/struct.IntoInnerError.html#method.into_error [`IntoInnerError::into_parts`]: https://doc.rust-lang.org/stable/std/io/struct.IntoInnerError.html#method.into_parts [`MaybeUninit::assume_init_mut`]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_mut [`MaybeUninit::assume_init_ref`]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_ref [`MaybeUninit::write`]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.write [`Seek::rewind`]: https://doc.rust-lang.org/stable/std/io/trait.Seek.html#method.rewind [`ops::ControlFlow`]: https://doc.rust-lang.org/stable/std/ops/enum.ControlFlow.html [`str::from_utf8_unchecked`]: https://doc.rust-lang.org/stable/std/str/fn.from_utf8_unchecked.html [`x86::_bittest`]: https://doc.rust-lang.org/stable/core/arch/x86/fn._bittest.html [`x86::_bittestandcomplement`]: https://doc.rust-lang.org/stable/core/arch/x86/fn._bittestandcomplement.html [`x86::_bittestandreset`]: https://doc.rust-lang.org/stable/core/arch/x86/fn._bittestandreset.html [`x86::_bittestandset`]: https://doc.rust-lang.org/stable/core/arch/x86/fn._bittestandset.html [`x86_64::_bittest64`]: https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bittest64.html [`x86_64::_bittestandcomplement64`]: https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bittestandcomplement64.html [`x86_64::_bittestandreset64`]: https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bittestandreset64.html [`x86_64::_bittestandset64`]: https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bittestandset64.html
/// The limit might be from the underlying filesystem or API, or an administratively imposed | ||
/// resource limit. | ||
#[unstable(feature = "io_error_more", issue = "86442")] | ||
FilenameTooLong, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
std uses file_name
in functions, rather than filename
. It'd be odd to break correspondence between snake_case and CamelCase, so I think this should be FileNameTooLong
to match. Same goes for InvalidFileName
.
From the commit message of the main commit here (as revised):