diff --git a/os/src/loader.rs b/os/src/loader.rs index 4f10ab65..d49cf694 100644 --- a/os/src/loader.rs +++ b/os/src/loader.rs @@ -51,3 +51,12 @@ fn app_names() -> Vec<&'static str> { } v } + +pub fn list_apps() { + let apps = app_names(); + println!("/**** APPS ****"); + for app in apps { + println!("{}", app); + } + println!("**************/") +} \ No newline at end of file diff --git a/os/src/main.rs b/os/src/main.rs index 78c08e2a..3b3eef9f 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -46,6 +46,7 @@ pub fn rust_main() -> ! { trap::init(); trap::enable_timer_interrupt(); timer::set_next_trigger(); + loader::list_apps(); task::run_tasks(); panic!("Unreachable in rust_main!"); } \ No newline at end of file diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index 656837e6..ca5d6c8f 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -59,10 +59,13 @@ pub fn sys_fork() -> isize { pub fn sys_exec(path: *const u8) -> isize { let token = current_user_token(); let path = translated_str(token, path); - let data = get_app_data_by_name(path.as_str()).unwrap(); - let task = current_task().unwrap(); - task.exec(data); - 0 + if let Some(data) = get_app_data_by_name(path.as_str()) { + let task = current_task().unwrap(); + task.exec(data); + 0 + } else { + -1 + } } pub fn sys_waitpid(pid: isize, exit_code_ptr: *mut i32) -> isize { diff --git a/user/src/bin/user_shell.rs b/user/src/bin/user_shell.rs index 3c59f123..b871ea74 100644 --- a/user/src/bin/user_shell.rs +++ b/user/src/bin/user_shell.rs @@ -31,13 +31,13 @@ pub fn main() -> i32 { if pid == 0 { // child process if exec(line.as_str()) == -1 { - println!("Command not found!"); + println!("Error when executing!"); return 0; } unreachable!(); } else { let mut xstate: i32 = 0; - let mut exit_pid: isize = 0; + let mut exit_pid: isize; loop { exit_pid = waitpid(pid as usize, &mut xstate); if exit_pid == -1 {