40 lines
1.1 KiB
Rust
40 lines
1.1 KiB
Rust
//! Lists a directory: `ls [dir]`, the root by default.
|
|
|
|
#![no_std]
|
|
#![forbid(unsafe_code)]
|
|
#![no_main]
|
|
|
|
extern crate libkos;
|
|
|
|
use libkos::fs::{FsError, Storage};
|
|
use libkos::println;
|
|
|
|
/// Where storage's buffer is mapped.
|
|
const STORAGE_BUF_VA: types::address::VirtualAddress = types::address::VirtualAddress::from_raw(0x0180_0000);
|
|
|
|
libkos::entry!(main);
|
|
|
|
fn main() {
|
|
let Some(mut fs) = libkos::start::storage().and_then(|ep| Storage::attach(ep, STORAGE_BUF_VA).ok()) else {
|
|
println!("ls: no storage");
|
|
return;
|
|
};
|
|
let dir = libkos::start::args().nth(1).unwrap_or("/");
|
|
let listed = fs.list_dir(dir.as_bytes(), |e| {
|
|
let name = core::str::from_utf8(e.name()).unwrap_or("?");
|
|
if name == "." || name == ".." {
|
|
return;
|
|
}
|
|
if e.is_dir {
|
|
println!("{}/", name);
|
|
} else {
|
|
println!("{:<24} {:>8}", name, e.size);
|
|
}
|
|
});
|
|
match listed {
|
|
Ok(_) => {}
|
|
Err(FsError::Denied) => println!("ls: {}: outside what it was given", dir),
|
|
Err(_) => println!("ls: {}: no such directory", dir),
|
|
}
|
|
}
|