1+ use core:: ops:: Try ;
12use ecflash:: { Ec , EcFile , EcFlash } ;
23use ectool:: {
34 Firmware ,
@@ -8,12 +9,13 @@ use ectool::{
89} ;
910use std:: {
1011 cell:: Cell ,
12+ ffi:: wstr,
1113 fs:: { find, load} ,
1214 str,
1315} ;
1416use uefi:: status:: { Error , Result } ;
1517
16- use super :: { ECROM , EC2ROM , FIRMWAREDIR , FIRMWARENSH , shell, Component } ;
18+ use super :: { ECROM , EC2ROM , ECTAG , FIRMWAREDIR , FIRMWARENSH , shell, Component } ;
1719
1820pub struct UefiTimeout {
1921 duration : u64 ,
@@ -385,16 +387,31 @@ impl Component for EcComponent {
385387 } ;
386388
387389 if requires_reset {
388- //Create tag file and skip enter when tag file is found
389- let cmd = format ! ( "{} {} ec tag" , FIRMWARENSH , FIRMWAREDIR ) ;
390- match shell ( & cmd) {
391- Ok ( status) => {
392- if status != 0 {
393- println ! ( "EC tag exited with error: {}" , status) ;
390+ match find ( FIRMWAREDIR ) {
391+ Ok ( ( _, firmware_dir) ) => {
392+ //Try to create tag file without running shell
393+ let filename = wstr ( ECTAG ) ;
394+ let mut file = 0 as * mut uefi:: fs:: File ;
395+ match ( firmware_dir. 0 . Open ) (
396+ firmware_dir. 0 ,
397+ & mut file,
398+ filename. as_ptr ( ) ,
399+ uefi:: fs:: FILE_MODE_CREATE | uefi:: fs:: FILE_MODE_READ | uefi:: fs:: FILE_MODE_WRITE ,
400+ 0
401+ ) . into_result ( ) {
402+ Ok ( _) => {
403+ unsafe {
404+ let _ = ( ( * file) . Close ) ( & mut * file) ;
405+ }
406+ println ! ( "EC tag: created successfully" ) ;
407+ } ,
408+ Err ( err) => {
409+ println ! ( "EC tag: failed to create {}: {:?}" , ECTAG , err) ;
410+ }
394411 }
395412 } ,
396413 Err ( err) => {
397- println ! ( "EC tag error : {:?}" , err) ;
414+ println ! ( "EC tag: failed to find {} : {:?}" , FIRMWAREDIR , err) ;
398415 }
399416 }
400417
0 commit comments