Avoid panicking when inputting error app name; List all apps when initializing.

This commit is contained in:
Yifan Wu 2020-12-10 14:51:50 +08:00
parent 3642f9c56d
commit 3a2f89fc67
4 changed files with 19 additions and 6 deletions

View file

@ -51,3 +51,12 @@ fn app_names() -> Vec<&'static str> {
} }
v v
} }
pub fn list_apps() {
let apps = app_names();
println!("/**** APPS ****");
for app in apps {
println!("{}", app);
}
println!("**************/")
}

View file

@ -46,6 +46,7 @@ pub fn rust_main() -> ! {
trap::init(); trap::init();
trap::enable_timer_interrupt(); trap::enable_timer_interrupt();
timer::set_next_trigger(); timer::set_next_trigger();
loader::list_apps();
task::run_tasks(); task::run_tasks();
panic!("Unreachable in rust_main!"); panic!("Unreachable in rust_main!");
} }

View file

@ -59,10 +59,13 @@ pub fn sys_fork() -> isize {
pub fn sys_exec(path: *const u8) -> isize { pub fn sys_exec(path: *const u8) -> isize {
let token = current_user_token(); let token = current_user_token();
let path = translated_str(token, path); let path = translated_str(token, path);
let data = get_app_data_by_name(path.as_str()).unwrap(); if let Some(data) = get_app_data_by_name(path.as_str()) {
let task = current_task().unwrap(); let task = current_task().unwrap();
task.exec(data); task.exec(data);
0 0
} else {
-1
}
} }
pub fn sys_waitpid(pid: isize, exit_code_ptr: *mut i32) -> isize { pub fn sys_waitpid(pid: isize, exit_code_ptr: *mut i32) -> isize {

View file

@ -31,13 +31,13 @@ pub fn main() -> i32 {
if pid == 0 { if pid == 0 {
// child process // child process
if exec(line.as_str()) == -1 { if exec(line.as_str()) == -1 {
println!("Command not found!"); println!("Error when executing!");
return 0; return 0;
} }
unreachable!(); unreachable!();
} else { } else {
let mut xstate: i32 = 0; let mut xstate: i32 = 0;
let mut exit_pid: isize = 0; let mut exit_pid: isize;
loop { loop {
exit_pid = waitpid(pid as usize, &mut xstate); exit_pid = waitpid(pid as usize, &mut xstate);
if exit_pid == -1 { if exit_pid == -1 {