aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2019-01-16 02:52:58 +0000
committerRobin Krahl <robin.krahl@ireas.org>2019-01-16 20:17:07 +0100
commit3c8092cd937d6f449b1959eab9e7e15549970d85 (patch)
tree611be4c031b01ff8143a677e2954d830146ecde3 /src
parent7c2bb330b125cde7ceb55616b3d8c50a98840c58 (diff)
downloadnitrokey-rs-3c8092cd937d6f449b1959eab9e7e15549970d85.tar.gz
nitrokey-rs-3c8092cd937d6f449b1959eab9e7e15549970d85.tar.bz2
Fix result_from_string for empty return values
An empty string returned from a libnitrokey function can either indicate an error or be a valid return value. Previously, we assumed that it indicates an error. But instead, we should check the last command status and use it to decide whether to return the empty string or an error code. This breaks the unit tests that assume that empty strings cause errors. These will be fixed in the next patches.
Diffstat (limited to 'src')
-rw-r--r--src/util.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/util.rs b/src/util.rs
index 54062a5..567c478 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -83,10 +83,13 @@ pub fn result_from_string(ptr: *const c_char) -> Result<String, CommandError> {
unsafe {
let s = owned_str_from_ptr(ptr);
free(ptr as *mut c_void);
+ // An empty string can both indicate an error or be a valid return value. In this case, we
+ // have to check the last command status to decide what to return.
if s.is_empty() {
- return Err(get_last_error());
+ get_last_result().map(|_| s)
+ } else {
+ Ok(s)
}
- return Ok(s);
}
}