From faaedd25265ff7e685d59b3513358485aacf46ff Mon Sep 17 00:00:00 2001 From: Hadrien G Date: Tue, 25 Sep 2018 21:31:44 +0200 Subject: [PATCH 1/2] Fix pointer tests --- uefi-test-runner/src/proto/console/pointer.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/uefi-test-runner/src/proto/console/pointer.rs b/uefi-test-runner/src/proto/console/pointer.rs index 2d7976016..7a5dc77f2 100644 --- a/uefi-test-runner/src/proto/console/pointer.rs +++ b/uefi-test-runner/src/proto/console/pointer.rs @@ -1,3 +1,4 @@ +use uefi::prelude::*; use uefi::proto::console::pointer::Pointer; use uefi::table::boot::BootServices; @@ -12,11 +13,11 @@ pub fn test(bt: &BootServices) { .reset(false) .expect("Failed to reset pointer device"); - if let Ok(state) = pointer.state() { - info!("Pointer State: {:#?}", state); - } else { - error!("Failed to retrieve pointer state"); - } + match pointer.state() { + Ok(state) => info!("Pointer State: {:#?}", state), + Err(Status::NotReady) => info!("Pointer state has not changed"), + Err(e) => panic!("Failed to retrieve pointer state ({:?})", e), + }; } else { warn!("No pointer device found"); } From 9df1073f05567bcd2e0b2c0d07f5f65029386d4c Mon Sep 17 00:00:00 2001 From: Hadrien G Date: Tue, 25 Sep 2018 21:42:19 +0200 Subject: [PATCH 2/2] Use an Option to prevent future issues --- src/proto/console/pointer/mod.rs | 11 ++++++++--- uefi-test-runner/src/proto/console/pointer.rs | 12 ++++++------ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/proto/console/pointer/mod.rs b/src/proto/console/pointer/mod.rs index fad282844..e999445e5 100644 --- a/src/proto/console/pointer/mod.rs +++ b/src/proto/console/pointer/mod.rs @@ -27,13 +27,18 @@ impl Pointer { /// Retrieves the pointer device's current state. /// + /// Will return None if the state has not changed since the last query. + /// /// # Errors - /// - `NotReady` is returned if the state hasn't changed since the last call. /// - `DeviceError` if there was an issue with the pointer device. - pub fn state(&self) -> Result { + pub fn state(&self) -> Result> { let mut pointer_state = unsafe { mem::uninitialized() }; - (self.get_state)(self, &mut pointer_state).into_with(|| pointer_state) + match (self.get_state)(self, &mut pointer_state) { + Status::Success => Ok(Some(pointer_state)), + Status::NotReady => Ok(None), + error => Err(error) + } } /// Returns a reference to the pointer device information. diff --git a/uefi-test-runner/src/proto/console/pointer.rs b/uefi-test-runner/src/proto/console/pointer.rs index 7a5dc77f2..028a16963 100644 --- a/uefi-test-runner/src/proto/console/pointer.rs +++ b/uefi-test-runner/src/proto/console/pointer.rs @@ -1,4 +1,3 @@ -use uefi::prelude::*; use uefi::proto::console::pointer::Pointer; use uefi::table::boot::BootServices; @@ -13,11 +12,12 @@ pub fn test(bt: &BootServices) { .reset(false) .expect("Failed to reset pointer device"); - match pointer.state() { - Ok(state) => info!("Pointer State: {:#?}", state), - Err(Status::NotReady) => info!("Pointer state has not changed"), - Err(e) => panic!("Failed to retrieve pointer state ({:?})", e), - }; + let state = pointer.state().expect("Failed to retrieve pointer state"); + if let Some(state) = state { + info!("New pointer State: {:#?}", state); + } else { + info!("Pointer state has not changed since the last query"); + } } else { warn!("No pointer device found"); }