feat(users/Profpatsch/execline): add exec helpers
Most tools end by execing into their argv, so here’s a small rust function which does the boilerplate. Change-Id: I9748955cf53828e02f04d7e8d74fbaf10c1158b5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2453 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
This commit is contained in:
		
							parent
							
								
									ca52b29078
								
							
						
					
					
						commit
						06f4b75a18
					
				
					 1 changed files with 27 additions and 0 deletions
				
			
		
							
								
								
									
										27
									
								
								users/Profpatsch/execline/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								users/Profpatsch/execline/default.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
{ depot, pkgs, lib, ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  exec-helpers = depot.users.Profpatsch.writers.rustSimpleLib {
 | 
			
		||||
    name = "exec-helpers";
 | 
			
		||||
  } ''
 | 
			
		||||
    use std::os::unix::process::CommandExt;
 | 
			
		||||
    use std::ffi::OsStr;
 | 
			
		||||
    use std::os::unix::ffi::OsStrExt;
 | 
			
		||||
    pub fn exec_into_args<'a, I>(prog_name: &str, env_additions: I) -> !
 | 
			
		||||
      where
 | 
			
		||||
        I: IntoIterator<Item = (&'a [u8], &'a [u8])>,
 | 
			
		||||
    {
 | 
			
		||||
        let mut argv = std::env::args_os();
 | 
			
		||||
        let prog = argv.nth(1).expect(&format!("{}: first argument must be an executable", prog_name));
 | 
			
		||||
        let args = argv;
 | 
			
		||||
        let env = env_additions.into_iter().map(|(k,v)| (OsStr::from_bytes(k), OsStr::from_bytes(v)));
 | 
			
		||||
        let err = std::process::Command::new(prog).args(args).envs(env).exec();
 | 
			
		||||
        panic!("{}: exec failed: {:?}", prog_name, err);
 | 
			
		||||
    }
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
in {
 | 
			
		||||
  inherit
 | 
			
		||||
    exec-helpers
 | 
			
		||||
    ;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue