@@ -45,12 +45,7 @@ pub enum Stdio {
4545
4646impl  Command  { 
4747    pub  fn  new ( program :  & OsStr )  -> Command  { 
48-         Command  { 
49-             prog :  program. to_os_string ( ) , 
50-             args :  Vec :: from ( [ program. to_os_string ( ) ] ) , 
51-             stdout :  None , 
52-             stderr :  None , 
53-         } 
48+         Command  {  prog :  program. to_os_string ( ) ,  args :  Vec :: new ( ) ,  stdout :  None ,  stderr :  None  } 
5449    } 
5550
5651    pub  fn  arg ( & mut  self ,  arg :  & OsStr )  { 
@@ -122,6 +117,7 @@ impl Command {
122117    pub  fn  output ( & mut  self )  -> io:: Result < ( ExitStatus ,  Vec < u8 > ,  Vec < u8 > ) >  { 
123118        let  mut  cmd = uefi_command_internal:: Command :: load_image ( & self . prog ) ?; 
124119
120+         /* Setup Stdout */ 
125121        let  stdout:  Option < helpers:: Protocol < uefi_command_internal:: PipeProtocol > >  =
126122            match  self . stdout . take ( )  { 
127123                Some ( s)  => Self :: create_pipe ( s) , 
@@ -131,7 +127,12 @@ impl Command {
131127                ) 
132128                . map ( Some ) , 
133129            } ?; 
130+         match  stdout { 
131+             Some ( stdout)  => cmd. stdout_init ( stdout) , 
132+             None  => cmd. stdout_inherit ( ) , 
133+         } ; 
134134
135+         /* Setup Stderr */ 
135136        let  stderr:  Option < helpers:: Protocol < uefi_command_internal:: PipeProtocol > >  =
136137            match  self . stderr . take ( )  { 
137138                Some ( s)  => Self :: create_pipe ( s) , 
@@ -141,21 +142,15 @@ impl Command {
141142                ) 
142143                . map ( Some ) , 
143144            } ?; 
144- 
145-         match  stdout { 
146-             Some ( stdout)  => cmd. stdout_init ( stdout) , 
147-             None  => cmd. stdout_inherit ( ) , 
148-         } ; 
149145        match  stderr { 
150146            Some ( stderr)  => cmd. stderr_init ( stderr) , 
151147            None  => cmd. stderr_inherit ( ) , 
152148        } ; 
153149
154-         if  self . args . len ( )  > 1  { 
155-             let  args = self . args . iter ( ) . fold ( OsString :: new ( ) ,  |mut  acc,  arg| { 
156-                 if  !acc. is_empty ( )  { 
157-                     acc. push ( " " ) ; 
158-                 } 
150+         /* No reason to set args if only program name is preset */ 
151+         if  !self . args . is_empty ( )  { 
152+             let  args = self . args . iter ( ) . fold ( OsString :: from ( & self . prog ) ,  |mut  acc,  arg| { 
153+                 acc. push ( " " ) ; 
159154                acc. push ( arg) ; 
160155                acc
161156            } ) ; 
@@ -202,7 +197,11 @@ impl From<File> for Stdio {
202197} 
203198
204199impl  fmt:: Debug  for  Command  { 
205-     fn  fmt ( & self ,  _f :  & mut  fmt:: Formatter < ' _ > )  -> fmt:: Result  { 
200+     fn  fmt ( & self ,  f :  & mut  fmt:: Formatter < ' _ > )  -> fmt:: Result  { 
201+         self . prog . fmt ( f) ?; 
202+         for  arg in  & self . args  { 
203+             arg. fmt ( f) ?; 
204+         } 
206205        Ok ( ( ) ) 
207206    } 
208207} 
@@ -303,9 +302,11 @@ pub struct CommandArgs<'a> {
303302
304303impl < ' a >  Iterator  for  CommandArgs < ' a >  { 
305304    type  Item  = & ' a  OsStr ; 
305+ 
306306    fn  next ( & mut  self )  -> Option < & ' a  OsStr >  { 
307307        self . iter . next ( ) . map ( |x| x. as_ref ( ) ) 
308308    } 
309+ 
309310    fn  size_hint ( & self )  -> ( usize ,  Option < usize > )  { 
310311        self . iter . size_hint ( ) 
311312    } 
@@ -315,6 +316,7 @@ impl<'a> ExactSizeIterator for CommandArgs<'a> {
315316    fn  len ( & self )  -> usize  { 
316317        self . iter . len ( ) 
317318    } 
319+ 
318320    fn  is_empty ( & self )  -> bool  { 
319321        self . iter . is_empty ( ) 
320322    } 
0 commit comments