File tree Expand file tree Collapse file tree 3 files changed +53
-0
lines changed
Expand file tree Collapse file tree 3 files changed +53
-0
lines changed Original file line number Diff line number Diff line change 77- Added ` proto::hii::config::ConfigKeywordHandler ` .
88- Added ` proto::hii::config::HiiConfigAccess ` .
99- Added ` proto::hii::config_str::ConfigurationString ` .
10+ - Added ` proto::hii::database::HiiDatabase ` .
1011
1112## Changed
1213- ** Breaking:** ` boot::stall ` now take ` core::time::Duration ` instead of ` usize ` .
Original file line number Diff line number Diff line change 1+ // SPDX-License-Identifier: MIT OR Apache-2.0
2+
3+ //! HII Database protocol.
4+
5+ use alloc:: vec:: Vec ;
6+ use uefi_macros:: unsafe_protocol;
7+ use uefi_raw:: { Status , protocol:: hii:: database:: HiiDatabaseProtocol } ;
8+
9+ use crate :: StatusExt ;
10+
11+ /// The HII Configuration Access Protocol.
12+ ///
13+ /// # UEFI Spec Description
14+ ///
15+ /// Database manager for HII-related data structures.
16+ #[ derive( Debug ) ]
17+ #[ repr( transparent) ]
18+ #[ unsafe_protocol( HiiDatabaseProtocol :: GUID ) ]
19+ pub struct HiiDatabase ( HiiDatabaseProtocol ) ;
20+
21+ impl HiiDatabase {
22+ /// Export all package lists as raw byte buffer.
23+ #[ must_use]
24+ pub fn export_all_raw ( & self ) -> crate :: Result < Vec < u8 > > {
25+ // call the function with a buffer_size of 0 first, so it will fail with
26+ // BUFFER_TOO_SMALL to tell us what size is required.
27+ let mut buffer_size = 0 ;
28+ unsafe {
29+ let result = ( self . 0 . export_package_lists ) (
30+ & self . 0 ,
31+ core:: ptr:: null_mut ( ) ,
32+ & mut buffer_size,
33+ core:: ptr:: null_mut ( ) ,
34+ ) ;
35+ assert_eq ! ( result, Status :: BUFFER_TOO_SMALL ) ;
36+ }
37+
38+ // allocate buffer with the requested size and call the method again
39+ let mut buffer = Vec :: with_capacity ( buffer_size) ;
40+ buffer. resize ( buffer_size, 0u8 ) ;
41+ unsafe {
42+ ( self . 0 . export_package_lists ) (
43+ & self . 0 ,
44+ core:: ptr:: null_mut ( ) ,
45+ & mut buffer_size,
46+ buffer. as_mut_ptr ( ) . cast ( ) ,
47+ )
48+ . to_result_with_val ( || buffer)
49+ }
50+ }
51+ }
Original file line number Diff line number Diff line change 55pub mod config;
66#[ cfg( feature = "alloc" ) ]
77pub mod config_str;
8+ pub mod database;
You can’t perform that action at this time.
0 commit comments