Nothing to see here, move along
at main 63 lines 1.5 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 9fn type_name(t: u8) -> &'static str { 10 match t { 11 0 => "file", 12 1 => "directory", 13 2 => "symlink", 14 _ => "unknown", 15 } 16} 17 18#[unsafe(no_mangle)] 19pub extern "C" fn lancer_main() -> ! { 20 let (rx, _tx) = match net::init() { 21 Some(pair) => pair, 22 None => { 23 lancer_user::show!(net, error, "netsock init failed"); 24 syscall::exit(); 25 } 26 }; 27 28 let mut args_buf = [0u8; 256]; 29 let args_len = net::recv_args(&rx, &mut args_buf); 30 let args = &args_buf[..args_len]; 31 32 let (_cmd, rest) = net::next_token(args); 33 let (path_tok, _) = net::next_token(rest); 34 35 if path_tok.is_empty() { 36 println!("usage: stat <path>"); 37 syscall::exit(); 38 } 39 40 let mut client = unsafe { fs::init() }; 41 42 let handle = match fs::open_path_with_rights(&mut client, 0, path_tok, fs::FsRights::READ) { 43 Ok(h) => h, 44 Err(e) => { 45 println!("stat: {}", e.name()); 46 syscall::exit(); 47 } 48 }; 49 50 match client.stat(handle) { 51 Ok(st) => { 52 println!("type: {}", type_name(st.inode_type)); 53 println!("size: {}", st.size); 54 println!("blocks: {}", st.block_count); 55 } 56 Err(e) => { 57 println!("stat: {}", e.name()); 58 } 59 } 60 61 let _ = client.close(handle); 62 syscall::exit() 63}