From 3eede6e7e777eb89999ae2bfe55dea3ba5bf6265 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Fri, 14 Oct 2016 21:11:29 -0600 Subject: [PATCH] Divide init into two files --- filesystem/etc/init.rc | 11 ++++++++++ initfs/etc/init.rc | 14 +++---------- programs/init/src/main.rs | 44 ++++++++++++++++++++++++++++++++------- programs/orbutils | 2 +- programs/userutils | 2 +- schemes/orbital | 2 +- 6 files changed, 53 insertions(+), 22 deletions(-) create mode 100644 filesystem/etc/init.rc diff --git a/filesystem/etc/init.rc b/filesystem/etc/init.rc new file mode 100644 index 0000000..36e499e --- /dev/null +++ b/filesystem/etc/init.rc @@ -0,0 +1,11 @@ +initfs:bin/pcid /etc/pcid.toml +vesad T T G +ps2d +ethernetd +arpd +ipd +tcpd +udpd +getty display:1 +getty display:2 +orbital display:3 diff --git a/initfs/etc/init.rc b/initfs/etc/init.rc index 6061532..7d4b1d7 100644 --- a/initfs/etc/init.rc +++ b/initfs/etc/init.rc @@ -1,13 +1,5 @@ initfs:bin/pcid initfs:etc/pcid.toml initfs:bin/redoxfs disk:0 -initfs:bin/pcid file:etc/pcid.toml -file:bin/vesad T T G -file:bin/ps2d -file:bin/ethernetd -file:bin/arpd -file:bin/ipd -file:bin/tcpd -file:bin/udpd -file:bin/getty display:1 -file:bin/getty display:2 -#file:bin/orbital display:3 +cd file: +export PATH file:bin +run /etc/init.rc diff --git a/programs/init/src/main.rs b/programs/init/src/main.rs index bae77fa..09c64f6 100644 --- a/programs/init/src/main.rs +++ b/programs/init/src/main.rs @@ -1,19 +1,26 @@ use std::env; use std::fs::File; -use std::io::{BufRead, BufReader}; +use std::io::{BufRead, BufReader, Result}; use std::process::Command; -pub fn main() { - let file = File::open("initfs:etc/init.rc").expect("failed to open init.rc"); +pub fn run(file: &str) -> Result<()> { + let file = File::open(file)?; let reader = BufReader::new(file); for line_result in reader.lines() { - let line = line_result.expect("failed to read init.rc"); + let line = line_result?; let line = line.trim(); if ! line.is_empty() && ! line.starts_with('#') { let mut args = line.split(' '); if let Some(cmd) = args.next() { match cmd { + "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"); + }, "echo" => { if let Some(arg) = args.next() { print!("{}", arg); @@ -23,12 +30,25 @@ pub fn main() { } 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); + "export" => if let Some(var) = args.next() { + let mut value = String::new(); + if let Some(arg) = args.next() { + value.push_str(&arg); + } + for arg in args { + value.push(' '); + value.push_str(&arg); + } + env::set_var(var, value); + } else { + println!("init: failed to export: no argument"); + }, + "run" => if let Some(new_file) = args.next() { + if let Err(err) = run(&new_file) { + println!("init: failed to run '{}': {}", new_file, err); } } else { - println!("init: failed to cd: no argument"); + println!("init: failed to run: no argument"); }, _ => { let mut command = Command::new(cmd); @@ -48,4 +68,12 @@ pub fn main() { } } } + + Ok(()) +} + +pub fn main() { + if let Err(err) = run("initfs:etc/init.rc") { + println!("init: failed to run initfs:etc/init.rc: {}", err); + } } diff --git a/programs/orbutils b/programs/orbutils index 7e7d2ad..2212c9b 160000 --- a/programs/orbutils +++ b/programs/orbutils @@ -1 +1 @@ -Subproject commit 7e7d2ada724c48b01a69ba72b105392557fa634c +Subproject commit 2212c9b4822c44af90164bffeef29d903e6b39da diff --git a/programs/userutils b/programs/userutils index b556eef..3b7448c 160000 --- a/programs/userutils +++ b/programs/userutils @@ -1 +1 @@ -Subproject commit b556eefe6071700905abef862967a316dc5b65c7 +Subproject commit 3b7448c8fdb15857b813a90b2fba81393ef043be diff --git a/schemes/orbital b/schemes/orbital index c21bd76..b2fa6a5 160000 --- a/schemes/orbital +++ b/schemes/orbital @@ -1 +1 @@ -Subproject commit c21bd7618907c5d146c947e9b38d64fdb7479528 +Subproject commit b2fa6a54d58691be8b6d30235a6668db3d29124a