Divide init into two files

This commit is contained in:
Jeremy Soller 2016-10-14 21:11:29 -06:00
parent 77810d6713
commit 3eede6e7e7
6 changed files with 53 additions and 22 deletions

11
filesystem/etc/init.rc Normal file
View file

@ -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

View file

@ -1,13 +1,5 @@
initfs:bin/pcid initfs:etc/pcid.toml initfs:bin/pcid initfs:etc/pcid.toml
initfs:bin/redoxfs disk:0 initfs:bin/redoxfs disk:0
initfs:bin/pcid file:etc/pcid.toml cd file:
file:bin/vesad T T G export PATH file:bin
file:bin/ps2d run /etc/init.rc
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

View file

@ -1,19 +1,26 @@
use std::env; use std::env;
use std::fs::File; use std::fs::File;
use std::io::{BufRead, BufReader}; use std::io::{BufRead, BufReader, Result};
use std::process::Command; use std::process::Command;
pub fn main() { pub fn run(file: &str) -> Result<()> {
let file = File::open("initfs:etc/init.rc").expect("failed to open init.rc"); let file = File::open(file)?;
let reader = BufReader::new(file); let reader = BufReader::new(file);
for line_result in reader.lines() { for line_result in reader.lines() {
let line = line_result.expect("failed to read init.rc"); let line = line_result?;
let line = line.trim(); let line = line.trim();
if ! line.is_empty() && ! line.starts_with('#') { if ! line.is_empty() && ! line.starts_with('#') {
let mut args = line.split(' '); let mut args = line.split(' ');
if let Some(cmd) = args.next() { if let Some(cmd) = args.next() {
match cmd { 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" => { "echo" => {
if let Some(arg) = args.next() { if let Some(arg) = args.next() {
print!("{}", arg); print!("{}", arg);
@ -23,12 +30,25 @@ pub fn main() {
} }
print!("\n"); print!("\n");
}, },
"cd" => if let Some(dir) = args.next() { "export" => if let Some(var) = args.next() {
if let Err(err) = env::set_current_dir(dir) { let mut value = String::new();
println!("init: failed to cd to '{}': {}", dir, err); 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 { } else {
println!("init: failed to cd: no argument"); println!("init: failed to run: no argument");
}, },
_ => { _ => {
let mut command = Command::new(cmd); 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);
}
} }

@ -1 +1 @@
Subproject commit 7e7d2ada724c48b01a69ba72b105392557fa634c Subproject commit 2212c9b4822c44af90164bffeef29d903e6b39da

@ -1 +1 @@
Subproject commit b556eefe6071700905abef862967a316dc5b65c7 Subproject commit 3b7448c8fdb15857b813a90b2fba81393ef043be

@ -1 +1 @@
Subproject commit c21bd7618907c5d146c947e9b38d64fdb7479528 Subproject commit b2fa6a54d58691be8b6d30235a6668db3d29124a