From 6ab16af3f5563c7bc38f92aa9769e57f6218f4fa Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 22 Sep 2016 08:43:22 -0600 Subject: [PATCH] Add login process. Remove debugging. Fix order of arguments --- Cargo.toml | 3 +++ src/main.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 Cargo.toml create mode 100644 src/main.rs diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000000..cd1a1ed8f9 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,3 @@ +[package] +name = "init" +version = "0.1.0" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000000..bae77fa22f --- /dev/null +++ b/src/main.rs @@ -0,0 +1,51 @@ +use std::env; +use std::fs::File; +use std::io::{BufRead, BufReader}; +use std::process::Command; + +pub fn main() { + let file = File::open("initfs:etc/init.rc").expect("failed to open init.rc"); + let reader = BufReader::new(file); + + for line_result in reader.lines() { + let line = line_result.expect("failed to read init.rc"); + let line = line.trim(); + if ! line.is_empty() && ! line.starts_with('#') { + let mut args = line.split(' '); + if let Some(cmd) = args.next() { + match cmd { + "echo" => { + if let Some(arg) = args.next() { + print!("{}", arg); + } + for arg in args { + print!(" {}", arg); + } + print!("\n"); + }, + "cd" => if let Some(dir) = args.next() { + if let Err(err) = env::set_current_dir(dir) { + println!("init: failed to cd to '{}': {}", dir, err); + } + } else { + println!("init: failed to cd: no argument"); + }, + _ => { + let mut command = Command::new(cmd); + for arg in args { + command.arg(arg); + } + + match command.spawn() { + Ok(mut child) => match child.wait() { + Ok(_status) => (), //println!("init: waited for {}: {:?}", line, status.code()), + Err(err) => println!("init: failed to wait for '{}': {}", line, err) + }, + Err(err) => println!("init: failed to execute '{}': {}", line, err) + } + } + } + } + } + } +}