diff --git a/os/src/loader.rs b/os/src/loader.rs deleted file mode 100644 index bfdc3970..00000000 --- a/os/src/loader.rs +++ /dev/null @@ -1,62 +0,0 @@ -use alloc::vec::Vec; -use lazy_static::*; - -pub fn get_num_app() -> usize { - extern "C" { fn _num_app(); } - unsafe { (_num_app as usize as *const usize).read_volatile() } -} - -pub fn get_app_data(app_id: usize) -> &'static [u8] { - extern "C" { fn _num_app(); } - let num_app_ptr = _num_app as usize as *const usize; - let num_app = get_num_app(); - let app_start = unsafe { - core::slice::from_raw_parts(num_app_ptr.add(1), num_app + 1) - }; - assert!(app_id < num_app); - unsafe { - core::slice::from_raw_parts( - app_start[app_id] as *const u8, - app_start[app_id + 1] - app_start[app_id] - ) - } -} - -lazy_static! { - static ref APP_NAMES: Vec<&'static str> = { - let num_app = get_num_app(); - extern "C" { fn _app_names(); } - let mut start = _app_names as usize as *const u8; - let mut v = Vec::new(); - unsafe { - for _ in 0..num_app { - let mut end = start; - while end.read_volatile() != '\0' as u8 { - end = end.add(1); - } - let slice = core::slice::from_raw_parts(start, end as usize - start as usize); - let str = core::str::from_utf8(slice).unwrap(); - v.push(str); - start = end.add(1); - } - } - v - }; -} - - -#[allow(unused)] -pub fn get_app_data_by_name(name: &str) -> Option<&'static [u8]> { - let num_app = get_num_app(); - (0..num_app) - .find(|&i| APP_NAMES[i] == name) - .map(|i| get_app_data(i)) -} - -pub fn list_apps() { - println!("/**** APPS ****"); - for app in APP_NAMES.iter() { - println!("{}", app); - } - println!("**************/"); -} \ No newline at end of file diff --git a/user/src/bin/cat.rs b/user/src/bin/cat.rs index 988164d3..21de94f0 100644 --- a/user/src/bin/cat.rs +++ b/user/src/bin/cat.rs @@ -11,7 +11,6 @@ use user_lib::{ close, read, }; -use alloc::string::String; #[no_mangle] pub fn main(argc: usize, argv: &[&str]) -> i32 { @@ -21,14 +20,12 @@ pub fn main(argc: usize, argv: &[&str]) -> i32 { panic!("Error occured when opening file"); } let fd = fd as usize; - let mut buf = [0u8; 16]; - let mut s = String::new(); + let mut buf = [0u8; 256]; loop { let size = read(fd, &mut buf) as usize; if size == 0 { break; } - s.push_str(core::str::from_utf8(&buf[..size]).unwrap()); + println!("{}", core::str::from_utf8(&buf[..size]).unwrap()); } - println!("{}", s); close(fd); 0 -} \ No newline at end of file +} diff --git a/user/src/bin/huge_write.rs b/user/src/bin/huge_write.rs index f9dafa17..b00ca17b 100644 --- a/user/src/bin/huge_write.rs +++ b/user/src/bin/huge_write.rs @@ -18,7 +18,7 @@ pub fn main() -> i32 { for i in 0..buffer.len() { buffer[i] = i as u8; } - let f = open("testf", OpenFlags::CREATE | OpenFlags::WRONLY); + let f = open("testf\0", OpenFlags::CREATE | OpenFlags::WRONLY); if f < 0 { panic!("Open test file failed!"); } @@ -33,4 +33,4 @@ pub fn main() -> i32 { let speed_kbs = size_mb * 1000000 / time_ms; println!("{}MiB written, time cost = {}ms, write speed = {}KiB/s", size_mb, time_ms, speed_kbs); 0 -} \ No newline at end of file +}