diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/device/storage.rs | 10 | ||||
| -rw-r--r-- | src/error.rs | 6 | ||||
| -rw-r--r-- | src/util.rs | 11 | 
3 files changed, 16 insertions, 11 deletions
| diff --git a/src/device/storage.rs b/src/device/storage.rs index deb2844..1e2c46d 100644 --- a/src/device/storage.rs +++ b/src/device/storage.rs @@ -678,7 +678,7 @@ impl<'a> Storage<'a> {                  if usage_data.write_level_min > usage_data.write_level_max                      || usage_data.write_level_max > 100                  { -                    Err(Error::UnexpectedError) +                    Err(Error::UnexpectedError("Invalid write levels".to_owned()))                  } else {                      Ok(ops::Range {                          start: usage_data.write_level_min, @@ -708,10 +708,14 @@ impl<'a> Storage<'a> {          match status {              0..=100 => u8::try_from(status)                  .map(OperationStatus::Ongoing) -                .map_err(|_| Error::UnexpectedError), +                .map_err(|_| { +                    Error::UnexpectedError("Cannot create u8 from operation status".to_owned()) +                }),              -1 => Ok(OperationStatus::Idle),              -2 => Err(get_last_error()), -            _ => Err(Error::UnexpectedError), +            _ => Err(Error::UnexpectedError( +                "Invalid operation status".to_owned(), +            )),          }      } diff --git a/src/error.rs b/src/error.rs index f9af594..7bea3f2 100644 --- a/src/error.rs +++ b/src/error.rs @@ -25,7 +25,7 @@ pub enum Error {      /// An error that occurred during random number generation.      RandError(Box<dyn error::Error>),      /// An error that is caused by an unexpected value returned by libnitrokey. -    UnexpectedError, +    UnexpectedError(String),      /// An unknown error returned by libnitrokey.      UnknownError(i64),      /// An error caused by a Nitrokey model that is not supported by this crate. @@ -102,7 +102,7 @@ impl error::Error for Error {              Error::LibraryError(ref err) => Some(err),              Error::PoisonError(ref err) => Some(err),              Error::RandError(ref err) => Some(err.as_ref()), -            Error::UnexpectedError => None, +            Error::UnexpectedError(_) => None,              Error::UnknownError(_) => None,              Error::UnsupportedModelError => None,              Error::Utf8Error(ref err) => Some(err), @@ -119,7 +119,7 @@ impl fmt::Display for Error {              Error::LibraryError(ref err) => write!(f, "Library error: {}", err),              Error::PoisonError(_) => write!(f, "Internal error: poisoned lock"),              Error::RandError(ref err) => write!(f, "RNG error: {}", err), -            Error::UnexpectedError => write!(f, "An unexpected error occurred"), +            Error::UnexpectedError(ref s) => write!(f, "An unexpected error occurred: {}", s),              Error::UnknownError(ref err) => write!(f, "Unknown error: {}", err),              Error::UnsupportedModelError => write!(f, "Unsupported Nitrokey model"),              Error::Utf8Error(ref err) => write!(f, "UTF-8 error: {}", err), diff --git a/src/util.rs b/src/util.rs index 5a56c55..1b52c3d 100644 --- a/src/util.rs +++ b/src/util.rs @@ -39,7 +39,9 @@ pub fn owned_str_from_ptr(ptr: *const c_char) -> Result<String, Error> {  pub fn result_from_string(ptr: *const c_char) -> Result<String, Error> {      if ptr.is_null() { -        return Err(Error::UnexpectedError); +        return Err(Error::UnexpectedError( +            "libnitrokey returned a null pointer".to_owned(), +        ));      }      let s = owned_str_from_ptr(ptr)?;      unsafe { free(ptr as *mut c_void) }; @@ -69,10 +71,9 @@ pub fn get_last_result() -> Result<(), Error> {  }  pub fn get_last_error() -> Error { -    match get_last_result() { -        Ok(()) => Error::UnexpectedError, -        Err(err) => err, -    } +    get_last_result().err().unwrap_or_else(|| { +        Error::UnexpectedError("Expected an error, but command status is zero".to_owned()) +    })  }  pub fn generate_password(length: usize) -> Result<Vec<u8>, Error> { | 
