Skip to content

Commit 7a5b955

Browse files
committed
uefi: Revising function calls, names, and return types to better match standard convention
1 parent ac9b022 commit 7a5b955

File tree

2 files changed

+30
-41
lines changed

2 files changed

+30
-41
lines changed

uefi-test-runner/src/proto/shell.rs

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,26 @@
33
use uefi::boot::ScopedProtocol;
44
use uefi::proto::shell::Shell;
55
use uefi::{boot, cstr16};
6-
use uefi_raw::Status;
76

8-
/// Test `get_env()`, `get_envs()`, and `set_env()`
7+
/// Test `var()`, `vars()`, and `set_var()`
98
pub fn test_env(shell: &ScopedProtocol<Shell>) {
109
/* Test retrieving list of environment variable names */
11-
let mut cur_env_vec = shell.get_envs();
10+
let mut cur_env_vec = shell.vars();
1211
assert_eq!(cur_env_vec.next().unwrap(), cstr16!("path"),);
1312
// check pre-defined shell variables; see UEFI Shell spec
1413
assert_eq!(cur_env_vec.next().unwrap(), cstr16!("nonesting"),);
15-
let cur_env_vec = shell.get_envs();
14+
let cur_env_vec = shell.vars();
1615
let default_len = cur_env_vec.count();
1716

1817
/* Test setting and getting a specific environment variable */
19-
let cur_env_vec = shell.get_envs();
18+
let cur_env_vec = shell.vars();
2019
let test_var = cstr16!("test_var");
2120
let test_val = cstr16!("test_val");
22-
assert!(shell.get_env(test_var).is_none());
23-
let status = shell.set_env(test_var, test_val, false);
24-
assert_eq!(status, Status::SUCCESS);
21+
assert!(shell.var(test_var).is_none());
22+
let status = shell.set_var(test_var, test_val, false);
23+
assert!(status.is_ok());
2524
let cur_env_str = shell
26-
.get_env(test_var)
25+
.var(test_var)
2726
.expect("Could not get environment variable");
2827
assert_eq!(cur_env_str, test_val);
2928

@@ -34,7 +33,7 @@ pub fn test_env(shell: &ScopedProtocol<Shell>) {
3433
}
3534
}
3635
assert!(!found_var);
37-
let cur_env_vec = shell.get_envs();
36+
let cur_env_vec = shell.vars();
3837
let mut found_var = false;
3938
for env_var in cur_env_vec {
4039
if env_var == test_var {
@@ -43,24 +42,24 @@ pub fn test_env(shell: &ScopedProtocol<Shell>) {
4342
}
4443
assert!(found_var);
4544

46-
let cur_env_vec = shell.get_envs();
45+
let cur_env_vec = shell.vars();
4746
assert_eq!(cur_env_vec.count(), default_len + 1);
4847

4948
/* Test deleting environment variable */
5049
let test_val = cstr16!("");
51-
let status = shell.set_env(test_var, test_val, false);
52-
assert_eq!(status, Status::SUCCESS);
53-
assert!(shell.get_env(test_var).is_none());
50+
let status = shell.set_var(test_var, test_val, false);
51+
assert!(status.is_ok());
52+
assert!(shell.var(test_var).is_none());
5453

55-
let cur_env_vec = shell.get_envs();
54+
let cur_env_vec = shell.vars();
5655
let mut found_var = false;
5756
for env_var in cur_env_vec {
5857
if env_var == test_var {
5958
found_var = true;
6059
}
6160
}
6261
assert!(!found_var);
63-
let cur_env_vec = shell.get_envs();
62+
let cur_env_vec = shell.vars();
6463
assert_eq!(cur_env_vec.count(), default_len);
6564
}
6665

uefi/src/proto/shell/mod.rs

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@
33
//! EFI Shell Protocol v2.2
44
55
use uefi_macros::unsafe_protocol;
6-
use uefi_raw::Status;
76

87
use core::marker::PhantomData;
98
use core::ptr;
109

1110
use uefi_raw::protocol::shell::ShellProtocol;
1211

13-
use crate::{CStr16, Char16};
12+
use crate::{CStr16, Char16, Result, StatusExt};
1413

1514
/// Shell Protocol
1615
#[derive(Debug)]
@@ -32,17 +31,12 @@ impl<'a> Iterator for Vars<'a> {
3231
// We iterate a list of NUL terminated CStr16s.
3332
// The list is terminated with a double NUL.
3433
fn next(&mut self) -> Option<Self::Item> {
35-
let cur_start = self.inner;
36-
let mut cur_len = 0;
37-
unsafe {
38-
if *(cur_start) == Char16::from_u16_unchecked(0) {
39-
return None;
40-
}
41-
while *(cur_start.add(cur_len)) != Char16::from_u16_unchecked(0) {
42-
cur_len += 1;
43-
}
44-
self.inner = self.inner.add(cur_len + 1);
45-
Some(CStr16::from_ptr(cur_start))
34+
let s = unsafe { CStr16::from_ptr(self.inner) };
35+
if s.is_empty() {
36+
None
37+
} else {
38+
self.inner = unsafe { self.inner.add(s.num_chars() + 1) };
39+
Some(s)
4640
}
4741
}
4842
}
@@ -61,8 +55,8 @@ impl Shell {
6155
/// environment variable
6256
/// * `None` - If environment variable does not exist
6357
#[must_use]
64-
pub fn get_env(&self, name: &CStr16) -> Option<&CStr16> {
65-
let name_ptr: *const Char16 = core::ptr::from_ref::<CStr16>(name).cast();
58+
pub fn var(&self, name: &CStr16) -> Option<&CStr16> {
59+
let name_ptr: *const Char16 = name.as_ptr();
6660
let var_val = unsafe { (self.0.get_env)(name_ptr.cast()) };
6761
if var_val.is_null() {
6862
None
@@ -71,13 +65,9 @@ impl Shell {
7165
}
7266
}
7367

74-
/// Gets the list of environment variables
75-
///
76-
/// # Returns
77-
///
78-
/// * `Vec<env_names>` - Vector of environment variable names
68+
/// Gets an iterator over the names of all environment variables
7969
#[must_use]
80-
pub fn get_envs(&self) -> Vars {
70+
pub fn vars(&self) -> Vars<'_> {
8171
let env_ptr = unsafe { (self.0.get_env)(ptr::null()) };
8272
Vars {
8373
inner: env_ptr.cast::<Char16>(),
@@ -97,10 +87,10 @@ impl Shell {
9787
/// # Returns
9888
///
9989
/// * `Status::SUCCESS` - The variable was successfully set
100-
pub fn set_env(&self, name: &CStr16, value: &CStr16, volatile: bool) -> Status {
101-
let name_ptr: *const Char16 = core::ptr::from_ref::<CStr16>(name).cast();
102-
let value_ptr: *const Char16 = core::ptr::from_ref::<CStr16>(value).cast();
103-
unsafe { (self.0.set_env)(name_ptr.cast(), value_ptr.cast(), volatile) }
90+
pub fn set_var(&self, name: &CStr16, value: &CStr16, volatile: bool) -> Result {
91+
let name_ptr: *const Char16 = name.as_ptr();
92+
let value_ptr: *const Char16 = value.as_ptr();
93+
unsafe { (self.0.set_env)(name_ptr.cast(), value_ptr.cast(), volatile) }.to_result()
10494
}
10595
}
10696

0 commit comments

Comments
 (0)