Nothing to see here, move along
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}