aboutsummaryrefslogtreecommitdiff
path: root/src/pws.rs
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2018-06-07 03:21:57 +0200
committerRobin Krahl <robin.krahl@ireas.org>2018-06-07 03:21:57 +0200
commitd66616a4fa71609231688119c40a3a0ec39a17ab (patch)
tree8bf35b826e5d4a1b78902310f6bff3dc0dfecc21 /src/pws.rs
parentf035857d9a9dc14c85e6bdf22cbe72528235657d (diff)
downloadnitrokey-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/pws.rs')
-rw-r--r--src/pws.rs26
1 files changed, 7 insertions, 19 deletions
diff --git a/src/pws.rs b/src/pws.rs
index bbc19aa..17f247e 100644
--- a/src/pws.rs
+++ b/src/pws.rs
@@ -1,8 +1,7 @@
use device::{Device, DeviceWrapper, Pro, Storage};
use libc;
use nitrokey_sys;
-use std::ffi::CString;
-use util::{get_command_result, get_last_error, result_from_string, CommandError};
+use util::{get_command_result, get_cstring, get_last_error, result_from_string, CommandError};
/// The number of slots in a [`PasswordSafe`][].
///
@@ -42,7 +41,7 @@ pub const SLOT_COUNT: u8 = 16;
/// let device = nitrokey::connect()?;
/// let pws = device.get_password_safe("123456")?;
/// use_password_safe(&pws);
-/// device.lock();
+/// device.lock()?;
/// # Ok(())
/// # }
/// ```
@@ -87,7 +86,7 @@ pub trait GetPasswordSafe {
/// match device.get_password_safe("123456") {
/// Ok(pws) => {
/// use_password_safe(&pws);
- /// device.lock();
+ /// device.lock()?;
/// },
/// Err(err) => println!("Could not open the password safe: {:?}", err),
/// };
@@ -106,11 +105,7 @@ fn get_password_safe<'a>(
device: &'a Device,
user_pin: &str,
) -> Result<PasswordSafe<'a>, CommandError> {
- let user_pin_string = CString::new(user_pin);
- if user_pin_string.is_err() {
- return Err(CommandError::InvalidString);
- }
- let user_pin_string = user_pin_string.unwrap();
+ let user_pin_string = get_cstring(user_pin)?;
let result = unsafe {
get_command_result(nitrokey_sys::NK_enable_password_safe(
user_pin_string.as_ptr(),
@@ -287,16 +282,9 @@ impl<'a> PasswordSafe<'a> {
login: &str,
password: &str,
) -> Result<(), CommandError> {
- let name_string = CString::new(name);
- let login_string = CString::new(login);
- let password_string = CString::new(password);
- if name_string.is_err() || login_string.is_err() || password_string.is_err() {
- return Err(CommandError::InvalidString);
- }
-
- let name_string = name_string.unwrap();
- let login_string = login_string.unwrap();
- let password_string = password_string.unwrap();
+ let name_string = get_cstring(name)?;
+ let login_string = get_cstring(login)?;
+ let password_string = get_cstring(password)?;
unsafe {
get_command_result(nitrokey_sys::NK_write_password_safe_slot(
slot,