Commit 9a02cbc5 authored by Daniel Sedlak's avatar Daniel Sedlak Committed by Miguel Ojeda
Browse files

rust: error: modify `from_errno` to use `try_from_errno`

Modify the from_errno function to use try_from_errno to
reduce code duplication while still maintaining all existing
behavior and error handling and also reduces unsafe code.

Link: https://github.com/Rust-for-Linux/linux/issues/1125


Suggested-by: default avatarMiguel Ojeda <ojeda@kernel.org>
Co-developed-by: default avatarGuilherme Augusto Martins da Silva <guilhermev2huehue@gmail.com>
Signed-off-by: default avatarGuilherme Augusto Martins da Silva <guilhermev2huehue@gmail.com>
Signed-off-by: default avatarDaniel Sedlak <daniel@sedlak.dev>
Reviewed-by: default avatarFiona Behrens <me@kloenk.dev>
Link: https://lore.kernel.org/r/20241207112445.55502-1-daniel@sedlak.dev


Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
parent 9b98be76
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -101,19 +101,16 @@ impl Error {
    /// It is a bug to pass an out-of-range `errno`. `EINVAL` would
    /// be returned in such a case.
    pub fn from_errno(errno: crate::ffi::c_int) -> Error {
        if errno < -(bindings::MAX_ERRNO as i32) || errno >= 0 {
        if let Some(error) = Self::try_from_errno(errno) {
            error
        } else {
            // TODO: Make it a `WARN_ONCE` once available.
            crate::pr_warn!(
                "attempted to create `Error` with out of range `errno`: {}",
                errno
            );
            return code::EINVAL;
            code::EINVAL
        }

        // INVARIANT: The check above ensures the type invariant
        // will hold.
        // SAFETY: `errno` is checked above to be in a valid range.
        unsafe { Error::from_errno_unchecked(errno) }
    }

    /// Creates an [`Error`] from a kernel error code.