2
2
3
3
//! EFI Shell Protocol v2.2
4
4
5
- use uefi_macros :: unsafe_protocol;
6
-
5
+ use crate :: proto :: unsafe_protocol;
6
+ use crate :: { CStr16 , Char16 , Error , Result , Status , StatusExt } ;
7
7
use core:: ptr;
8
-
9
8
use uefi_raw:: protocol:: shell:: ShellProtocol ;
10
9
11
- use crate :: { CStr16 , Char16 , Result , StatusExt } ;
12
-
13
10
/// Shell Protocol
14
11
#[ derive( Debug ) ]
15
12
#[ repr( transparent) ]
16
13
#[ unsafe_protocol( ShellProtocol :: GUID ) ]
17
14
pub struct Shell ( ShellProtocol ) ;
15
+
18
16
impl Shell {
19
- /// Returns the current directory on the specified device
17
+ /// Returns the current directory on the specified device.
20
18
///
21
19
/// # Arguments
22
20
///
@@ -27,32 +25,27 @@ impl Shell {
27
25
///
28
26
/// * `Some(cwd)` - CStr16 containing the current working directory
29
27
/// * `None` - Could not retrieve current directory
30
- #[ must_use]
31
- pub fn current_dir ( & self , file_system_mapping : Option < & CStr16 > ) -> Option < & CStr16 > {
28
+ pub fn current_dir ( & self , file_system_mapping : Option < & CStr16 > ) -> Result < & CStr16 > {
32
29
let mapping_ptr: * const Char16 = file_system_mapping. map_or ( ptr:: null ( ) , CStr16 :: as_ptr) ;
33
30
let cur_dir = unsafe { ( self . 0 . get_cur_dir ) ( mapping_ptr. cast ( ) ) } ;
34
31
if cur_dir. is_null ( ) {
35
- None
32
+ Err ( Error :: new ( Status :: NOT_FOUND , ( ) ) )
36
33
} else {
37
- unsafe { Some ( CStr16 :: from_ptr ( cur_dir. cast ( ) ) ) }
34
+ unsafe { Ok ( CStr16 :: from_ptr ( cur_dir. cast ( ) ) ) }
38
35
}
39
36
}
40
37
41
38
/// Changes the current directory on the specified device
42
39
///
43
40
/// # Arguments
44
41
///
45
- /// * `file_system` - Pointer to the file system's mapped name.
46
- /// * `directory` - Points to the directory on the device specified by
42
+ /// * `file_system` - File system's mapped name.
43
+ /// * `directory` - Directory on the device specified by
47
44
/// `file_system`.
48
45
///
49
- /// # Returns
50
- ///
51
- /// * `Status::SUCCESS` - The directory was successfully set
52
- ///
53
46
/// # Errors
54
47
///
55
- /// * `Status::EFI_NOT_FOUND` - The directory does not exist
48
+ /// * [ `Status::NOT_FOUND`] - The directory does not exist
56
49
pub fn set_current_dir (
57
50
& self ,
58
51
file_system : Option < & CStr16 > ,
0 commit comments