Skip to content
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

Clarify Error::last_os_error can be weird #106964

Merged
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions library/std/src/io/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ pub enum ErrorKind {

// "Unusual" error kinds which do not correspond simply to (sets
// of) OS error codes, should be added just above this comment.
// `Other` and `Uncategorised` should remain at the end:
// `Other` and `Uncategorized` should remain at the end:
//
/// A custom error that does not fall under any other I/O error kind.
///
Expand Down Expand Up @@ -565,6 +565,12 @@ impl Error {
/// other standard library functions may call platform functions that may
/// (or may not) reset the error value even if they succeed.
///
/// If this is used in a case where no error has yet occurred in a program,
/// e.g. right after the beginning of `fn main`,
/// then in principle any possible Error may be returned.
/// The error code may have been set by a previous program (e.g. `execve`)
/// or the OS may have initialized it to an arbitrary, even random, value.
workingjubilee marked this conversation as resolved.
Show resolved Hide resolved
///
/// # Examples
///
/// ```
Expand Down Expand Up @@ -871,6 +877,13 @@ impl Error {

/// Returns the corresponding [`ErrorKind`] for this error.
///
/// In some cases, the ErrorKind variant may not make much sense,
/// either because the situation does not actually involve an error, or
/// because of a new error code the standard library has not been taught.
/// See [`last_os_error`] for more details.
///
/// [`last_os_error`]: Error::last_os_error
///
/// # Examples
///
/// ```
Expand All @@ -881,7 +894,8 @@ impl Error {
/// }
///
/// fn main() {
/// // Will print "Uncategorized".
/// // As no error has occurred, this may print anything!
/// // It likely prints a placeholder for unidentified (non-)errors.
/// print_error(Error::last_os_error());
/// // Will print "AddrInUse".
/// print_error(Error::new(ErrorKind::AddrInUse, "oh no!"));
Expand Down