Nothing to see here, move along
at main 51 lines 1.2 kB view raw
1#![no_std] 2#![no_main] 3 4use lancer_user::fs; 5use lancer_user::net; 6use lancer_user::println; 7use lancer_user::syscall; 8 9const INODE_TYPE_DIR: u8 = 1; 10 11#[unsafe(no_mangle)] 12pub extern "C" fn lancer_main() -> ! { 13 let (rx, _tx) = match net::init() { 14 Some(pair) => pair, 15 None => syscall::exit(), 16 }; 17 18 let mut args_buf = [0u8; 256]; 19 let args_len = net::recv_args(&rx, &mut args_buf); 20 let args = &args_buf[..args_len]; 21 22 let (_cmd, rest) = net::next_token(args); 23 let (path_tok, _) = net::next_token(rest); 24 25 if path_tok.is_empty() { 26 syscall::exit(); 27 } 28 29 let mut client = unsafe { fs::init() }; 30 31 match fs::open_path(&mut client, 0, path_tok) { 32 Ok(handle) => match client.stat(handle) { 33 Ok(st) if st.inode_type == INODE_TYPE_DIR => { 34 let _ = client.close(handle); 35 } 36 Ok(_) => { 37 let _ = client.close(handle); 38 println!("cd: not a directory"); 39 } 40 Err(e) => { 41 let _ = client.close(handle); 42 println!("cd: {}", e.name()); 43 } 44 }, 45 Err(e) => { 46 println!("cd: {}", e.name()); 47 } 48 } 49 50 syscall::exit() 51}