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
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}