diff options
author | Robin Krahl <robin.krahl@ireas.org> | 2018-06-07 03:21:57 +0200 |
---|---|---|
committer | Robin Krahl <robin.krahl@ireas.org> | 2018-06-07 03:21:57 +0200 |
commit | d66616a4fa71609231688119c40a3a0ec39a17ab (patch) | |
tree | 8bf35b826e5d4a1b78902310f6bff3dc0dfecc21 /src/auth.rs | |
parent | f035857d9a9dc14c85e6bdf22cbe72528235657d (diff) | |
download | nitrokey-rs-d66616a4fa71609231688119c40a3a0ec39a17ab.tar.gz nitrokey-rs-d66616a4fa71609231688119c40a3a0ec39a17ab.tar.bz2 |
Implement easier CString creation
The new get_cstring method in util returns a Result<CString,
CommandError>, so mast callers can just use the ? operator to unwrap the
result instead of cumbersome unwrapping code.
Diffstat (limited to 'src/auth.rs')
-rw-r--r-- | src/auth.rs | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/src/auth.rs b/src/auth.rs index 62b851f..8460fae 100644 --- a/src/auth.rs +++ b/src/auth.rs @@ -2,10 +2,9 @@ use config::{Config, RawConfig}; use device::{Device, DeviceWrapper, Pro, Storage}; use nitrokey_sys; use otp::{ConfigureOtp, GenerateOtp, OtpMode, OtpSlotData, RawOtpSlotData}; -use std::ffi::CString; use std::ops::Deref; use std::os::raw::c_int; -use util::{generate_password, get_command_result, result_from_string, CommandError}; +use util::{generate_password, get_command_result, get_cstring, result_from_string, CommandError}; static TEMPORARY_PASSWORD_LENGTH: usize = 25; @@ -150,13 +149,11 @@ where Ok(pw) => pw, Err(_) => return Err((device, CommandError::RngError)), }; - let password = CString::new(password); - if password.is_err() { - return Err((device, CommandError::InvalidString)); - } - - let pw = password.unwrap(); - let password_ptr = pw.as_ptr(); + let password = match get_cstring(password) { + Ok(password) => password, + Err(err) => return Err((device, err)), + }; + let password_ptr = password.as_ptr(); let temp_password_ptr = temp_password.as_ptr() as *const i8; return match callback(password_ptr, temp_password_ptr) { 0 => Ok(A::new(device, temp_password)), |